编程机器人是什么(编程机器人是什么课程)

编程机器人是现在的大热门,怎么带娃玩?从哪儿入门?怎么入门?逃爸带逃逃和几位小伙伴组成的团队玩了小半年,今天请他来给大家分享下经验心得。稍微需要提醒下大家的是,理工爸爸写怎么玩编程机器人,文章干得有那么一点点噎。不过,如果你正在陪娃玩,或者在不久的将来打算开始带娃玩,是蛮值得参考的一篇技术帖。

带着六位小朋友经过半年的准备,终于在上个月试水了第一次FLL,也就是俗称的乐高机器人编程比赛。这篇文章趁热打铁,聊聊针对孩子的机器人编程。

我们参加的FLL,是First Lego League(中国官网翻译成“工程挑战赛”)的简称。这是一个针对9~14岁孩子团队合作的全球性竞赛,主要考察3个项目,机器人比赛是其中之一。这个项目需要使用乐高的MINDSTORMS EV3组件,制作出机器人,并完成若干个指定任务。这是最低级别的机器人编程比赛,面向的孩子年龄最小,要完成的任务也最简单。(其实还有一个面向6~10岁小朋友的FIRST Lego League Junior,FIRST乐高联赛儿童赛。不过这个比赛和机器人没多大关系,孩子只需要为一定的目标用乐高设计和搭建好场景,并通过制作海报来向评委展示自己的作品就好。) 在FLL之上的级别叫FTC(First Tech Challenge科技挑战赛),针对12~18岁,再往上叫FRC(First Robotics Competition机器人挑战赛), 针对14~18岁。当然再往上还有针对成年人的机器人俱乐部,那就更专业了。

听一位行内的师姐说,这三五年参加FLL的队伍呈井喷式增长。就我们所在的达拉斯地区,三年前的比赛就百来个队,只需要比一天。而今年这次比赛有400多个队伍,3000多个队员,需要连续比三个周末才能比完。而且除了上面提到的First系列,还有很多其他的针对孩子的机器人比赛。 比如世界教育机器人大赛WER, VEX机器人大赛等等,这几年增长都挺快。我还纳闷为什么机器人编程突然这么火,不过想想也是情有可原。人工智能眼看就要秒杀人类,机器人进入千家万户的时代是呼之欲出。让孩子们从小就熟悉机器人是怎么创造出来的,就是和时代接轨。 以后当人类被机器人统治的时候,也算是知已知彼,不会太不习惯^_^。

《纽约客》去年一期的封面漫画:人类向机器人乞讨

下面是我理解的孩子的机器人编程,看看他们该怎么和时代接轨,迎接未来。

什么是机器人编程

首先,什么是“机器人”? 这个概念其实挺模糊。第一感觉,“机器人”不就是机器做的人。可除了电影里的变形金刚还算够格,那些生活里的扫地机器人,聊天机器人,和流水线上的装配机器人,哪里有“人”的影子?想想“机器人”就是翻译界的通假字吧,是Robot这个词一开始就翻译错了,只不过将错就错下去,直到大家见怪不怪,直到在“机器人”的展台上放只机器猪大家也不觉得有任何违和感。 所以,为了避免歧义,这里有必要先把本文中的“机器人”究竟是什么明确一下。

本文提到的“机器人”是指可以通过重构改变硬件,通过编程改变软件的可编程机器人。它包含的部分如下:

硬件

1. 基本组件。就好像我们常见的乐高玩具,包含各种形状的小组件,可以拼成不同的形状。 这会是机器人的身体。

2. 传感器。这是机器人的眼睛和耳朵,用于获取外界信息。常用的有获取旋转角度和速度的陀螺仪,获取颜色或反光度的光线传感器,获取外界触碰的触碰传感器等等。听上去很高大上,其实最便宜的智能手机里都有。

3. 马达。这是机器人的手和脚,肌肉和关节。所有的位置改变都靠它。

4. 控制器。这是机器人的大脑,决定机器人的行为。 通过和传感器连接获取输入,通过和马达连接控制输出, 通过和电脑连接将程序注入。 此外控制器可以接收遥控输入,还可以有图像或者声音的输出。

下图是乐高EV3系列中的触碰传感器,马达和控制器。传感器和马达不止一个,这里只是取了一个举例子 。

软件

一段程序,在电脑或Pad上编写,拷入控制器后执行。执行的程序可以获取传感器的输入数据,也可以控制输出。程序本身用的是可视化的编程语言,极易上手。

机器人编程,就是用硬件构造一个身体,用程序给它一套逻辑,利用它的传感器和马达,完成一系列的任务。

针对孩子的机器人编程组件,市场上已经有很多。这些组件都包含上面的软硬件要素,让孩子从零开始,实现初步的机器人编程。最流行的编程组件估计是乐高的Mindstorm EV3,和国产的能力风暴Abilix。两个国际性的机器人编程大赛(FLL和WER)分别是以它们为基础。他们其实很相似,要说区别,我觉得主要是下面几点。

1. Abilix的组件要比乐高的大一圈,可能因此觉得乐高的要精致些。

2. 乐高里的组件都是标准化的,也就是说乐高海量模型里的组件与EV3是兼容的。而Abilix专业做编程机器人,只有针对机器人的模型,其组件的选择肯定要少些。

3. Abilix的组件大多是两维可连接,而乐高只有一维。应该是材料学的进步,让两边开口还能保持一定的强度。下图可以看出,同样的一个L型组件,乐高(白色)一边开口,Abilix(黑色)两边开口,这让搭建的选择会更多些。

4. 都是可视化编程语言,但设计不同。Abilix用的是业内标准的Scratch儿童编程语言,而乐高是自己的设计。倒是都挺好用。

如果想让孩子尝试机器人编程,我建议如果不差钱懒得挑,就选乐高的EV3。如果走性价比,就选Abilix。如果想让孩子参加某个竞赛,那就看人家指定的是哪种。

机器人编程启蒙

第一次做机器人的孩子大都挺失望。他们本以为机器人就像童话里的陶瓷姑娘,给她撒上金粉,念段咒语,就可以开心的跳起舞来。可后来发现,自己搭出来的机器人即不美丽也不神秘,而即使这样的机器,搭建是异常复杂,软件实现也是相当困难,而且经常掉链子很不靠谱……哦,怎么说呢,孩子们,欢迎来到真实的世界,欢迎换个视角来观察问题。

用工程师的视角来看待问题,是做机器人给孩子的最大收获。机器不通人情,不会因为你的努力而通融,不会因为你的才华而动心。和它打交道,就得按照它的方式来,没有捷径。孩子完全不缺想象力,缺的是想象力和现实世界的妥协,不知道心中炫酷的想法如何一步一步实现。我想说,在机器人面前,把艺术家的天马行空暂时收起来,换用工程师的严格和脚踏实地来看看这个世界。

下面分别从硬件、软件和设计三方面来说说如何指导孩子做机器人编程。

机器人硬件

就乐高机器人的搭建来说,以前那些按照说明书搭建起来的乐高模型,都是浮云。逃逃和我以前搭过几十套模型,想想也算业内资深人士,可扔掉说明书开始搭建机器人的那一刻,完全抓瞎,一些基本的需求以为很简单,可自己就是没法实现。那几十套的搭建经验,远不如一个早上系统学习的收获大。 下面是我觉得需要系统学习的两点:

1、熟悉基本组件和基本技巧

知道你拥有什么,才知道你可能做出什么。对基本的组件非常熟悉,做的时候才能得心应手。以乐高里最常用的两个单位长度的连接件为例。长度一般模样类似, 为什么会有不同的颜色,仅仅是为了让做出的东西更多彩吗?其实,不同的颜色后面是不同的功能:黑色的连接是圆口有摩擦的,白色的是圆口没有摩擦的,蓝色的是一边十字口一边圆口有摩擦的,红色的是两边十字口的。 熟悉这些连接件,才能知道你可能做出怎样的扩展, 才能轻松的找到那个你需要的。

除了基本的组件,还需要知道搭建的基本技巧。比如说我们经常需要将两条长梁或平行连接, 或垂直连接。每种需求可以用哪些连接件以怎么的组合实现?不同的方式有何不同,又有何优劣? 这些技巧给你实现需求的最好的方式,让你事半功倍。这里推荐一本书《The Lego Mindstorms EV3 Discovery book》,主要讲的是EV3的软件编程,其中有两章讲了硬件基础,不长,很实在。有兴趣的朋友欢迎看看。

2、熟悉齿轮

机器人的动力系统,是搭建在电机和齿轮之上。 电机提供动力,而齿轮可以改变旋转的速度,方向和力矩,也可以改变力的形态,将动力以不同的形式传递出去。电机和齿轮一起,构成了机器人的动力基础。

电机的应用很直接。要么连着轮轴直接旋转,用么连上齿轮将力转化或传递出去。 而齿轮是有点难的,要用到一点点数学,了解一点点杠杆,最好还需要明白力和力矩的概念。不过下点功夫去理解齿轮,也就能了解真实世界里很多机械背后的原理,逃逃就趁着这个机会学习了汽车里的变速箱,这可是很划算的。

乐高里的齿轮大体分正面齿轮,侧面齿轮和蠕虫轮。组合起来的用法很多,建议多做些简单的练习,打好基本功,熟能生巧,到时候信手拈来。 下面是逃逃和我做的几个例子(基于EV3).

1. 招财手

2. 打桩机

3. 正面齿轮传动。 最右边的齿轮带动左边两个黑色齿轮转动,它们方向相反。

4. 侧面齿轮传动。 黄色齿轮带动两个黑色齿轮以相反方向转动

5. 蠕虫齿轮

6. 简单的变速箱

硬件有了,再说说怎么去做软件。

机器人软件

编程无外乎就是收集信息,做出反应。那么机器人的输入和输出是什么,它可以收集哪些信息,做出什么样的反应,又能实现什么样的逻辑呢?

1. 输入设备:传感器

机器人通过传感器来收集信息。 了解传感器,就是了解机器人触碰世界的能力。常用的传感器比如检测颜色和反光度的光线传感器;探测离障碍物距离的超声波和红外线传感器,测量旋转角度和速度的陀螺仪,等等。软件里面有专门的模块去获取传感器的数据,很简单。

2. 输出设备:电机

机器人通过电机做出反应。再复杂的动作,都是通过对电机实现,无外乎就是转的快一点,慢一点;正着转或者反着转。 有些机器人还能显示图像,声音,也算是对外界的输出吧。

3. 编写程序

和很多面向孩子的编程软件一样,机器人编程平台提供的编程模块很丰富,操作起来也很简单。全程用鼠标拖拽,再改几个属性即可,很适合孩子上手。 软件里众多的要素,比如循环,函数,条件判断,逻辑计算,甚至很高级的数组,多线程等等,它都支持,而这足以支撑起一个复杂的程序,实现复杂的编程思想。机器人编程这个主题可是够写几本书,开一门课,或者设一个专业,建一个博士后流动点什么的。这里就不细说了。

下面是个小例子,程序通过光线传感器检查地面的反光度得到颜色,根据地面是白色还是黑色控制两边的电机让机器人左偏或右偏,以实现机器人沿黑线走的功能。这是最后的效果,截了一小段,大家看个意思。

4. 机器人编程和纯软件编程的区别是什么?

纯软件是个虚拟的世界,简单而完美。而真实世界太复杂了,并且总有意外。 因此就需要更健壮的软件去化解这些复杂,处理这些意外。

举个例子来说明下硬件编程有多复杂。假设我们已经搭建好了一个通过两个电机做轮子驱动的机器人,我们看看如何编程让他实现“直行一米”这个在软件里一行代码就可以搞定的事。可能听上去会有些专业,但没办法,这是最简单的机器人编程都需要考虑的问题。

第一,因为着地点摩擦力不均以及电机微小的偏角误差,走直线的命令在实际中会产生偏差。走的越远,偏差越大。因此走直线需要通过陀螺仪校准,因为它可以记录机器人偏转的角度。在出发前将陀螺仪清零,在行进时根据偏转的角度不断进行调整。 调整的角度需要和偏转的角度相关,偏的越少,调整的也越少,这样可以尽快调正方向,又可避免矫枉过正走成之字形。

第二,程序上写的1米,可机器人并不会真的走1米,肯定会有误差。机器人停下后要检测轮子实际行进的距离, 多退少补再做微调。如果调整后陀螺仪显示方向有偏,再做调整确保机器人无偏, 调整的距离就是无法消除的误差。

第三,电池的电量会影响电机的准确度,进而影响行进的距离,速度以及偏角。 要想每次运行的结果完全一样,要么保证运行时的电量不能差别太大,要么根据电量的多少对行为进行补偿。我们测试时发现机器人在运行两三个小时后行为就开始出现偏差,就得充电了。

第四,机器人会偶尔出现死机,读数不准等硬件错误。比如我们发现EV3的陀螺仪有时候会突然出错,在静止状态下读数也会改变,必须重启机器人才能恢复。控制器本身可能会死机,也必须重启才能恢复。

做软件测试,一次通过次次通过 。而机器人,前5次都成功了,第6次还是需要祈祷才行。 复杂的世界,需要复杂的程序让他去实现简单的事。我想这也是机器人编程教给孩子很重要的一点。

机器人设计的原则

软硬件都打了点基础,现在有资格说说机器人的设计要注意什么。

1. 专注于需要完成的任务。没有规定机器人一定需要做成什么样子,得具备什么样的功能。不管黑机器白机器,能完成任务的就是好机器。机器人的设计只为这个目标服务,其他都不用考虑。

2. 尽量简单。和所有事一样,越简单越不容易出错,每一个部件都应该是有用的为目标服务的,否则就把它扔掉。孩子们喜欢给机器人加许多花哨的装饰,想象力应该用在怎么样做的更简单,每一个装饰都是有代价的。

3. 他山之石可以攻玉,网上资源很多,看看其他人是怎么做的。

对于一个有10多年编程经验的理科生来说,熟悉最初步的机器人编程都需要时间,何况一个孩子。所以机器人编程必须要有大人的引导,希望你也有兴趣,能带着孩子一起用工程师的视角去看看这个世界。能想象十年之后我们身边会有多少机器人吗?今天孩子们完成的那个简单的任务,也许就是一个伟大的开始。

<END>