前言:
今年很荣幸的参加了首届高等教育创意机器人大赛的主题二,机械手解魔方这个项目,此次比赛可以说收获颇丰。见识到了其他高校的机械手系统,可以说是仰慕不已,当然了绝大多数,还是比较传统的,在此只讨论视觉采集的方案,随后介绍我们的视觉方案。   单摄像头:纵观全局,一般的队伍,采用的是单视觉正对魔方采集信息的方案,机械手轮着切换面来识别每个面的颜色,这样不用说过程就比较耗时间。   双摄像头:看了很多的队伍,双摄采用的方案就是,两个摄像头成90度摆放,采集信息,这种方法可以同时采集两个面信息,然而实时上还是需要经过较多的面转换才可以获得全部的面信息。   三摄像头:在比赛中,也看到有几个队,三个工业摄像头同时采集(可以说很有钱,电脑也很好,我总共也就3个USB接口,难道不插串口了吗,当然了靠硬件总是很有优势的,全场硬件好的可以飞天,当然了有些队伍硬件一般做的效果也不错),三摄像头的布局就是上面对边一个,侧面各两个,这样机械手后面动两次把下端两面上去就OK,机械手的加持魔方的色块会导致颜色无法识别,所以侧面两个摄像头读取了8个块而已,在翻转后机械手加持的面还是那两个面,但是加持的位置已经变了,所以两次综合读取就可以获得侧面信息。才用这种方案的原因是因为他们的硬件系统导致的。当然也是非常高效的方案。
接下来我的方案可以说是相比他们具有一定优势。  
          先上一张待完成品的图片:
  从上图中可以看出,我们采用的是上下双摄像头对棱边采集面信息,这样做就可以同时采集四个面信息,而且机械手只要90度反转一次就可以获得全部面信息。相比三个摄像头,该种方法都具有一定的优势。   缺点:该种方法对硬件的准确性和稳定性要求较高,可是。。。这本身就是对机械要求很高的比赛。 采集的原理参考 :  点击打开链接  实质原理是一样的   从上图也可以看出,我们采用的是上下强光源照射,这样的好处就是可以降低摄像头的曝光,提高摄像头帧率,最最关键的是它可以在一定程度上降低外界光线的影响。当然了还需给他加一个类似灯罩的东西是光线柔和均匀,避免局部过强过弱。
对于信息块的采集,可以采用RGB熵或者HSV的方式,经过验证,两种方法都是可行,一定程度上,都对光线变化具有适应作用。对于颜色的区分,我们采用的是较为传统的方式,一位得力队友说采用KNN的方式来进行分类。个人认为,都是可行,没有必要把事情弄的复杂了。   色彩块信息的定位,一开始为了考虑到机械的误差问题。。。我们先提取色彩块,然后框选色彩块,在依据色彩块是否在坐标区域内来判定是那个位置的信息。 这样的优点是对机械容错性很高,面较正的略微有问题都是可以读取正确的。具体效果就是:   点击打开链接 ,从图中也可以看出是框选了的。具体算法这里就不献丑了。 事实上,如果机械这点容错性都达不到,魔方更本无法解完。所以这是在一个错误的认识上去完善一样东西,导致事情更复杂。。。。不过,对自己的锻炼也是很好的。在比赛的前一天,临时修改了这种方法,直接是在区域中心读取,简单方便。  
以下是我们的软件界面:
  从图中可以看出我们通过区域框选矫正获取信息,在矫正面上以固定的方式采集信息。事实上,我们的框是动态的,具体实现可以看 点击打开链接。 以下是摄像头参数调节界面:  
该软件是通过按键以不同模式来启动的,需要的伙伴可以留言,可以提供软件源码和使用方法,也希望大家能够指点。   这里给大家看下我们的原型机执行效果: 视频  这是我的bilbili网站,欢迎大家浏览。
机械手解魔方(2) 点击打开链接
可以直接到我的 github上参考代码:  点击打开链接