怎么,你想玩乐高机器人?上班时间还没写够代码?;)
在本文中,我将介绍 LEGO MindStorms 系列产品,也就是通常所说的乐高机器人系列。它的重点是可编程性……
乐高可编程机器人的产品历史源于与麻省理工学院合作的项目,从1998年推出的第一代“智能可编程积木”开始,至今(2016年)乐高机器人已推出三代产品,期间针对特定套装系列推出了数款不同尺寸的简化可编程产品。
各类可编程产品的主控模块
第一代Mindstorms当时被称为Robotics Invention System(RIS),主控模块为RCX 1.0。2000年左右,陆续更新了RCX 1.5、2.0。
RCX 1.0 9719
9719 套装内容
作为乐高第一代机器人,RCX基本为后续几代产品奠定了基础:
首先有一个主控模块,可以通过编程来控制与其相连的外部组件,并配备显示屏来提供一些信息和状态反馈。
用于动力输出的电机通过接口与主控模块相连,接收指令,并由主控模块提供动力。
各类传感器(如触摸、温度、距离、光线等)也通过接口与主控模块连接,收集外界的反馈。
主要结构部件均采用乐高科技系列的零件制成(原因很明显:机器人也用于执行各种机械运动)。
总体来说,你可以把Robotics系列看作是Tech系列的更智能、更强大的版本,它通过编程来驱动电机,而不是像常规的Tech系列套装那样通过遥控器手动控制电机。MindStorms系列中的伺服电机也与Tech系列中的略有不同。MindStorms系列中的伺服电机具有控制角度步进的能力,因此可以通过程序对其进行精确控制并完成特定的定位动作。
此外,传感器的引入也让MindStorms系列的编程不再只是完全机械地执行固定的程序动作,还能收集外界环境的信息并反馈给程序,从而实现更加智能的行为控制。
采用RCX1.0构建的自主履带车配备两个用于检测障碍物的触摸传感器。
第一代产品RCX的主控模块采用8位单片机编程,通过红外口与PC主机通讯,将程序下载到主控模块。
2006年和2009年,乐高推出了名为NXT/NXT 2.0的第二代机器人产品,这代产品对主控模块的芯片进行了升级,采用了48MHZ、32位的ARM 7芯片,支持USB和蓝牙通讯协议,可以通过USB接口将程序下载到主控模块中。
MindStorms NXT 8527
没有机器人搭建方案怎么能叫机器人系列呢?NXT2.0 8547的双足步行机器人主力机型虽然走起路来摇摇晃晃,但是行走部分的结构设计还是很巧妙的(轮子驱动和脚踏行走是完全两码事)。
8547
2013年,乐高发布了第三代机器人产品EV3。这代产品的主控模块升级为主频400MHZ的ARM9芯片,内存也从NXT的256KB升级到64MB(还是小气。。。)。它不再运行定制的嵌入式系统,而是基于Debian发行版的Linux操作系统,并支持SD卡、USB、内置蓝牙、WiFi等通讯协议。
EV3 玩具版 31313 的 5 个官方示例模型
EV3 31313套装包含了5个官方样例,其中就包括这条眼镜蛇,它可以在地面上滑行前进,当它遇到头部附近的障碍物时,可以模拟攻击动作。当我第一次看到产品发布前的宣传视频时,确实被惊艳到了。
31313 眼镜蛇
之后,官网又添加了十多个由玩家设计的模型图形化流程控件下载,比如下面这两个:
电吉他
敲地鼠 😉
总体来看,三代乐高机器人的变化主要体现在硬件参数和性能的提升上,产品的基本组成并没有太大的变化,下图所示的EV3的产品模块几乎就是该系列机器人的典型核心部件:
EV3 产品模块描述及连接图
玩具和教育版本
从第二代产品开始,MindStorms系列具体的产品包装开始区分玩具版和教育版,核心部件大致相同,也有一些部件的增加或减少,此外在软件套件、内置的示例demo等方面也有一些区别。玩具版就是正规渠道销售的版本,顾名思义教育版针对的是学校等机构,也是官方机器人比赛项目(FLL、WRO等)的指定版本。教育版EV3甚至还有针对中国地区的专用版本(功能上没太大区别,但内置了识别芯片以区分其他版本…,类似游戏机,也就是锁区的意思)。在国内,教育版的价格通常比玩具版要高很多,原因你们懂的,都是代理商垄断的。
下图是EV3玩具版(31313)和教育版(45544/9898)配件的区别。
主要组件
另外教育版还有补充包,比如45560对应45544(不过补充包性价比不高,平时还是多买几个技术套装比较好)。
两个版本的套装官方演示模型完全不同,但两个套装看起来都挺有意思的,自然有些玩家想同时拥有两个。于是在淘宝上你会看到各种从 31313 升级到 45544 的强化包,或者反之,从 45544 升级到 31313 的强化包在售……
套装内的 MOC
如果说科技系列的套装更多的是追求颜值和功能并重,每套都或多或少有一些独特的零件可以凹造型,所以套装中的MOC(用一套套装独立搭建自己的模型)能力就比较有限(如果你也追求相似的话),那么机器人系列的玩法相对来说更侧重于“智力”部分,对机械和外观件的要求比较低,有个大概的造型就可以了,所以套装中的MOC能力更强,一套EV3加上一些结构件就能玩出不少花样。当然如果你追求的是德智体美劳全面发展,那么零件储备越多越好。
编程
这就引出了重点。构建模型的机械结构只是第一步。您仍然需要通过编程来驱动您的模型。
MindStorms官方推荐的编程方式是使用基于NI的LabView平台开发的图形化编程软件进行编程(针对青少年,也是为了降低编程门槛)。使用的编程语言是一种基于流程图的可视化编程语言,称为G语言。在NXT时代,对应的版本称为NXT-G,在EV3时代,也升级为EV3-G(2011年,NXT-G在世界编程语言排名中位列第15位)。NXT-G只有基于PC的开发平台,而为了进一步降低编程门槛,EV3还推出了针对IPAD的简化版开发软件:EV3 Programmer。
适用于 IPAD 的 EV3 编程器
G语言使用各种功能模块和流程图模块来编写程序逻辑,通过设置各模块的参数变量来控制程序的行为。如下图所示为EV3-G版编程软件支持的部分外围功能模块和流程操作模块。
控制模块
控制模块
使用这些模块构建的简单流程图可能如下所示:
流程简单
稍微复杂一点的流程图可能看起来像这样:
更为复杂的过程
如果还是觉得不够抽象的话,可以看一下RCX时代的G语言开发软件,ROBO LAB编写的程序长这样:)
使用 Robolab 开发的程序
乐高的图形化编程软件有一个很好的体验:它将实际的编程操作和帮助文档有机的结合在一起。软件以向导式的方式提供了官方示例机器人模型的详细搭建步骤图形化流程控件下载,同时还提供了编程部分的分步编程步骤。帮助文档的界面和实际编程界面完美的融合在了一起。很少看到教学体验比这更好的软件。例如,NXT2.0版本中弹球机器人模型的帮助文档如下图所示:
NXTshooter 机器人模型构建示例
如果你有过一些编程经验,你可能会有疑问,图形化编程虽然上手容易,但是如果编写流程分支逻辑复杂的程序会不会很麻烦?对于程序员来说,把大量的逻辑写在代码里可能更快,而绘制流程图时拖拽各种组件又很麻烦。
有这个想法的可不止你一个,因此除了乐高官方推出的G语言开发软件外,各大第三方公司和个人爱好者也为MindStorms开发了支持各种编程语言的编程工具,包括:C/C++/Basic/Python/Java/Haskell/Ruby/C#/Lisp/Swift等,当然很多语言只是简化版(毕竟MindStorms主控模块的ROM和内存大小有限),并不是所有MindStorms产品都支持这些语言,目前NXT版的支持最为广泛。
理论上来说,既然现在的 EV3 运行的是 Linux,那么任何能在 Linux 上编译执行的语言都应该是支持的。不过前提是你需要有对应版本的编译器、EV3 硬件驱动的支持以及电机、传感器等部件的驱动库,以及各种外设的 Library 函数库。
在所有语言中,支持C语言的工具和开发环境是比较成熟和完善的,最重要的是简单和高效,大多数情况下,if else for switch就够了;)
例如,ROBOTC开发环境提供类似C语言的编程语言支持
图书
编程自然离不开教材;)理论上也可以通过看帮助文档来学习,但是还是看书比较快。
第一当然是主语的教材NXT-G了,下面两本好像比较靠谱(我好像是这么认为的,因为我自己没看过,当年玩NXT的时候,买不起那么贵的原版书:)
NXT-G 编程艺术
NXT-G 编程指南
然后就是EV3版的教材了,如果有中文版的话相对会便宜一些:
EV3 编程艺术
第三方编程环境也有教学材料,比如NXC(不完全是C)
NXC 编程入门
还有一些书是教你如何制作自己的外设和修改硬件的,比如下面这本Extreme NXT(几年前我去美国出差的时候在Amazon上买过这本书的二手,但一直没去实践过……:(
极限 NXT
总结
LEGO MindStorms 机器人系列最有趣的地方在于它拥有多种传感器和可编程的主控模块,你可以用它发挥想象力和编程能力做出很多有趣的东西,比如一条可以折纸飞机的流水线,或者几只机械钟表。
即使你没有能力自己创建MOC,你也可以在官网上找到20多个带完整向导的示例模型,足够玩一段时间了。
如果你对乐高主控模块的性能不满意,还可以尝试Arduino、Raspberry Pi等开发套件,它们都有第三方生产的外设转接板,用于连接乐高MindStorms的组件,然后就可以开始研究登月或者无人驾驶技术了;)
好了,关于乐高主打产品线的介绍就到此为止,下篇文章我计划介绍相关的社区和网站。
进一步阅读
暂无评论内容