会解魔方的乐高机器人

  Geek们从小就有许多奇奇怪怪的想法,做机器人就是其中一个典型,可是以前DI Y机器人至少要了解电子电路、嵌入式开发以及机械设计等多个领域的知识。如果你会一点编程,但是不会设计电路或者懒得焊板子,那么考虑一下用乐高积木吧!在很多人的眼里,乐高只是小屁孩们玩过家家用的,只能拼个小车,搭个小屋什么的。可是有些人永远想不到Geek会用它来做什么,就有人用乐高做了一个自动冲马桶的装置。当然,咱们暂时不会教大家做那个,这次咱们要教大家做的是一个乐高机器人,它的中文名字叫萝卜头,英文名是Robot。别看它个子不大,它可是由几百个乐高颗粒拼装组成,内置多个电机和传感器。可以读颜色,可以目测距离,甚至还可以开口说话。它的拿手好戏是玩魔方,能在几分钟内还原一个被任意打乱的魔方,还原步骤一般不超过25步,比它的主人还转得快。大家一定很感兴趣吧,下面我们就介绍一下萝卜头的制作过程。

  材料大采购

  那些从电路开始做起的G e e k们,他们买器件就像是软刀子割肉,今天几十大洋,明天几百大洋,最后都不知道要花多少钱。幸运的是咱们的萝卜头基本上就是一锤子买卖,总投资不超过三千元,一次买完之后就不用再掏钱了,而且可以反复利用,创造出更多有趣的东西。

  这可能是我们Big Plan介绍过最耗时的玩意儿了吧,不过,这个时间是作者边摸索边调试的时间,总共耗掉了作者三个多月的业余时间。实际上大家有咱们攻略可以参考,再直接使用代码下载的话,两星期的时间足够复制出来。其实做Geek的乐趣就在于不断的探索。

  自制电源

  由于N X T的套装不包含直流电源,单独买一个还很贵(含锂电池的套装大约要500元)。其实这玩意儿没什么技术含量,就是一个电池盒加一个变压器而已。

  本着高尚的D I Y精神,咱们决定自己动手制作一个简易电源,毕竟钱包里的钞票也不是大风吹来的。我们找来两根长度比普通5号电池稍微短一点的铁钉,在铁钉上分别绕上红色和黑色两根电线。然后把白纸裁成和5号电池一样高的长条形,用它将铁钉裹住,裹成差不多跟电池一样粗细,注意裹的时候要抹胶水,这样干了以后会非常结实。我们们再将一个圆口的9V电源(额定电流最好在800mA以上的)用圆口的小插座把铁钉和电源连接起来。一个相当山寨的电源就做好了,大多数器件都可以从百宝箱(更多的人称之为垃圾箱)里面找到。之所以选择圆口的电源,是因为乐高的锂电池接口是圆形的,这个电源还可以兼职做一个充电器。

  搭建底座

  接下来咱们就要开始使用乐高积木了,首先要做的是一个放置魔方的底座。我们需要围出一个擂台的形状:用结实的连接件做底部和柱子,用轴连杆做成围栏,然后给擂台铺上“地砖”,最后把整个擂台固定在一个可旋转的大齿轮盘上。这种大齿轮盘一面可以旋转,另一面可以用来固定,在制作萝卜头过程中是不可替代的。N X T的套装有很多版本,某些套装不包含这个大齿轮盘,提醒各位在购买的时候请注意查看器件清单。

  这个世界上就是有这么多巧合,一个七孔的乐高连杆正好比魔方长几毫米。我们恰好可以把魔方放到底座上去,既不会卡的太紧,又不会咣啷啷乱晃。因为擂台的“地砖”是由多个连接件组成,这种有沟壑的结构不利于魔方的翻转,建议大家在制作完成后需要给它铺上一层硬塑料片,顺手捏住魔方晃一晃看看松紧度,嗯,魔方翻动起来相当顺畅。

  安装各部位电机

  各位玩过乐高NX T套装的人都知道,它一共支持三个伺服电机,虽然不多,但是通过巧妙的设计同样可以完成很复杂的动作。首先我们要把底座变成一个旋转木马,将来就靠它来转魔方了。乐高电机的功率不是很大,必须经过减速齿轮来增强它的动力。这里选用的是一对7:1的齿轮组。电机和齿轮组的连接要固定好,否则魔方没转动,齿轮先飞出去了。大家可以看看底座接上电机后的样子。

  接下来我们要把整个底座连同电机一起固定在一个倾斜的支架上。这是因为在旋转魔方的过程中,必然需要翻面,而斜面的设计可以让魔方依靠自身的重力辅助翻面。没办法,NXT套装只有三个电机,要实现这么多动作,只能靠地球母亲的引力来帮忙了。经过我们多次试验发现,斜面的角度在40度左右时,翻转的效果最好。角度太小了翻不过去,太大了魔方很可能掉出底座,因此大家要注意反复调整角度,并把支架固定好。

  接下来我们就要安装第二个电机了,它是用来驱动颜色传感器的,也是要安装在刚才的斜面支架上。因为颜色传感器是用来读魔方颜色的,按照说明书的要求,读数时必须垂直于目标物体的表面,并且距离应保持在2~3cm。所以传感器必须安装在同一个斜面上保证垂直于魔方。连接的时候尽量多用一些散件加固,以保证安装好的传感器不会晃晃悠悠的。

  我们要安装的最后一个电机用来推动机械臂,这个机械臂是整个结构中的亮点。因为我们只剩下这最后一个电机了,它必须完成两种动作:当机械臂抬起到60度左右的时候,它的爪子正好把魔方整个抓住,这时候转动底盘就可以旋转魔方的底面。当机械臂抬起到120度左右的时候,爪子会变动方向,先把魔方向前推,随后方向又变成向下按,配合重力的作用完成翻转魔方的动作。

  咱们先把底座支架延长,然后用垂直连接件把电机和悬臂都固定在上面。为了提高电机的“臂力”,我们使用了一组3:1的减速齿轮。

  安装机械臂

  刚才提到了爪子的两个功能,为了完成两种动作,爪子的宽度要正好和魔方很接近,另外爪子上还需要一个横向的档杆,用于翻转魔方时使用。为了让机械臂更美观,我们特地加几个彩色的小配件美化了一下,在这方面,大家可以尽情地发挥想象力。

  现在我们要把爪子和电机用悬臂作,避免损坏电机。图中蓝色的连杆是用小刀削薄了一点的,因为它在运动过程中会不断的和边上的连杆摩擦。别看这小小的几根连杆,它们的长度、连接点位置还有相互之间的距离是经过N次尝试才试出来的。当我们安装完连杆后,萝卜头的外形轮廓就差不多出来了,看上去还有模有样的。

  安装颜色传感器

  接下来,我们要为萝卜头添加一些高科技的玩意儿。NX T可以同时支持四个传感器,对萝卜头来说,只需要三个就足够了,下面咱们来依次介绍。首先要为颜色传感器找一个好位置,它是用来读取魔方颜色的。我们从电机处垂直拉出一根连杆,然后把颜色传感器固定在连杆上。固定的位置也很有讲究,当连杆旋转时,颜色传感器需要正好落在魔方中心的正上方,并且距离魔方表面2cm左右。我们发现由于连杆比较长,传感器会随机的晃动。魔方的颜色块就那么一点大小,稍微一晃就读到别处了。所以我们在这里加上一根橡皮筋,这样它就不会乱晃了(可怜的原作者被折磨了一星期,才想到橡皮筋这个点子)。

  咱们要安装的第二个传感器是超声波传感器,它是用来测量距离的,乐高把它做成了一个眼睛的样子,真是非常有爱。为了让萝卜头看上去更像个人形,我们把它装到悬臂的最高点。果然看上去更像个机器人了,而且好像还跟霹雳五号有点亲戚关系。下面我们就给它分配点功能:利用超声波传感器的测距,让它可以通过编程判断底座上是否放了魔方。当我们把魔方放到底座上的时候,萝卜头就会发现距离产生了变换,立即启动解魔方程序;它的另一个作用是中断错误,如果魔方中途掉下底座或者是被取走,萝卜头会立即停止工作,避免损坏电机。

  修正误差

  咱们的工程进展到这里,萝卜头已经具有转动魔方的能力了。但是在干活的时候,我们会发现旋转的底座总是会产生误差。例如代码中发指令,让底座旋转90度,事实上它可能转89度,也可能是91度。随着误差的积累,最终会导致魔方斜在底座上,再也转不动了。所以我们再给萝卜头加上一个亮度传感器,把它安装在底盘下方。当底盘从传感器上方转过时,光线会发生变换,通过记录位置的变化,就能在程序中纠正旋转误差。因为乐高的器件很多都是灰色的,对光线的反射效果不好,所以用一圈白纸把底座围起来,这样就构建了一个误差修正装置。

  接线和其他

  行百里者半九十,咱们还是要把最后几个步骤要坚持做完。我们把NX T主机固定在萝卜头的侧面,这样方便拆卸,因为要经常把它取下来充电。把各传感器和电机都连接好导线,注意贴好标签以便区分,不然拆卸之后的接线会摧残你的耐心。用剩余的小零件把松动的地方都加固一遍。

  用彩色标签给它化化妆。最后在爪子的悬臂上添一个小人,哈哈,萝卜头顿时充满了喜感!结构部分到此就完工啦,换角度给大家亮个相。

  编写NXT内的Java程序

  乐高积木只是组成了萝卜头的身体,接下来我们还要用神奇的Java来给萝卜头注入灵魂。N X T自带的LabView软件功能非常强大,但是面对转魔方这么一个变态的工作时,它就显得有点力不从心了。还好乐高的开发者已经考虑到了扩展性,因此为我们提供了刷机的功能。大家可以从万能的互联网上下载最新的Lejos程序包,有了它,我们就可以使用J ava来编写程序了。N X T的背后螺丝孔里,有一个隐藏的刷机开关,用一种叫做牙签的“魔杖”按住它四秒钟,就可以进入刷机模式。具体的刷机步骤太过复杂,我们就不在杂志上详细叙述了,大家可以去作者的博客上看详细攻略(http://www.diy-robots.com/Redirect.aspx?id=2),作者不但提供了程序打包下载,还为大家提供了详细的安装说明。

  刷完系统,大家就可以像写其他J a v a程序一样进行N X T代码的开发了。据说某些代码狂人坚持用写字板直接写代码,顺便用C P U来做爆米花。不过咱们这些土包子还是挑一款好用的IDE(Integrated DevelopmentEnvironment,集成开发环境)吧,《G e e k》大力推荐的是I B M的Eclipse,玩Java的同学都听说过吧。程序写好以后,用Lejos自带的工具编译并上传到NXT中即可。我们给NXT主机分配的工作包括:

  1,读取各种传感器数据,并把数据通过蓝牙传送给电脑

  2,通过蓝牙接收电脑的指令,并驱动各个电机完成不同动作

  3,维持魔方的空间坐标系,配合电脑的指令

  4,其他操作,例如发声,中断,调试等

  魔方算法

  在萝卜头的攻略中,最受关注的就是魔方算法。很多人开玩笑说,这个小萝卜头的智商已经超过人了。其实萝卜头是站在了互联网无数巨人的肩膀上,魔方算法就是从网上找回来的。当然找来的代码拿给萝卜头用还需要经过一些加工。首先看一下魔方的通用表示法:

  UF UR UB UL DF DR DB DL FRFL BR BL UFR URB UBL ULF DRFDFL DLB DBR

  这一串天书一样的符号,其实表示的是魔方的12个棱和8个角,U、D、L、R、F、D分别是“上下左右前后”的英文缩写。算法返回的结果是魔方爱好者非常熟悉的黑话:

  F- U+ F- D- L- D- F- U- L2 D-其中+号表示顺时针90度,-号表示逆时针90度,2表示18 0度。请注意这个算法中,魔方的坐标系是不变的,而萝卜头把魔方翻过来倒过去的,必须再维护一套变换的坐标系。我的设计是把魔方想象成一个纸盒子,然后沿边缝剪开铺平,就变成了6个大方块,每个大方块中又包含了9个小方块,也就是一个6×9的数组。

……
关注读览天下微信, 100万篇深度好文, 等你来看……
阅读完整内容请先登录:
帐户:
密码: