张雨田
摘要:本研究在图像识别技术的帮助下,让乐高机器人完成解魔方的过程。在硬件条件受到限制的情况下,通过理论分析和实际测试,尽可能用合理应用函数、调整参数、适当控制外部环境变量的方式使颜色识别的准确性达到一个较高的水平。实验中,转魔方用的机械臂、转盘由Lego Mindstorms NXT的零件组装而成,魔方各个面的图像由一个普通摄像头拍摄,由一台电脑进行图像分析和还原步骤的计算。在魔方还原过程中,PC端和NXT端要运行各自的程序,程序均使用LabVIEW编写。
关键词:LabVIEW 乐高机器人 魔方 模式匹配 图像分析
中图分类号:TP242 文献标识码:A 文章编号:1007-9416(2014)12-0136-02
随着科技的进步,越来越多的人试图用机器人自动复原魔方。本研究参考了网上的魔方机器人的相关资料,实现了一个完整的魔方机器人系统。
1 系统结构
图1为包括机械部分和所有外部设备在内的完整系统结构。
2 硬件实现
机械部分采用了乐高MindStorms NXT机器人套件,采用2个电机配合完成魔方的翻滚与扭转,造型仿造了动力老男孩的博客中的魔方机器人[1]。此外,一台计算机用于分析图像和计算还原步骤并实时显示魔方当前状态,一个摄像头用于采集图像。
如图2所示,摄像头从魔方上方垂直对着魔方的角度进行拍摄,照明条件良好。使用的魔方为国甲5三阶速拧魔方。
3 软件实现
软件部分分为PC端程序和NXT端程序两部分。
3.1 PC端程序
PC端程序功能分为:(1)获取图像;(2)分析图像;(3)查错;(4)解魔方;(5)传送指令。
3.1.1 获取图像
拍摄魔方6个面的图像,存入指定目录下。
3.1.2 分析图像
分析图像部分的功能又可以分为四大块:(1)生成模板:生成6个面中心色块的模板。使用的模板图要注意参数选择。经过理论研究和实验测试,最后的选择是:模板图的类型用HSL(U32),模板的Learn Mode选的是Shift Information[2],模板的Feature Mode选的是Color。(2)生成色块数组:用模式匹配识别魔方6个面的颜色分布,并将结果转化为9*6魔方色块数组。由于区分红、橙、黄需要较高的色彩精确度,模式匹配函数的Color Sensitivity设为High Sensitivity。由于搜索的色块间距较近,Search Strategy设为Conservative。(3)显示魔方初始状态:用颜色模板拼出6个面。(4)算出魔方初始状态:查表把色块数组转化成规范的初始状态字符串。
3.1.3 查错
这部分是PC根据前一部分输出的色块数组,判断该色块数组是否合理(是否每种颜色各9块),从而判断是否继续进行解魔方的操作。
3.1.4 解魔方
本研究完成的系统中解魔方模块的采用Thistlethwaite's algorithm[3]算法,该算法和一般解魔方一层一层还原的思想不同。它一步一步减小魔方的打乱程度,使魔方变得能用越来越简单的步骤还原。群降法的思想复杂,却是最少步数还原魔方的最佳选择。算法实现参考了Jaap Scherphuis编写的[4]C++代码。输入魔方初始状态(每块的颜色,如:RU LF UB DR DL BL UL FU BD RF BR FD LDF LBD FUL RFD UFR RDB UBL RBU),输出解魔方步骤([面][旋转数],如:D1B3F1U3B1L2U3B2D3L2U1R1D1F2D1L2D2B2D3L2D1B2U2L2D2B2U2L2B2R2)。
3.1.5 传送指令
将解魔方步骤分成一个一个小步,逐步传给NXT,并在屏幕上显示魔方当前状态、变化趋势、还原步骤。
3.2 NXT端程序
NXT端程序分为:(1)初始化;(2)等待;(3)还原。
3.2.1 初始化
将魔方6个面的坐标数组初始化。坐标数组用于保存魔方每个面中心颜色(ASCII码形式)的变化。
机器人通过推和转的动作将要拍的面翻到顶面,然后通知电脑获取图像,直到6个面都拍完。
3.2.2 等待
该部分NXT的主要功能就是等待接收PC向它发送的命令。PC端的分析图像、查错、解魔方以及一些手动操作都在NXT的等待阶段完成。
3.2.3 还原
这一部分是NXT端的核心部分,包括两类操作:翻面和转面。翻面和转面这两种操作将会不断交替进行,直到收到PC端的结束信号。
(1)翻面:这一部分,要将需要扭转的面以最简单的步骤翻到底面,并更新坐标数组。坐标数组保存的是U、D、L、R、F、B六个位置的面最初所在的位置。翻转魔方用到机器人的4种操作的结合:(1)机械臂推,(2)底盘顺时针转90度,(3)底盘逆时针转90度,(4)底盘顺时针转180度。
(2)转面:这部分程序只需要根据收到的旋转数1、2、3分别在机械臂卡住魔方上两层的状态下让底盘逆时针转90度、顺时针转180度、顺时针转90度。
4 实验结果及流程
这里简略从用户角度介绍一下实验流程。
4.1 模式选择
打开PC端主程序后选择要使用的摄像头和通信方式(USB或蓝牙)。
4.2 选择感兴趣区
程序开始运行后,PC和NXT互相配合,采集图像,然后弹出对话框,让用户框出有效区。程序会在有效区中检测线段,从而找到中心色块,并生成6个颜色模板。
之后电脑将识别颜色,显示出魔方的初始状态,并判断颜色是否正确识别。假如不正确,用户可以选择重新识别。
4.3 进行还原
机器人根据PC端传来的指令不断进行各种翻面、转面的动作直到还原完毕。屏幕上会显示魔方状态图和还原步骤。图3为状态图。
4.4 实验结束
状态图显示6面同色,步骤显示栏显示完成,魔方还原完毕。
5 结语
目前解魔方系统的运行结果受到机械因素的影响较大,除了对于机械的改进之外还可以从改进模式匹配算法、改变颜色识别方式、增加传感器、增加剩余时间显示等方面进行改进。
本研究的重点在于对图像识别技术的应用。虽然魔方机器人属于娱乐性质,但是通过对图像识别技术的研究,我们可以了解到机器视觉的性能、受到的限制以及一些弥补的方式,从而将这一技术沿用到更贴近生产、生活的方面。
参考文献
[1]动力老男孩.魔方机器人.http://www.diy-robots.com/?page_id=46.
[2]National Instruments Corp.,NI Vision for LabVIEW User Manual. www.ni.com/pdf/manuals/371007b.pdf.
[3]Scherphuis, J., Thistlethwaite's 52-move algorithm. http://www.jaapsch.net/puzzles/thistle.htm.
[4]Scherphuis, J., Contest to Find a Short Program to Solve the Cube. http://tomas.rokicki.com/cubecontest/.