自动解魔方机器人1 [算法篇]

魔方机器人其实上个学期就已经做完了,参加了机器人大赛的创意组。

本来想写一个教程,一直没时间整理(其实是懒),这次先把我觉得比较重要的东西写一下,主要是为了记录一下我的制作过程和制作思路,给有同样兴趣的同学提供一些微小的帮助。

 

 

最终方案是用普通usb摄像头拍摄魔方的六个面,依次识别每个面,并在MATLAB写的上位机上把识别结果显示出来,确认颜色无误后再拍摄下一个面,识别完6个面后点击解魔方,就会在上位机上显示出解法步骤,点击发送就可以从串口发送给机器人了,MATLAB的代码简单易读,例程也多,所以从入门到写完这个上位机也没花多少时间。

机器人的单片机程序也挺简单的,接收从串口发送过来的解法步骤,再做相应的动作就可以了,使用的是步进电机,不需要闭环控制,在不丢步的情况下都能转到应该的位置。

机器人的机械结构,参考了视频中的方法,要转动魔方的一个面,我们直接转动最中间的那个块就可以转动整个面了,想用铁片制作一个爪子可以抓住中间块的,三个人搞了半天才做出来几个,使用效果也不是很好。魔方中间块的盖子是可以掀开的,我就直接把盖子固定在电机转轴上,这样就可以用电机转动魔方了。电机的固定,在实验室找到几块木板,用胶枪搭起来了。

在制作过程中,最重要的就是找到合适的解魔方算法,在找算法的时候先找到了一个软件叫Cube Explorer,,百度一下就可以找到下载链接了,我在写自己的上位机的时候也是参考这个软件写的,后来又找到了直接用命令行调用算法的版本,这时候我才开始写上位机。

Cube Explore 中文手册:

链接: https://pan.baidu.com/s/1kU6Wru3 密码: 8hvd

软件界面:

Cube Explore是一个比较有名的软件了,一直都在更新。这个软件可以直接调用你电脑上可用的摄像头,扫描完成后就可以得出结果了。还有一些网络端口什么的,可以直接和这个软件通讯,没有研究太多,这个软件的所有具体说明请看手册,这个手册本身也是魔方爱好者写的。

因为我想锻炼一下自己,也是为了学习一下做GUI程序,做出自己需要的功能,所以我最终还是选择自己写一个上位机。

最终上位机界面:

我自己写的上位机就不拿出来了,太粗糙了。

kcube算法:

链接: https://pan.baidu.com/s/1eRA4oQu 密码: wtru

阅读文件中的README.txt或者去作者的网站上看一下详细说明。

使用方法:这是一个BAT文件,调用kcube.exe 输入参数是后面那一串,表示每一面的颜色分布,从左到右从上到下,先确定正面,U面是转向自己时的位置,D面同理,修改时先用记事本打开,修改完成后保存,再点击运行这个BAT文件就可以了。

也可以直接用DOS命令调用,方法是先进入kcube.exe文件所在文件夹,然后输入图片上那一串就可以了。

下面是运行结果,会一直计算直到计算出最小步数解法,一般情况下在1s内都可以计算出22步及以下的解法,虽然理论上所有魔方都可以在20以内还原,但是在实际计算时计算出20步的解法会花比较长的时间(打乱的次数足够多),在打乱次数小于20次的情况下,基本可以瞬间计算出你打乱时的步骤反过来的解法。

在MATLAB中有保存窗口输出的方法,从窗口输出的结果中取出解法,再通过串口发送出去就可以了。或者有更好的方法可以告诉我一下。

识别魔方的部分:

MATLAB中自带了一个应用程序,可以点击调试读取摄像头,设置读取画面窗口范围,读取格式(RGB、YUV等),会自动生成相应的代码,然后复制右边窗口里的代码就可以在程序里用了;建立GUI程序的方法百度一下有很多教程,建立以后的.m文件里会有很多代码,前面一大段代码都不用看也不要改,注释里也写了“以上代码不需要修改”,主要是创建了按钮之后,回调函数里的内容,写对应的处理的代码,比如统计颜色分布啊,输出结果啊什么的。

识别完成后就可以用命令行调用上面说的kcube.exe了,MATLAB里也有运行DOS命令的方法。

最后就是通过串口发送了,加了一个蓝牙模块,但是在MATLAB中使用蓝牙串口的函数有点问题。

 

更新

用来水了个项目,当时在学Java,所以只找了Java版的,其他语言的应该也有,去GitHub上找找就有了,本来要写上位机的,本来设计的是调用4个摄像头一键扫描,写的过程让我很火大,现在想起来都心堵,仿佛能听到我电脑风扇的轰鸣声=  =,eclipse经常卡死,没动力做下去了。

链接: https://pan.baidu.com/s/18NGPizgw-8zZJmfr5E0jvA 提取码: 2w6j 

  • 20
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值