什么,你想玩乐高机器人?上班时间还没码够代码是么 ;)
这篇我来介绍一下乐高的MindStorms系列产品,通常也直呼其为乐高机器人系列,它的重点,是可编程的能力
乐高可编程机器人的产品历史,源自于和麻省理工学院合作的项目。从1998年推出了的第一代“智慧型可编程化积木” 开始,到目前为止(2016年),乐高机器人一共推出了三代产品,在此期间还陆续推出过大小几种简化的可编程产品,用于特定的套装系列。
Mindstorms的第一代产品当时全称还是 Robotics Invention System(RIS),主控模块是 RCX 1.0,在2000年前后,先后更新了RCX的1.5和2.0的版本
RCX做为乐高机器人第一代的产品,基本上已经奠定了后面几代产品的整体基调:
- 首先是有一个主控模块,可以通过编程,控制与之相连的外部组件,配备显示屏可以做一些信息和状态反馈
- 用于动力输出的马达,通过接口与主控模块相连接,接收指令,同时由主控模块供电
- 各种传感器(比如触动,温度,距离,光线等),同样通过接口与主控模块相连接,用于采集外部反馈
- 主要结构组件采用乐高科技系列的零件,(原因也很明显,机器人也是要用来执行各种机械运动的)
总体上来说,你可以认为,机器人系列是科技系列的一个智能加强版,通过编程来驱动马达,而不是像普通的科技系列套装那样,通过遥控来手工控制马达的运作。MindStorms系列的伺服马达和科技系列的马达构成也略有不同,MindStorms系列的伺服马达具备角度步进控制的能力,所以能通过程序精确控制并完成特定的定位动作
此外,传感器的引入,也使得MindStorms系列的编程不仅仅是完全机械化的执行固定的程序动作,而是可以将外部环境的信息采集反馈给程序,从而完成更加智能的行为控制
第一代产品RCX的主控模块,使用8位单片机进行编程,通过红外端口和PC主机进行通讯,用于下载程序到主控模块
2006年和2009年,乐高推出了产品名为NXT / NXT 2.0的第二代机器人产品,这一代产品升级了主控模块的芯片,使用主频48MHZ,32位的ARM 7芯片,支持USB和蓝牙通讯协议,程序可以通过USB接口下载到主控模块
叫机器人系列,没有个机器人的搭建方案怎么说得过去呢?NXT2.0 8547的这个双足步行机器人主模型,虽然走的颤颤悠悠,但是步行部分的结构设计还是很巧妙的(轮子驱动和踏步行走,实现难度完全是两码事)
2013年,乐高发布了第三代机器人产品 EV3,这一代产品的主控模块升级到主频400MHZ的ARM9芯片,内存由NXT的256KB升级到了64MB(还是小气。。。)运行的也不再是定制的嵌入式系统,而是基于Debian发行版的Linux操作系统,同时支持SD卡,usb,内置蓝牙,支持wifi等通讯协议
EV3的31313 套装,官方自带的五个示例中,包括这个眼镜蛇,能在地面滑行前进,头部附近遇到阻碍,能模拟发动攻击动作,第一次看到产品发布前的宣传视频时,着实让我惊艳了一把
之后,官网上陆续又添加了十几个玩家设计的模型,比如下面这两个:
整体上,乐高机器人三代产品的变更,主要体现在硬件参数和性能的提升,产品的基本构成思想并没有太大的变化,如下图EV3的产品模块说明,差不多就是机器人系列典型的核心组件了:
玩具版和教育版
从二代产品开始,MindStorms系列的具体产品套装开始区分玩具版套装和教育版套装,核心组件大致相同,小部分组件互有增减。另外,软件套件,自带的示例demo等都有些差别。玩具版就是正常的渠道销售的版本。教育版顾名思义,目标销售对象是学校等机构,同时也是官方的机器人比赛项目(FLL、WRO等)的指定版本,而EV3的教育版,甚至还有中国区特供的版本(功能并没什么区别,只是内置了识别芯片,用来区别其它版本。。。,类似游戏主机,锁区的意思),在国内教育版的价格通常大大高于玩具版的价格,原因你懂的,代理机构垄断。
下图是EV3的玩具版(31313)和教育版(45544/9898)的配件区别
此外,教育版还有补充包发售,比如45544对应的45560(然而,补充包性价并比不高,平时多买几个科技套装好了)
两个版本的套装,官方的示范模型完全不同,但是两套看起来都蛮有趣,自然有玩家希望兼顾,于是在淘宝上你就会看到各种31313升45544的补充包,或者反过来45544升31313的补充包在销售。。。
套内MOC
如果说科技系列的套装,更多的还是追求外形和功能兼备,每个套装多多少少有一些自己独特的零件用来凹造型,所以套内MOC(使用一个套装,自主搭建自己的模型)的能力相对有限(如果你同样追求形似),那么机器人系列的玩法相对来说,则更注重“智能”这一部分,机械和外形部分的诉求相对较低,大致有个模样就OK了,所以套内MOC的能力更强一些,一套EV3加上部分结构件就能玩出不少花样。当然了,如果你追求的是德智体美劳全面发展,那么零件储备还是多多益善。
编程
说到这才说到重点,搭建完模型的机械结构,只完成了第一步,你还需要通过编程来驱动你的模型
MindStorms官方推荐的编程方式,是使用基于NI的LabView平台开发的图形化编程软件进行编程(定位青少年嘛,也是为了降低编程门槛),使用的编程语言是被称作G语言的一种基于流程图的可视化编程语言。在NXT时代,对应的版本叫做NXT-G,到了EV3时代,也升级为EV3-G(2011年,NXT-G曾经在世界编程语言排行版上排名到第15位),NXT-G只有基于PC的开发平台,而EV3为了进一步降低编程门槛,还推出了IPAD版本的简化版的开发软件 : EV3 programmer
G语言使用各种功能模块和流程图模块来编写程序逻辑,通过设置各个模块的参数变量来控制程序的行为,如下图所示,EV3-G版本的编程软件支持的部分外设功能模块和流程运算模块
用这些模块搭建的一个简单的流程图,可能像下面这样:
稍微复杂一点的流程图可能像下面这样:
如果还觉得不够抽象的话,再看看RCX时代的G语言开发软件,ROBO LAB 写出来的程序,是长这样的 :)
乐高的图形化编程软件,有一点体验做得很棒:它将编程的实际操作和帮助文档有机的结合在了一起。在软件内以向导的方式提供了官方示例的机器人模型的详细搭建步骤,同时对于编程部分,也提供了分步引导的编程步骤。帮助文档的界面和实际编程的界面完美的融合在一起,很少看到过教学体验比这更好的软件。比如NXT2.0版本的一个弹球机器人模型的帮助文档如下图所示:
如果你有一定的编程经验,看到这里,你可能会怀疑,图形化编程虽然上手比较容易,但是在编写流程分支逻辑较为复杂的程序时,操作起来会不会比较麻烦?对于程序员来说,很多逻辑用代码来编写可能更加快捷一些,用各种组件拖拽,画成流程图反而是繁琐的
有这种想法的不止你一个,所以,除了乐高官方推出的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也就差不多了 ;)
书籍
编程自然离不开教材 ;) 理论上看帮助文档你也能学会,不过,还是看书来得快
首先当然是当家语言,NXT-G的教材了,下面这两本看起来比较靠谱(看起来,是因为我自己并没看过,当年玩NXT的时候,这么贵的原版书籍买不起:)
然后是EV3版本的教材,有中文版相对就便宜一些了:
第三方的编程环境也有教材,比如NXC(Not exactly C)
还有不怕事多,教你自制外设,动手改造硬件的书籍,比如下面这本Extreme NXT(这本书,若干年前出差去美利坚的时候,在amazon上淘了一本二手的,至今没有动手实践过。。。:(
总结
乐高MindStorms机器人系列产品,最好玩的地方在于拥有各式各样的传感器以及可编程的主控模块,发挥你的想象和编程能力,你可以用它来做很多有趣的东西,比如做个会折纸飞机的流水线,或者做几个机械时钟
即使你自己不具备MOC的能力,你也能在官网找到二十个以上有完整向导的示例模型,也够玩一阵子了
如果你不满意乐高主控模块的性能,也可以尝试一下Arduino,树莓派等开发套件,它们都有第三方生产的用来对接乐高MindStorms组件的外设转接板,然后,你就可以启动你的登月或无人驾驶技术的研究啦 ;)
好了,乐高的主要产品线,介绍到这里,也可以告个段落了,下一篇,准备介绍一下相关的社区和网站。最后,记得下次别人问你最近在做什么?你可以回答:哦,在研究 “两足步行装置的运动学原理以及基于PID算法的自适应姿态控制理论”