你知道LEGO推出了一款可编程的机器人吗?EV3是LEGO MINDSTORMS系列的第三代,相比NXT2.0,这个版本有更智能的处理器、新的传感器和新的组件,除此之外,它还具备更多你喜欢的东西。通过这篇文章,你将了解如何搭建一个利用颜色来分辨纸牌并同时将它们进行分类的机器人。你的机器人可以告诉你纸牌的颜色,即便你本人并不能看到纸牌。当然,这不是魔法,但是它听起来确实很酷。
除了需要一套EV3以外,你还需要一副Uno游戏纸牌,最好是一副比较旧的纸牌。老款的Uno游戏纸牌颜色比较单一,但是现在越来越多的款式是带斑点或是条纹的。如此一来,颜色传感器,很难正确判断纸牌的颜色。如果你的纸牌是一副新纸牌,也不要担心——我们将会进行一项小测试,然后决定是否需要提取出你这副纸牌中的某种颜色,以使检测能够顺利进行。还有一种选择,你也可以选用Skip-Bo或是Phase的纸牌。这3种纸牌都是Mattel制造的,并且在大多数零售店都有销售。
注意
为什么选用Uno?
因为Uno、 Skip-Bo以及Phase 10这3种纸牌都是这个检票机的理想选择,并且它们的颜色非常鲜明,和EV3上颜色传感器可以识别的颜色比较相近。更重要的是,这3种纸牌中所有纸牌的颜色都确切地固定在某个位置上,这就意味着你不需要为检测每一张纸牌的颜色而移动颜色传感器。如果你无法使用这3种中的任意一种的话,你也许也可以考虑选用Barclay Bridge的卡牌或是其他相似的卡牌,只要它们有单独且鲜明的颜色即可。
这将会给你带来两个挑战。
-要制作一个能分发纸牌的机器人。
-要设计一个能识别纸牌的颜色,并判断纸牌是正面朝上还是反面朝上的机器人。
图1展示了这个程序的流程图。
图1 如果你想要把所有检测出的颜色排列出来,那么这个程序还可以再设计得更庞大一些
头脑风暴与机器人搭建搭建这样的一个机器人,可能需要多次尝试并且会产生很多的错误,所以你应该先尝试着想出一些想法并提炼出其他机器人模型的精华。在这一阶段,你可以在不连接电机的情况下思考一些关于机械方面的想法。为了代替电机,你可以单纯地采用手动方式来移动将要被电机驱动的零件,然后测试你的想法是否正确。
这个机器人要分拣纸牌,那么它会怎么工作呢?你可以试着搭建一些能从纸牌堆中抓起纸牌的机械臂。这种紧握式机械臂需要齿轮来带动运转,而且是需要能够抓起单张纸牌而不是整副纸牌的机械臂设计。所面临的最大问题,就是让机械臂只抓起一张纸牌并将它从一叠移动到另一叠。
图2 这个机器人有一个抓举臂,但是它只能抓取较大的物块,而不能从牌堆中抓起一张单独的纸牌
与其思考所谓的“机械臂”,不如想一些能够推动纸牌的结构。举一个例子,你可以使用橡胶履带从牌堆的底部将某一张牌推出。如果牌堆有轻微的倾斜或是上翘,你也许可以考虑重力的作用,它可以避免其他的卡牌一起被推出(如图3所示)。
在测试中,履带没有完成所设置的任务。虽然它已经获得了重力的帮助,但测试最终还是以履带从牌堆中推出大量的卡牌而告终。
那么,如果用轮胎来替换履带会怎么样呢?轮胎也可以很好地将纸牌传送出去。不过我们可以进行一些改变,使它一次推出一张纸牌,而不是推出整个牌堆(如图4所示)。当颜色传感器开始检测反射光的时候,轮胎也会给颜色传感器留下恰好的空间来检测卡牌的颜色。
在尝试过使用手旋转一个简单框架下的轮胎后,我觉得这个想法将会是最好的选择。当两个轮胎被合起来一起使用时,它们的宽度几乎正好与卡牌相等。如果将牌整齐地堆放在一个角落中,而使轮胎克服重力工作时,也许它将会帮助固定未检测的卡牌。
图3 采用履带推出卡片的这个想法还没有完全实现
图4 用手动旋转的方式测试采用轮胎推出卡牌的方式是否可行。在你准备好将会做这个任务的机械装置之前,不需要去搭建复杂的结构
1 搭建一个平台在机器人如何进行机械运动上,我们已经有了一个基础的方案,让我们从搭建能够放置牌堆的基座开始,进行机器人的搭建。
提示
在你搭建机器人的过程中,也许你会想要频繁地测试机器人。尝试效率较高的机器人雏形,改进那些无法工作的部位;改进那些正常工作的部位,尝试让它们做得更好。那么,你需要通过不断搭建再拆卸,才能形成一个成熟的机器人形体。
(1) 搭建一个放置你的EV3智能砖和牌堆的平台。用3个梁框来搭建这个平台,打开的部分必须是牢固的,且能装下我们稍后将会放置的轮胎以及传感器。用黑色的销来连接梁框。
(2) 在这个平台的边缘横向放置一个长15M的黑色直梁,用来使平台保持稳固。搭建出的底座应与图5类似。
图5 用来承受EV3智能砖以及牌堆的一个简单底座
实际上,这个底座对于将要安装在其下面的颜色传感器来说还不够高,因为颜色传感器检测颜色的一端将会向上。所以,你必须将这个底座搭建得更高。就现在而言,让我们继续来确定所有的零件都已安装在正确的位置上。
(3) 以你的纸牌作为横梁长度的标准,并将横梁安装在纸牌的3条边,其中的一边要沿着平台的右侧,使纸牌固定在一定范围内(如图6所示)。使用黑色的销将这些直梁固定在正确的位置。同时,增加一个带有90度角的直梁,以及一个在右侧下方竖直放置的直梁,以便在后期使固定轮胎的轴能够保持在正确的位置。
图6 使用纸牌本身作为测量标准
在纸牌的遮挡下,想要看清这个装置的每个零件的确切位置应该是比较困难的,所以图7提供的是没有遮挡的图像。除了直梁以外,这里还有一个带90度角的梁臂。实际上这是在很多结构完成后才应该搭建的结构,因为它会与颜色传感器共同将纸牌移动到更加规范的直线内。
图7 到目前为止的纸牌检测机器人
(4) 将两个横向放置的横梁用3M的轴以及一个双向2M蓝色销连接起来,以准备颜色传感器的安装,如图8所示。
图8 颜色传感器已经准备好安装了
(5) 在机器人基座的右侧安装颜色传感器,将它放置在框梁里,使之与框梁齐平。在支撑机器人平台的一边的框梁中,用黑色的销连接横置的直梁,使其固定在框梁内部,并在直梁的下方连接颜色传感器(如图9所示)。传感器应该竖直向上放置,它将会检测牌堆最底部那张纸牌的颜色。
图9 在支撑机器人平台的一边的框梁内,连接一个直梁以固定颜色传感器
2 提升机器人基座因为你还没有搭建传送装置,所以你需要将基座稍稍举高,以给车轮足够的空隙,让它能够在不移动基座的情况下旋转。你也许还会想将基座稍稍倾斜一个角度,这样在其中一张纸牌正在被检测时,重力将会控制大部分纸牌保持在原来的位置。你可能还会想要确保在基座的前部有很多与地面可以连接的装置,因为如果你倾斜了整个基座,那么它将产生不稳定的现象,并且你还将把一个沉重的智能砖加在这个基座的上面。
用一个黑色的15M直梁、一个红色的3M可连轴直梁或是标准的3M直梁、两个双跨排架135度直梁、两个3M直梁和两个11M红色直梁(如图10所示)。
图10 安装在这里的直梁将基座提升了一个角度
注意
如果你在这一步骤中使用了3M可连轴直梁,就用蓝色的半轴销来固定它。如果你用的是标准横梁,那么就用黑色的销来固定它。
最终的结果是使机器人基座的前部高了3个直梁的高度,背侧高了一个直梁的高度。当你在基座上安装完“基座的鞋”后,你应该得到如图11所示的装置。
图11 我们的机器人现在有了“基座的鞋”
3 搭建轮胎传送结构要搭建轮胎传送结构,需要两个带有胎面花纹的大轮胎,并用EV3套装中最长的轴,穿过每个轮胎的中心把它们连在一起。在末端安装一个0.5M的黄色轴套,使轮胎保持应有的位置。将轴的另一个末端插在中型电机中(如图12所示)。
图12 将两个轮胎连接至中型电机
此时,轮胎传送装置需要安置在即将放置卡牌堆的区域的下面。将中型电机连接到中间的梁臂上,并且将轴剩余的长度穿过放置在纸牌堆右侧的红色的可连轴直梁和黑色的90度角的直梁。轮胎的顶端应该只比颜色传感器的顶端高一点。用另一个黄色的0.5M轴套来固定车轴。这个结构现在应该看起来和图13类似。
图13 中型电机以及轮胎已经放置在正确的位置了
4 检测这个装置此时,确保所有的东西都处于正确的位置上。将纸牌放置在机器人上,以证实颜色传感器已处在正确的位置上,并可以检测纸牌右下角的整体的颜色(如图14所示)。你还应该再检查一遍纸牌,以确保纸牌向后倾斜了一个细微的角度(这是为了确保整个牌堆在轮胎旋转时,不会向前滑落)。最后,用手尝试旋转轮胎,以确保它仍然能够将纸牌推出去。
如果这个结构没有像你所期盼的那样工作,这将是你解决问题的一个机会。你可以尝试摆平这个平台或是将轮胎举得更高,再看看能否将纸牌正确地移动。
5 安装智能砖现在是将智能砖安放在机器人上,并用数据线将电机和传感器连接到智能砖的时候了。用黑色的销将智能砖固定在机器人的左侧(如图15所示)。
图14 牌堆应该保持向后有微小角度的倾斜
图15 智能砖要安装在左边。在这张照片中,我将牌堆移走了,以更好地展示它们是如何安置的
将牌堆进行翻转再连接数据线会变得更容易些。将中型电机连接到C端口,将颜色传感器连接到端口3,如图16所示。
图16 这就是机器人的下方部位(暂时性地移走了机器人的基座)。这样你可以看到如何连接传感器和电机
6 控制纸牌现在这个机器人的大部分已经组装完毕了,你可以增加一些额外的保护装置,以确保机器人每一次运转都只推出一张卡牌。但是,照现在这个样子,纸牌在个别时候可能将会被成堆地推出,或是整个纸牌堆有时可能会一次全部滑落。虽然重力帮助了牌堆向机器人的后端倾斜了一些,但是你也可以用两种方式提升这种装置,即在牌堆的上方添加一个重量将牌堆压下去,或是添加某种大门以确保大堆的纸牌不会一次性被向外推出。
我为这个工程性的任务尝试了许多方案,并用实验来测试哪种方案是最有效的。最终,使用一个小脚轮将会是最好的选择(如图17所示)。它提供了足够的重量来保持牌堆,向下给牌堆施加压力,但它却并不影响如何处理卡牌。
令人遗憾的是,一个小脚轮并不是EV3家庭版套装的标准配件之一。你可以用大约35美元左右的价格购买它。不过单单为了一个项目购买另一个套装中的零件似乎有些浪费。
你可以尝试增加一把“剑”来确保整个牌堆不会一次性地从轮胎上滑落(如图18所示)。虽然这个装置解决了一次就将许多纸牌推出的问题,但是我发现它往往会在牌堆的末尾处施加太多的力量,而不顾后面的牌堆本来就已处于倾斜状态。当牌堆中只剩下一两张牌的时候,将会因为倾斜得太厉害而造成颜色传感器无法识别纸牌的颜色。
图17 一个安装在梁臂上的小脚轮为整个牌堆提供解决方案
图18 使用“剑”的方案以便多余的纸牌被一起推出
我找到了最有效的方法(不需要在家庭版套装中不包含的零件中花费金钱)——仅仅使用两个双角度弯曲横梁来给牌堆施加一个轻微的压力(如图19所示)。
图19 两个双角度弯曲横梁给牌堆施加了一点压力,以确保牌堆保持在原有的位置
除了在牌堆的顶部施加压力以外,你也可以将一个蓝色的长销插入90度角的横梁中,从前面包住整个向下流动的纸牌。这样整堆的纸牌不会一次就全部滑落出去(如图20所示)。
图20 小心地调整长蓝销的长度,确保只有一张纸牌可以从它下面通过
你可以单独看整个放置纸牌的装置,如图21所示。
图21 你可以将双角度弯曲横梁组成的胳膊整个举起,放入一堆纸牌
想要搭建放置纸牌的结构,你需要完成两个核心环节。
(1) 将两个红色的积木零件(一个分割两孔零件以及一个正规的零件)组装在一起,并用一个红色的3M轴将它们连接在一起,就像图22所展示的那样。
(2) 用一个黑销使两个双角度弯曲横梁分开,参照图23的方式将一根轴插入横梁中。
图22 用黑销将这个结构的两侧连接至用于支持的横梁中,重复两次。有两个方位的枢纽
图23 双角度弯曲横梁以及轴已经准备好待安装了
(3) 将轴穿过红色直梁稍低一些的孔中,如图24所示。
(4) 用一个额外的直角横梁来完成纸牌置放装置的搭建,如图25所示。
图24 将轴穿过红色直梁稍低一些的孔中。如果将轴穿过了稍高一些的孔中,那么直梁将会处于一个错误的角度
图25 完成后的纸牌置放装置
校准颜色传感器我要告诉你的是,当颜色传感器感应特定颜色时,你可以采用测量反射光强度模式下的灰度值的方式来调整颜色传感器。很不幸,你不能这么做。EV3套装中的颜色传感器可以区分8种不同的颜色,也许你所考虑的颜色不是这8种颜色之一。然而,它的颜色范围使每一种颜色的识别都非常精准,你不能通过EV3家庭版软件的校准颜色传感器来改变这个颜色范围。在这种情况下,意味着你只能检查卡牌是否在传感器检测的颜色范围内。
注意
高级的使用者可以下载新的固件以及一个为颜色传感器量身定做的模型,感谢在http://www.mindcuber.com/中提供的Mindcuber搭建图。 Mindcuber是一个可以用EV3家庭版套装来搭建的魔方还原机器人,并且整体的程序的编写已经远远超过了EV3家庭版编程软件的标准功能。
校准你的颜色传感器。
(1) 确保你的传感器已经连接到了端口3。
(2) 启动智能砖。
(3) 在智能砖上按右键导航按钮,直到导航到“Port View”选项卡。
(4) 按下中心的按钮以选择“Port View”。
(5) 在智能砖上按右键导航按钮两次到端口3。它将会显示“COL-REFLECT”以提示现在颜色传感器已经处于反射光检测模式了。
(6) 按下智能砖中间的按钮,会让你选择模式。
(7) 两次按下向下的按钮,直到选中“COLOR”为止。
(8) 按下中间的按钮以选择“COLOR”模式。
(9) 如果没有颜色展示在颜色传感器前,屏幕上应该显示“0”。
(10) 将一张卡牌放在颜色传感器的前方。数字将会根据所展示的颜色而变化,如图26所示。
颜色传感器的号码对应以下颜色。
0=没有颜色或是透明
1=黑色
2=蓝色
3=绿色
4=黄色
5=红色
6=白色
7=棕色
图26 颜色传感器显示数字6,也就是白色
因为不是所有颜色都在这个列表中,所以有些颜色将会被检测为另一种颜色。比如,橘黄色有可能被检测为黄色或是红色。注意你牌面上的任何颜色差异。如果这些差异比较特殊(紫色会被检测为红色,但是你不想要红色),你可以设置为其他相近的颜色。如果颜色传感器无法检测出两种颜色的不同点(比如,红色和蓝色都检测为蓝色),你就需要去掉牌堆中的一部分卡牌,以确保每张卡牌都会被检测为同样的颜色数值。
你的每一张卡牌都不应该检测到白色。我使用白色作为误差检测器。如果颜色传感器检测到了白色的边缘而不是彩色部分,那么就说明这张卡牌摆反了。
编写程序在你准备开始编写程序时,请先快速地浏览一遍在图1中展示的流程图。在开始模块后的第一个步骤就是检测颜色。你需要使用颜色传感器模块,但是这将使你一遍一遍重复使用颜色传感器模块。流程图中的环节主要是检测颜色,所以在开始模块后的第一个环节应该是循环模块。接下来,将循环模块拖入到正确位置(如图27所示)。
图27 容易忽略的循环模块
因为你知道循环模块在牌堆中的所有纸牌都检测完毕后应该停止,所以将模式改变为“颜色传感器——比较——颜色”。(记住,你可以单击模块的“模式”区域来改变模式。)选择0或是“无颜色”作为要检测的颜色(如图28所示)。注意一定要只选择0(在其他程序中,你可以选择许多颜色,但是这个程序不可以),而且还要双击以确定传感器模块对应的是端口3。
现在这一小步就已经完成了,在检测到没有颜色的时候,这个循环模块就会结束,但是只要有颜色能够检测到,它就会一直保持循环。
图28 确保只有0被选择
1 检测颜色下一个需要解决的问题就是检测颜色了。是的,你恰恰可以使用颜色传感器模块来完成这个任务。在某一种颜色被检测到的时候,你需要使机器人做出一些行动。你可以使用串联的切换模块。你也可以简化这一步,使用切换模块中的一个强大的功能。首先,按照顺序拖入一个循环模块,然后将模式转变为“颜色传感器——测量——颜色”(如图29所示)。
需要进行切换的两个颜色模块是黑色和无颜色。因为在循环跳出的模式中已经选择了无颜色,所以要将切换模式测量颜色中的无颜色改成白色。
还记得曾经提到的强大的功能吗?直到现在,你只是用切换模块判断二进制的情况。事情是真还是假。实际上你可以增加更多的情况,单击切换模块左上方微小的加号按钮。
图29 在循环序列中加入一个切换模块
图30 单击这个加号以增加新情况
你可以将这种新情况改变成“蓝色”或是任何你想要处理的下一张纸牌。你可以继续进行,并增加更多的模块来检测纸牌的颜色。
你也许会注意到,只添加了一个额外的模块,这个循环就变得非常长并且还有些细。如果你愿意的话,可以用“选项卡视图”来处理一下(如图31所示)。这是另一个在切换模块中十分容易被错过的模块。
图31 单击“选项卡视图”按钮以调整循环模块的长度
在选项卡视图中,这些小模块占有的所有空间只与一个模块所占有的空间相同,而且你只需要单击左边或是右边的箭头来在这个大切换模块中浏览小的模块。单击其中的一个模块以选择。如果这个程序十分复杂,你可以一直不停地单击“选项卡视图”按钮来浏览模块。
2 播放声音现在,你已经完成了切换模块的编程。回到图1中的流程图,去看看下一步应该做什么。你可以看到,每个颜色都应该使机器人发出一个声音,声音中要描述是什么颜色,然后转动轮子以推出这张纸牌。唯一的例外就是白色,需要反方向转动轮子(重新对齐纸牌)。
想要选择播放的音乐,首先将一个声音模块拖动到相应的切换模块。将模式调整为“播放文件”。对于文件名来说,选择“LEGO声音文件——颜色”,然后找到跟切换模块中的颜色所匹配的那个。在图32中,切换模块使用的颜色是黑色,因此我们选择了黑色所对应的声音文件。
图32 选择适当的声音文件
将声音模块拖至每一个切换模块中,并且选择与声音匹配的适当的声音文件。对于白色,打开“LEGO声音文件”后找到其中的“信息”,再找到“Error Alarm”。
3 加入电机模块现在,你需要使电机开始工作了。在循环模块后面加入一个“中型电机”模块。你需要测试你的程序,以此为纸牌找到恰当的数值设定。机器人应该正确地推出纸牌并保持剩余的牌堆对准出牌口。在我的机器人上,为这个任务所设定的数值分别是:电机功率61,时间0.2秒,如图33所示。
图33 中型电机刚好有足够的力量推出一张纸牌
为了重新排列方向偏离的卡片,需要添加一个中型电机模块到画布,并在−61的功率下转动0.2秒。这意味着它将会转向相反方向。接下来,测试你的机器人,放置所有的纸牌并运行这个程序。理想情况下,它将会按序通过所有的纸牌,并且在报出该纸牌的颜色之前确认其底部的颜色,随后处理这副牌当中的下一张。这个程序将会在所有的纸牌都处理完后停止工作。如果有的纸牌未能与传感器对齐排列,那么就要把轮胎倒回来重新尝试通过当前的这张纸牌,直到这张纸牌顺利通过并被确认颜色位置。在这个过程中,你很可能还是会遇到多张卡牌被跳过的情况,可以尝试通过实验来避免这种问题。
想出不同的解决方法是机器人搭建的挑战之一,正如你在本篇文章了解到的,有时你需要通过大量的实验和试错来找到一个工程的解决方案,这样机器人才能完成任务。
本文节选自《乐高EV3机器人搭建与编程》
本书详细地、按部就班地介绍了LEGO Mindstorms EV3,包含读者需要了解的所有知识点,以及需要掌握的基本的编程知识。你可以从刚刚开箱开始,了解EV3工具包的么个组件,从发动机到传感器再到USB连接器、遥控器以及新的改进的可编程CPU模块。然后,你将进一步发现EV3的新的和不同之处。随后,将学习构建自己的机器人,为LEGO添加新的苹果应用,使用轮子和发动机来创建驱动自己的机器人等。
〖特别声明〗:本文内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。如有侵犯您的原创版权或者图片、等版权权利请告知 wzz#tom.com,我们将尽快删除相关内容。