好奇解魔方机器人
- 格式:pdf
- 大小:663.05 KB
- 文档页数:17
好奇解魔方机器人
版本信息:
1.1 在1.0的基础上增加了自动颜色校正,优化了执行程序,增加模拟魔方变化配置
1、技术背景
看了网上的各种乐高的解魔方机器人,参照着做了,但是结果总是不尽如意,分析起来存在如下问题:
1.在进行魔方旋转时,没有通过软件或者硬件手段对旋转的角度进行校正。
如果采用分层复原算法,对于一般的魔方,大概有100多步,再转换成魔方机器人能够操作的步骤,大概有300多步,要完成300多步的准确操作,在没有人工干预的情况下,对于NXT控制的电机来说基本是不可能的。
至于其它求解魔方的更优算法,目前网上我还没有找到公开的资料,如果哪位大神,能够有更好的算法,希望不吝赐教。
2.在复原魔方时只是单纯的通过蓝牙驱动电机,关于蓝牙驱动电机的每个命
令,我都进行了测试,效果都不太理想,很难将电机控制到比较精确的位置。特别是在同时驱动两个电机协调运行的时候,我采用过定时器和和多线程的方式。但是都没有达到 MINDSTORMS控制电机的效果。这样的结果只会导致软件对硬件的依赖性强,系统的可重复性差。
3.在进行复原操作时没有图形模拟,对于300多步的操作,如果没有仿真模
拟,用户等了20多分钟,只是看着机器人对魔方翻来覆去的操作,感觉心里还真没有底,因为中间如果错了一步,则最终结果就完全不一样。
针对上面的问题,我们对David Gilday搭建MindCuber的解魔法的机器人进行了改进,并且开发了相应的软件,好奇解魔法机器人解决了如下问题:
1.在进行魔方的旋转操作时,通过机械的手段进行了位置矫正,使得魔方总
是能够精确地停留在0°、90°、180°、270°的位置。
2.操作魔方时,采用了两种方式,一种方式是通过蓝牙直接驱动,一种是通
过驱动NXT中的程序进行间接驱动。这两种方式用户可通过配置文件进行配置。建议的驱动方式是:驱动颜色传感器时通过蓝牙直接驱动,而驱
动电机时则通过驱动NXT中的程序进行间接驱动。
3.在复原的过程中,进行图形同步仿真,操作过程中的每一步,魔方应该处
于什么状态,通过图形的方式向用户显示出来。这样用户就可以确定当前的操作是否正确。
2、硬件搭建
关于机器人的搭建,大家可以在网上搜索到David Gilday的搭建图,好奇魔方机器人的搭建是在David Gilday的MindCuber搭建的基础上改进的。好奇魔方机器人用到了几个乐高玩具版的零件,主要用于抓住魔方。当然我想你也可以用手头其它的零件替代。特殊零件如下图1:
图1 特殊零件
下图2是好奇魔方机器人的整体图,装魔方的小盒子我依据所使用的魔方做了一点改动,增加了8个套管,注意下图中的那个红色和黑色的套管是活动的哦。大家搭建时可以参考下图中的魔方小盒子的位置矫正功能,不用拘泥于下图的搭建,我做的第二版在下图的基础上有改动,只是更稳固,当然也用了更多的零件。为了便于颜色的识别,在选用魔方时,最好选用黑色的魔方,应为白色的
魔方会对黄色的识别造成干扰。一个解魔方的机器人套装应该要4千大洋左右吧,所以魔方我建议你最好也买个正版的品牌货,如果就拿个10元钱左右的地摊货就不要跟我说魔方总是旋转不到位,并且可能会很卡,如果一不小心把你电机烧坏了就得不偿失了。在调试时,最好上一点魔方油。魔方油?没有听说过?其实我也没有听说过,并在我所在的市区的各个商店还没有卖,怎么办,用食用油或者机油替代,好像不太卫生,想了好久,胡子都快跟眉毛一样长还没有结果,在打理胡子的时候,看到镜子旁边有一瓶护手霜,灵光一闪,对了,就是是它了!
用上去感觉效果还不错。
图2 好奇解魔法机器人整体图
对于魔法机器的其它部分的搭建可以参考下图3: 相信大家可以网上找得
到更详细的搭建步骤。
图3 MindCuber解魔法机器人
3、软件设计
好奇魔方机器人的软件不仅仅适用于上图的搭建,用户通过修改配置文件,
可以适用于任何单个NXT驱动的魔方机器人。软件的整体界面如下图4:
图4 好奇解魔法机器人软件
3.1 软件设计原理
好奇软件在复原一个魔方时,首先需要读入魔方的初始状态。当然你也可通过手动输入魔方的初始状态,在读入的过程中,在界面中通过平面和立体两种方式显示出来。通过平面图和立体图对比,你应该很容易分清魔方的前后左右了。在手动输入时,可以通过鼠标右键或者工具条进行输入,两种输入方式只能同时选用一种方式。选用工具条手动输入时,先选定一种颜色,然后直接点击平面图中的色块,就可以将该色块设置为选定的颜色;选用鼠标右键输入时,此时要确保工具条中所有颜色都处于未选定状态,在魔方选定平面图中选定相应的色块,单击鼠标右键,即可弹出右键工具条,选择你要设置的颜色,即可将选定的色块设置为弹出工具条中选定的颜色。由于魔方并不是任意的组装方式都有复原解,本软件并没有对你设置的颜色进行详细校验,注意不要输入错误的状态,否则可
能找不到解。输入完成后注意保存初始状态,因为在实际操作中,我发现无论是
通过颜色传感器读入还是通过手动输入魔方的初始状态,都是一个痛苦的等待过程。看来下次版本得增加一个通过摄像头输入的过程。
在读入初始状态后,系统通过层先发求解,对于一个一般的魔方,大概需要100多步。据说20步能够复原一个任意三阶魔方,能够写出这个算法的人,应该是神一样的存在了!听说有个美国的学生写了一个28步求解任意三阶魔方,那应该也是大神。我认为写出少于50步求解一个任意三阶魔方的算法,都应该是数学家的干活了。我曾经用递归的方法写了一个求解算法,但是当递归到第三层时感觉有点慢,递归到第6层时,我吃了个午餐,睡了个午觉,还去洗个冷水澡时间还绰绰有余。递归10层时,我最终选择直接将电脑关机……,如果要想等它递归完20层找到最优解法,估计上帝都等不到了。我分析了一下我的算法,魔方旋转的次数=18的n次方(n等于递归的层数)。看来这个工作还真不是一般人能够干得了的,没办法最后只得选用层先发求解,如果哪位大侠有更好的解法,希望不吝赐教。
系统在求解的过程中,将旋转的方式和魔方的所处的状态保存在左边的列表中,用户单击其中的任意一行即可了解到魔方当时处于什么状态。如果你有一个魔方不知道怎么复原,可以通过输入魔方的初始状态,让它给你求解,虽然方法有点笨,但是至少能够达到目的。
在找到魔方的复原解法以后,还不能直接给魔方机器人操作,因为魔方机器人能够操作的只能在水平或者垂直方向对魔法机器人进行翻转,或者对魔法的底部进行旋转,在进行垂直方向的旋转时,一次还只能旋转动90度,所以还必须进行操作转换。
在操作转换后,再可以让机器人操作了,但是在操作之前,你得先打开蓝牙,并且你可能需要先对魔法机器人进行调试。调试时你可以使用调试对话对水平翻滚的3个角度、垂直翻滚转1个角度(其它两个角度无非就是多转几次),和底面旋转的3个角度,总共7种操作进行调试。当然在读颜色时,你可以定义更多的操作。在调试完成之后你就可以对你的魔方机器人进行复原了,注意魔方的初始状态一定要放对哦,我的方式是将上图2中两个橙色零件中间的连杆贴着