用机器人替代对手
要想实现人机对弈,也就是将机器人变成对手,那么我们需要先分析对手的特点。很简单。
首先,对手有手,能够取子,也能够落子;
于是,通过与机器人通讯,修改机器人的数字寄存器,即R寄存器,R[1]表示用户坐标系的X坐标值,R[2]表示用户坐标系的Y坐标系,即落子点,这些都是落子点的坐标,为了简化,取子点的坐标为固定点。
其次,对手有眼睛,能够看清楚局势;
于是,采用微软的lifecam studio摄像头来监视真实棋盘,在电脑端用winapi实现游戏棋盘的监视(截图)。
最后,对手有聪明的大脑,能够思考。
状况1,电脑端的游戏棋盘有(8,8,黑子)、(8,9,白子),真实棋盘棋盘有(8,9,白子),显然,真实棋盘缺少(8,8,黑子),那么,机器人需要在(8,8)坐标放置黑子,此时机器人动作,代表对手落子。
状况2,电脑端的游戏棋盘有(8,8,黑子),真实棋盘棋盘有(8,8,黑子)、(8,9,白子),显然,游戏棋盘缺少(8,9,黑子),那么,需要在电脑游戏棋盘(8,8)坐标放置白子,此时鼠标自动动作,代表我们落子。
高算力的五子棋软件
能够实现五子棋算法的软件有很多,甚至有很多都是开源的,在github上有很多,csdn上也有不少。在这里,笔者不想在算法上做过多的思考,直接用到了可谓是五子棋终极版的软件,用来做为机器人的思考引擎。原官网www.bf92.com已经挂了,https://www.crsky.com/soft/14176.html可以下载。
![在这里插入图片描述](https://img-blog.csdnimg.cn/
机器人的运动控制
机器人的运动控制需要设计到用户坐标系的标定、工具坐标系的标定,用户坐标系即真实棋盘的坐标系,一般设于左下角;工具坐标系即吸盘的坐标系,标定成功后,得出其与机器人法兰盘中心点坐标系的位姿,包括X,Y,Z,W,P,R六个参数。随后还要需要编写机器人程序,包括取子子程序,落子子程序,以及主函数,主函数包括两个参数,用Ar寄存器,其中Ar[1]表示用户坐标系的X坐标的偏移倍数,Ar[2]表示用户坐标系Y坐标的偏移倍数。
以上相当于机器人端的程序,那么在上位机端也需要编写对应的程序,笔者编写了一个调试程序,可以用作独立的机器人的运动控制验证实验,从而让读者能够掌握原理,举一反三。调试程序充当客户端,机器人充当服务器,使用TCP/IP的通讯协议,那么需要在机器人端配置好IP地址,如192.168.0.1,调试软件则需配置IP为同一网段的IP,如192168.0.10。调试软件可以连接到机器人控制器,可以直接修改机器人的数字寄存器R,然后复制给AR寄存器,从而得以机器人的(在棋盘用户坐标系中)运动控制。
机器视觉
机器视觉软件,使用的是halcon。其功能强大,可以满足绝大部分的工程实践应用。在笔者的人机对弈实现项目中,相机倾斜着拍摄棋盘,所以需要用到投影变换,以改变视角从倾斜到垂直。