0. 做五子棋机器人的初衷
大学已经毕业了一个月了,因为研究生那边暂时去不了,又不想回湖北。所以在学校里租了房暂住一个月,白天学车晚上实验室学(mo)习(yu)。因为毕设的时候有两位同学做的五子棋机器人的硬件和软件,每次听他们汇报都很想帮他们做毕设。于是在毕业之后,趁着这几天十分闲。做了一下五子棋机器人。
1. 总体介绍
其实做过魔方机器人之后这种东西套路都类似。接下来我从视觉、算法、硬件三个方面介绍,实际上每个部分都不太难,适合新手入门。
总的流程大致是这样,首先通过摄像头读取棋盘信息,并定位棋子位置,识别两种棋子颜色。然后将棋子位置传给求解函数。求解函数就是一个简单的博弈树加上α-β剪枝。因为没太多时间,所以搜索效率并不是很高。得到下一步该走的位置之后,将位置信息通过串口发送到下位机。下位机使用Arduinio编程,接收并处理上位机发送的信息。然后驱动机械臂和气动吸盘放置棋子。
2. 视觉部分
视觉部分没有用到智能算法,都是很基础的图像处理。简单学过一点opencv应该都可以看懂,所以我说这个项目很适合新手入门。
首先你需要有个python环境,还有一个opencv的库。使用pip安装就可以了。没有安装成功的可以去CSDN上看看教程,我就不细说了。然后流程是从摄像头获取图像,对图像进行预处理,从摄像头获得数据然后对其进行处理,各种图像预处理,然后是圆形识别和颜色识别。这个地方我反复识别了8次,也就是说每次识别棋盘的时候,读取8次摄像头数据,这样能够减小偶尔一两次识别不出来部分棋子的误差。最后写好接口,函数返回棋子在棋盘上的坐标以及图像。
流程大概就是下图所示:
Ps.一般颜色识别都很不好搞,但是黑白棋子识别就很简单!!随便画阈值就可以,和识别魔方颜色完全不是一个难度。
视觉流程图
放一张效果图
黑白棋子都能准确识别
3. 算法部分
算法这方面,我觉得自己没有太多好说的。知乎上大神太多了,这方面也被说了很多了。主流做法大概有两种。大部分情况是使用博弈树然后使用α-β剪枝,这个方法是最常见。还有一种是我在GitHub上见到的,使用alpha-zero算法,用机器学习的方式去做。
我是用的第一种,也就是博弈树的方法做的。搜索深度为3效果还行。大致讲讲流程:
算法流程图
4. 机械部分
机械部分也是很有意思的一个部分,因为本命专业是机械,所以这种需要动手的工作我就很喜欢。其实每次做这些东西的时候我都在想,这些项目的进度完全取决于某宝卖家的发货速度和快递配送速度。
五子棋是实验室娱乐用的五子棋,底座的木板是某宝木材厂切的,铝型材是实验室回收的,摄像头是找同学撸的,机械臂是同学用过留下来的。
就这样拼拼凑凑也算是攒齐了一套材料。看看效果吧。
5. 总结
这个项目一共做了7天,每天花了大概4个小时调。每个模块的内容难度都适中,十分适合新手入门。建议机械电子的同学可以简单做一个练练手。对这些专业知识大概有一个了解,多接触一些知识发现自己兴趣所在~
还有一点想法,老师也在和我说,都大四毕业了要多写点论文少搞点这种东西。我觉得十分有道理,以后还是把时间拿来写论文吧。这种小发明可能做的比较少了QAQ
还可以看看我之前做的魔方机器人。