乐高深度扫盲:烧脑的可编程机器人
什么,你想玩乐高机器人?上班时间还没码够代码是么 ?
大家先来认识一下它叫EV3,我们叫它小E吧。
小E是个百变机器人,它可以每天变换不同的造型。
它很聪明,连解魔方这样的高难度要求,它都能做到。
但是,小E是个死脑筋,脑袋一根筋,如果你不把话说明白了,即使再简单的要求,它也是听不懂的。
我对小E说:走
小E:…………
我对小E说:往前走
小E:…………
我对小E说:往前直行
小E:…………
我对小E说:往前以20的速度直行
小E:…………
最终,我对小E说:往前以20的速度直行2秒钟
小E动了。(小E:你早这么说我不就知道了)
思考一下:是小E太笨了?还是我没有表达清楚?
答案:当然是没表达清楚。
1简单理解:程序代码、程序、编程
我们与机器人的交流,主要通过另一种语言来完成,这种语言一般被我们叫做——程序代码。
由一大串程序代码组成的一个整体的组合,叫做程序。
而将许多代码组成一个程序的过程,我们叫做——编写程序,就是编程。
小E是一个机器,需要用程序来跟它进行交流。不单是小E,我们家里的电视、空调、汽车、手机等等。其实都是在理解我们发出的程序,并对应执行某一个命令。
不同的是,机器的语言也有很多种,就如同人类的各种语言。会这些语言的人们可以直接跟机器交流。而大多数时候,为了方便更多人与机器交流,这些特定的人就会把各种机器语言(程序代码)翻译成你和机器都能理解的交流方式。
比如,你按一下遥控器,电视机换台了;
再比如,你点一下手机,电话拨出去了。
学习语言当然是很难的一件事,但跟小E的交流就没有那么复杂了,我们只要通过专用的编程软件Mindstorms软件就可以达到这个目的。
Mindstorms软件支持PC、MAC和iPad(PC和Mac为完整版),大家可以通过网络下载。(里面还提供一些经典搭建图和相关程序。)
我们可以看到,在这个软件中,工程师们已经把复杂的代码,都翻译成了一种大家都看的懂的图形,而我们需要做的,就是把这些图形运用起来,告诉我们的小E如何工作。
2简单理解:条件、动作、值
让小E做任何的动作,我们主要是要学会如何向它表达清楚我们的命令。
一个命令的产生目的,最终是希望它完成一个动作或几个动作。
每一个动作都是要明确条件的,每一个命令也可能是要配合许多条件的。
在机器的世界中,各种条件被转化为一种可以让机器理解的数据,或者称为“值”。生活中我们的所见所闻都可以变成一种“值”。
颜色——色值
光线强弱——光强值
声音大小——分贝值
力气大小——力量值
王者农药手游——KDA值,战力值……
这些值的单位不同,但一般都是用数字来表示,然后再在后面加上某一种单位。
简单一句话,要想跟机器人进行交流,那么就要知道“值”是什么。
各种值的使用,形成了各种明确的“要求”,这样一来机器才能听懂它具体该做些什么。比方说,我们从Mindstorm里面拉出这个最常用的,叫做“移动转向”的模块。
从上图,我们可以看到,移动转向是指机器完成的动作要求。
而其中有很多“值”是需要我们提供给它的。如上图。
上面这个程序,如果用语言来表达,那么就是:
以30的电机转速,往正前方,直行,2秒钟,惯性停止。
虽然我们刚开始学习,但一定要养成描述的好习惯,要具体,要准确。
我们日后在编写任何程序的时候,对于这些值的理解,都要非常清晰。不然当以后遇到复杂的程序时,一个值上的小差错,就可能造成整套程序的瘫痪。
上图别点开看了,省得头疼,这个程序还不能算是很复杂。
任何一个描述中的小错误,小E都会对这个命令的理解,产生错误。
于是只能对你说:对不起,我听不懂。
所以我们在编程的时候万万不能心急,要心细。每一个程序模块,都要能够说清楚它的条件和用途。
乐高可编程机器人的产品历史,源自于和麻省理工学院合作的项目。从1998年推出了的第一代开始,到目前为止,乐高机器人一共推出了三代产品。
各种可编程产品的主控模块
Mindstorms的第一代产品当时全称还是 Robotics Invention System(RIS),主控模块是 RCX 1.0,在2000年前后,先后更新了RCX的1.5和2.0的版本。
RCX 1.0 9719
9719 套装内容
RCX做为乐高机器人第一代的产品,基本上已经奠定了后面几代产品的整体基调:
-
首先是有一个主控模块,可以通过编程,控制与之相连的外部组件,配备显示屏可以做一些信息和状态反馈
-
用于动力输出的马达,通过接口与主控模块相连接,接收指令,同时由主控模块供电
-
各种传感器(比如触动,温度,距离,光线等),同样通过接口与主控模块相连接,用于采集外部反馈
-
主要结构组件采用乐高科技系列的零件,(原因也很明显,机器人也是要用来执行各种机械运动的)
总体上来说,你可以认为,机器人系列是科技系列的一个智能加强版,通过编程来驱动马达,而不是像普通的科技系列套装那样,通过遥控来手工控制马达的运作。
RCX1.0 搭建的自控履带小车,配备两个触动传感器用于探测障碍
第一代产品RCX的主控模块,使用8位单片机进行编程,通过红外端口和PC主机进行通讯,用于下载程序到主控模块。
NXT 2.0的第二代机器人产品,升级了主控模块的芯片,使用主频48MHZ,32位的ARM 7芯片,支持USB和蓝牙通讯协议,程序可以通过USB接口下载到主控模块。
MindStorms NXT 8527
NXT2.0 8547的这个双足步行机器人主模型,虽然走的颤颤悠悠,但是步行部分的结构设计还是很巧妙的。
8547
2013年,乐高发布了第三代机器人产品 EV3,这一代产品运行的也不再是定制的嵌入式系统,同时支持SD卡,USB,内置蓝牙,支持WIFI等通讯协议。
EV3 玩具版 31313的5个官方示例模型
EV3的31313 套装,官方自带的五个示例中,包括这个眼镜蛇,能在地面滑行前进,头部附近遇到阻碍,能模拟发动攻击动作,第一次看到产品发布前的宣传视频时,着实让我惊艳了一把。
31313 眼镜蛇
之后,官网上陆续又添加了十几个玩家设计的模型,比如下面这两个:
电吉他
打地鼠
整体上,乐高机器人三代产品的变更,主要体现在硬件参数和性能的提升,如下图EV3的产品模块说明,差不多就是机器人系列典型的核心组件了:
EV3 产品模块说明和连接示意图
玩具版和教育版
从二代产品开始开始区分玩具版套装和教育版套装,核心组件大致相同,小部分组件互有增减。而EV3的教育版,甚至还有中国区特供的版本(功能并没什么区别,只是内置了识别芯片,用来区别其它版本。在国内教育版的价格通常大大高于玩具版的价格。
下图是EV3的玩具版(31313)和教育版(45544/9898)的配件区别
主要部件
两个版本的套装,官方的示范模型完全不同,但是两套看起来都蛮有趣,自然有玩家希望兼顾,于是在淘宝上你就会看到各种31313升45544的补充包,或者反过来45544升31313的补充包在销售。。。
编程
说到这才说到重点,搭建完模型的机械结构,只完成了第一步,你还需要通过编程来驱动你的模型。
MindStorms官方推荐的编程方式,是一种基于流程图的可视化编程语言。在NXT时代,对应的版本叫做NXT-G。
到了EV3时代,也升级为EV3-G(2011年,NXT-G曾经在世界编程语言排行版上排名到第15位),EV3为了进一步降低编程门槛,还推出了IPAD版本的简化版的开发软件 : EV3 Programmer。
IPAD版 EV3 Programmer
G语言使用各种功能模块和流程图模块来编写程序逻辑,通过设置各个模块的参数变量来控制程序的行为,如下图所示,EV3-G版本的编程软件支持的部分外设功能模块和流程运算模块。
控件模块
控件模块
用这些模块搭建的一个简单的流程图,可能像下面这样:
简单的流程
稍微复杂一点的流程图可能像下面这样:
复杂一点的流程
如果还觉得不够抽象的话,再看看RCX时代的G语言开发软件,ROBO LAB 写出来的程序,是长这样的 :)
用Robolab开发的程序
乐高的图形化编程软件,有一点体验做得很棒:它将编程的实际操作和帮助文档有机的结合在了一起。在软件内以向导的方式提供了官方示例的机器人模型的详细搭建步骤,同时对于编程部分,也提供了分步引导的编程步骤。帮助文档的界面和实际编程的界面完美的融合在一起,很少看到过教学体验比这更好的软件。比如NXT2.0版本的一个弹球机器人模型的帮助文档如下图所示:
NXT Shooter Bot模型的搭建示例
如果你有一定的编程经验,看到这里,你可能会怀疑,图形化编程虽然上手比较容易,但是在编写流程分支逻辑较为复杂的程序时,操作起来会不会比较麻烦?对于程序员来说,很多逻辑用代码来编写可能更加快捷一些,用各种组件拖拽,画成流程图反而是繁琐的。
理论上,既然现在的EV3运行的已经是Linux,那么应该凡是能在linux上编译执行的语言都能支持,但是前提是,你需要有对应版本的编译器,EV3的硬件驱动和马达,传感器等组件的驱动库的支持,以及各种外设的Library函数库。
比如,ROBOTC 开发环境,提供类C的编程语言支持
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com