“磨人”的米兔积木机器人(下)

2016-12-21

序言

光阴“四溅”,日月如梭。

转眼之间,磨人的米兔积木机器人已经面市一段时间,相信大多数玩家都已经体验了搭建平衡机器人的过程,两只轮子直立行走的挑战已经可以从容应付。

 

然而,人生不止眼前的苟且,还有诗和编程。对于这款积木机器人,怎么能继续玩的更好、让这款玩具的可玩性更进一步呢?

答案就是:写!代!码!

作为“磨人的米兔积木机器人”的第三篇,这次我们说说 code 的那些事。

这款积木是面向大众的编程玩具,编程上手的门槛并不是太高,只需要通过指令流程和一连串积木模块的组合,即可完成逻辑的设定。

当然,再渺小的凡人也有伟大的片刻,再简单的事物也有很多的深不可测。格子君将带大家走进米兔版的编程世界,一览究竟,学习到底。

 

软件安装

米兔积木机器人的智能与编程部分,主要靠App来协助完成。各位iPhone用户在AppStore中搜索“积木机器人” 下载即可。(Android用户自行搞定下载过程,不再赘述)

 

前两篇的“磨人”系列文章已经针对App的操控部分做了说明,此次我们直奔重点,进入编程模式。

编程模式下,有开始、存档和教程三部分,分别能进入编程主界面、读取存档记录和简易指令教程。

 

 

内置教程

建议对编程知识一穷二白的玩家从内置教程开始成长,这里有简单语句的演练环境。其实说的直白点,就是照猫画虎式的培训,米兔积木机器人的App设计上确实没有那么高端,编程教程的整个上手体验很一般。

教程分为八个关卡,每一关卡的操作方式基本一致,只需根据关卡提供的样例在屏幕上拼摆出一模一样的流程即可。需要注意的是,关卡题目小弹窗左边部分的样例是显示不完全的,有时看整体需要进行拖动,相信并不是每个人都能意识到这一点,十分不方便。

拼搭的过程中可以随时点击右上角的问号按钮来对照哪里拼的不对,基本实现了抄作业的效果。更为可怕的是,过关的条件苛刻到每一个无关紧要的数值参数都不能有丝毫误差的令人发指的地步,一个感觉:死板。

这样的后果是容易让玩家在无足重轻的部分耗费精力过多,而忽略了后面真正的重点。

亲手操作一下就能体会到设置数值时必须与指定数字一致的尴尬,尤其有些速度参数还不能直接链盘输入,只能在屏幕上通过手指拖动数值盘来调整,真心为手大和手抖的玩家捏了一把汗。大力水手是不适合米兔这款积木的客户端操作的。

完成上一关,便可进入下一关,完成后还有特别无聊的过关文案。

感受一下,这里的尴尬。

这是在用“未来的...”造句么......

好吧,无需吐槽。完成生搬硬套的教程之后,基本上能够了解大多数语句的操作与设置,下面来详细了解一下每个语句的意义。毕竟模仿不是全部,理解才是万岁。

 

两种模式

米兔这款积木机器人与其它机器人最大的优势之处在于有一个两轮平衡模式,能自动控制电机保持直立行走。

那么问题来了,如何做到保持两轮平衡的同时,让玩家控制某一个电机转几圈这样的需求呢?聪明的设计者早就想到了这个问题,他们的实现很睿智,三个字:“做不到”。

在代码块里有两个名词:“双轮平衡”和“自由控制”。双轮平衡模式不能单独控制电机;自由控制就是关闭平衡从而可以分别控制两个电机的动作。

下面这条开始语句是每段编程代码的第一条语句,也就是每段代码开始的大前提。

另外,针对控制模式的选择,会对动作控制指令有影响。平衡模式下,单独控制电机的语句是不能用的,只有如下三条指令用于行进:

自由控制模式下,能单独控制电机状态(转动速度、转动角度、转动时间、转动圈数),而不再有控制前进与转向的语句,需要玩家自行控制电机的运行实现行进。

这里有个“神奇”的效果:当动作控制部分处于展开状态时,切换开始指令中的控制模式,不可用的语句是不能在可用语句栏中自动刷新的,只有将动作控制栏关闭再展开,语句栏才会进行刷新,将不可用的语句消失掉。呵呵,细节决定成败,待优化吧。

 

指令解析

指令语句分为四大部分,分别是动作控制、条件判断、循环控制和运算指令。

 

 动作控制

直接控制电机以0~100的速度,转动若干秒。

 

直接控制电机以0~100的速度,转动若干圈。

 

直接控制电机以0~100的速度,转动若干的角度,角度范围是0~360。

 

控制直立状态下的平衡机器人旋转若干角度,旋转的速度0~100。比如以左转、速度30的状态,转动180度。类似于地球的自转。

 

控制直立状态下的平衡机器人以某个角度来实现行进中的转弯,速度范围0~100,转角范围0~90度。比如以右转,速度25的状态,转动行进10秒,转角参数为45度。

如果说上面的旋转语句类似于控制地球自转,那此语句就是控制地球的公转,让机器人围绕着某个点进行绕圈子。

 

控制直立状态下的平衡机器人以指定速度前后移动若干秒。

 

控制主控器发出声音,有二十多种音效供选择。

 

等待指令的作用是将运行状态暂停若干秒,这句指令也有悬疑。在App的语句说明中,此指令的描述为:保持上一个指令一段时间。然而经过实际测试,并不是。目前运行环境机制下所有的指令都是顺序执行的,必须完成上一句指令后,下一句才会开始,才会进入等待(暂停)状态,并不会有所谓的保持上一个指令的效果。况且目前的动作指令都是有明确停止条件的,或者是几秒或者是几圈或者是一定角度,所以也不需要单独去设定要保持某种运行状态。

其它竞品编程环境的动作语句会有开放式的指令,类似前进、后退的指令,并不会限定具体行进的时间或者圈数或者角度,对此类动作进行保持和号令停止是有意义的。然而这里并没有。

目前的等待指令只是让程序运行暂停几秒钟,罢了。

 条件判断

当如果中的条件成立时,执行代码块里包裹的语句,条件的菱形框可以拖入形状一致的菱形语句,比如真假条件或变量比较条件。

变量与数值进行比较,如果成立则执行代码块内的语句。

 

循环控制

表面上看,这条语句是以循环时间为条件执行代码块内的语句若干时间。但实际上测试发现,这个语句没这么简单。

当代码块里的执行耗时很短时,会执行指定时间的循环,但是当耗时长的语句出现时,会把秒数当成次数来执行。想想看,下面这段代码最终效果是什么?

是机枪的声音。

出现如此的错误,不知是App存在的bug还是偶然现象。

无限次执行代码块内的语句,目前App并不支持跳出语句,所以无限循环语句常用于最外层的包裹,让全部的指令能够反复执行。

运算指令

设置变量值,系统支持定义ABCDE六个变量,变量只能是数字类型,不能设置字符串。变量在使用前需要赋值后再使用。

 

让变量进行自加一运算,比如变量值为4,执行变成后,变量值为变为5。

下面是一堆类同指令,排成一队做大雁迁徙状:

这批指令的功能是随机设置变量为一个范围内的数值。范围可以指定为变量与数字、变量与变量和数字与数字。

看到这里,格子君真的想说,有必要么?有必要把如此雷同的指令弄这么眼花缭乱的一堆么。无形之中提升了编程开发的繁琐度。

其实只需一条变量与变量做为范围就足够了(有数值需求可以通过定义个变量并赋值来实现),深深的以为弄这么多雷同指令并没什么意义,小米系的硬件不是以极简为美的么?软件也需做减法,雷总加油。

 

了解了每一条指令的功能,就可以随意拖指令块到屏幕中进行逻辑的设定,点击上传执行按钮便可以在主机上运行代码查看效果。

值得注意的是,米兔积木机器人的代码运行方式是不能脱离App而独立运行的。退出App后,机器人并不能继续之前的程序运行状态。格子君猜测其实代码并没有上传到机器人的主机之中,所谓的“上传运行”只是在App中运行逻辑解释,然后由App不断给机器人主机发送指令罢了。这并不是一种很好的方式,对App的过度依赖让机器人并不能固化逻辑,也做不到即开即用的状态。

 

 特别期待

 

传感器配件千呼万唤快出来

 

通过以上指令的学习,我们可看出,由于目前的米兔积木机器人并没有提供传感器配件,所以编程的水平还停留在无视外部条件,不能根据环境进行响应的阶段,如自动转弯、根据声音或者其它外部环境的变化进行“智能”应对的效果是不能实现的。

如果非要使用目前的配置来实现“智能”,最可行的方式是使用随机变量来做为停顿动作和行进逻辑的判断,制造与环境无关的不确定性,来达到机器人走走停停的“伪智能”效果。

没有传感器的机器人是不完整的。

好在,官方一直说相关传感器配件会尽快推出的,我们选择相信。毕竟米兔的主机上还有两个接口还没用上,声音输入也没发挥出功能来呢。说好的红外、超声、颜色传感器千呼万唤。

 

并行逻辑的缺失限制发挥

 

目前的运行环境还有一个更大的限制:指令语句不能并行运行。比如在自由控制模式下,一个轮子旋转的同时,是不能让另一个轮子也旋转起来的;正在旋转轮子的同时是不能播放音乐的,是不是很悲催?!离开了平衡模式,主机甚至都不能让两台电机同时转动,这样连两驱车都是做不出来的,是不是很捉急,急。

这种状况对开发出体验较好的机器人效果有很大的限制,只能一步步完成每个动作,没有混合或者组合的判断,相比同类注重编程开发的智能玩具,还是有一定差距的。

 

编程开发环境尚且初级

 

目前米兔积木机器人的编程开发只能使用手机上运行的这款App来进行,而放眼世面,其它同类产品至少会有Pad版或桌面版来方便操作,然而米兔并没有。

广大粉丝只能在小小屏幕的手机上进行指定的拖拽,很不方便,容易误操作。在实际体验编辑代码块的过程中,稍长一些的指令块经常超出屏幕范围,编辑起来只能靠拖,并且一屏幕只能显示几行指令,稍长一点的逻辑处理起来十分不便。拖拖拖是最常见的操作。

除了存储和读取,编程环境并不能对代码进行过多的操作,比如不支持导入和导出,或者上传到云端备份。只存储在本机的话,很多情况下,辛苦码好的逻辑容易丢失,从而前功尽弃,这也是编程开发环境需要进一步提升的部分。

真心希望小米能够像硬件的性能品质一样打磨软件的开发环境,到那时起,这才是真正一款有国际竞争力的强势产品。

 

结束语

综上所述,米兔积木机器人的编程开发部分只能说表现平平,并没有像硬件品质与性价比一样带给人惊喜,这也是目前编程操作部分并没有在玩家圈子形成氛围的原因。作为一款定位于可编程、智能类型的积木机器人产品,可编程部分一定要成为优势部分。期待小米后续的努力,随着选配传感器的推出,让小米这款积木机器人进阶成功。

 

最后,祝米兔积木机器人能茁壮成长,早日成材!

 

 

 

文章原创,转载请注明出处。

 

想了解更多玩具动态,请关注我们的微信公众号 “玩具格子”。