[发明专利]一种基于全局视觉的下棋机器人及其控制方法有效
申请号: | 202010052771.0 | 申请日: | 2020-01-17 |
公开(公告)号: | CN111136669B | 公开(公告)日: | 2022-09-20 |
发明(设计)人: | 王亚杰;张云博;丁傲冬;祁冰枝;吴燕燕;李正强 | 申请(专利权)人: | 沈阳航空航天大学 |
主分类号: | B25J11/00 | 分类号: | B25J11/00;B25J9/16;A63F3/00 |
代理公司: | 沈阳东大知识产权代理有限公司 21109 | 代理人: | 李在川 |
地址: | 110136 辽宁省沈*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 全局 视觉 下棋 机器人 及其 控制 方法 | ||
1.一种基于全局视觉的下棋机器人,其特征在于:包括电脑服务端、机器人、视野摄像头装置、棋类装置;
所述机器人包括拟人化的机械臂、机械臂末端执行器、取子盘;所述机械臂末端执行器包括执行器本体、末端摄像头、吸盘装置,所述吸盘装置包括吸盘和气泵,吸盘和气泵相连接用于吸取棋子,吸盘与执行器本体相连接,所述末端摄像头用于机械臂定位,所述末端摄像头一端与执行器本体相连接,另一端与电脑服务端相连接;所述拟人化的机械臂分别与电脑服务端、执行器本体相连接;所述取子盘严格按照机械臂的尺寸所制,使机械臂坐落于取子盘中间的留白处;
所述棋类装置包括棋盘、棋子、棋子盒;
所述视野摄像头装置包括视野摄像头和摄像头支架,视野摄像头置于摄像头支架上,视野摄像头与电脑服务端相连接;
所述电脑服务端包括视觉系统、博弈系统、落子系统和实时展示系统;所述视觉系统用于接收视野摄像头输出的数据,并对数据进行处理得到识别结果,所述视觉系统分别与博弈系统、实时展示系统相连接;博弈系统根据视觉系统的反馈信息生成相应的策略,所述博弈系统分别与落子系统、实时展示系统相连接,所述落子系统用于根据视野摄像头和末端摄像头输出的数据进行棋盘矫正和机械臂定位,其输出端与机械臂相连接;所述实时展示系统用于将视觉系统和博弈系统获得的双方落子坐标显示在界面上,实时传输对弈信息并储存对弈信息;
所述棋盘与机器人的间隔要超过机械臂的最小移动半径;使机械臂能移动到离机械臂最近的棋盘落子位置上,完成机械臂落子操作;
所述摄像头支架为高度可调整的摄像头支架,视野摄像头为角度可调整的视野摄像头;
所述视野摄像头能够拍摄到的范围应覆盖整个棋盘。
2.一种基于全局视觉的下棋机器人的控制方法,通过权利要求1所述的一种基于全局视觉的下棋机器人实现,其特征在于:包括如下步骤:
步骤1:将机械臂坐落于取子盘中间的留白处,将棋盘放置在桌面上,所述棋盘与机器人的间隔要超过机械臂末端执行器的最小移动半径;装有棋子的棋子盒摆放在棋盘周围;
步骤2:将视野摄像头放置在摄像头支架上,摄像头支架放置在桌面上,放置位置需保持使摄像头能够拍摄到的范围覆盖整个棋盘;
步骤3:打开电脑服务端、连接视野摄像头和末端摄像头,点击新游戏按钮,机械臂初始化到固定位置,即将机械臂归零;
步骤4:根据视野摄像头获取棋盘图像,对图像进行运动物体检测,检测出第一个干净帧的图像,在第一个干净帧的图像上,运用分块凸包检测法检测出棋盘的四个顶点;设置四个顶点坐标和标准棋盘的长宽,根据中心投影变换将视野摄像头拍摄下的棋盘矫正为标准棋盘,得到第一个标准棋盘图像boardf,并保存变换矩阵;
步骤5:确定当前对弈棋种;
对第一个标准棋盘图像boardf进行棋盘特征识别,对第一个标准棋盘图像进行高斯滤波、锐化、灰度化、自定义阈值二值化、n次膨胀的处理,得到待识别图像;对待识别图像内的轮廓提取点集,所述轮廓包括棋盘整个范围的内轮廓和棋盘小方格的内轮廓;利用多边形逼近使所有内轮廓表示成多边形形状达到减少轮廓顶点数量的目的;计算第一个标准棋盘图像boardf中所有内轮廓多边形的面积;获取不同类型棋盘小方格面积区间,形成数据库,分别对图像boardf中所有内轮廓多边形的面积进行棋盘类型识别,得到每个内轮廓多边形所对应的棋盘类型,将棋盘类型最多的类型作为当前对弈的棋种,根据当前棋种的棋盘类型获得每一个棋盘小方格的长宽并储存;
所述识别方法为:确定内轮廓多边形i的面积Wi落入数据库中棋盘类型的面积区间,将该棋盘类型定义为内轮廓多边形i的棋盘类型;
步骤6:机械臂定位;
步骤6.1:将机械臂由归零位置分别移动至使末端摄像头能够拍到离机械臂最近的棋盘两个顶点图像的位置,并获取两个顶点的图像,记作pointf1、pointf2;
步骤6.2:检测离机械臂最近的两个棋盘顶点;
将顶点图像pointf1进行灰度化、中值滤波、自定义阈值二值化、闭运算、开运算、保留最大连通域、轮廓提取的处理,得到处理后顶点图像,记作F1;对F1进行多边形逼近,获得F1中所有的特征点,将每一个特征点分别与它相邻的两个特征点连接得到两条线段,以该特征点反向延长两条线段,各80个像素点,提取顶点图像的二值化图像,在二值化图像上,检测这些延长的像素点与白色像素重合的数量,取重合数量最少的特征点即为所求顶点Q1,该顶点的像素坐标即为该顶点的坐标;获取顶点图像pointf2重复本步骤,得到顶点Q2及其顶点坐标;
步骤6.3:顶点偏移量修正;
分别计算顶点Q1、Q2的坐标与pointf1、pointf2图像中间像素坐标的差值,根据该差值进行顶点修正,直至横纵坐标差值都小于等于五个像素终止修正,当横纵坐标差值都小于等于五个像素时即认为末端摄像头移动到顶点Q1、Q2正上方;
步骤6.4:设置吸盘与末端摄像头之间的偏移量;
由于吸盘与末端摄像头之间存在一个固定的偏移量,棋子定位时吸盘用于吸取棋子而不是末端摄像头,所以需要将吸盘移动到顶点正上方,并且记录此时吸盘位置处的机械臂坐标;
步骤6.5:根据棋盘类型计算出机械臂移动的单位坐标;
机械臂移动到两个顶点Q1和Q2时的机械臂坐标确定后,选取任一顶点为原点,由于棋盘格都是紧密排列的方形,根据两个顶点Q1、Q2和当前对弈的棋种计算出机械臂移动单位棋盘格的像素坐标,从而推断出机械臂移动到每一个棋盘交叉点处的机械臂坐标,机械臂定位完成,此时机械臂完成了与棋盘之间的坐标转换;
步骤7:进行人机对弈,人方先手;
步骤8:运动物体检测输出干净帧;
步骤8.1:获取不为空的图像作为前一帧图像,记作frameE1,获取不为空的图像作为当前帧图像,记作frameE2;当前对弈棋种若为开局棋盘上布满棋子类别时,则执行步骤8.2;当前对弈棋种若为开局棋盘上无棋子类别时,则行步骤8.3;
步骤8.2:根据帧差法结合棋子数量检测法进行运动物体检测输出干净帧;
分别对frameE1和frameE2进行预处理,得到预图像,判断预图像中轮廓数量是否大于0,若是,则认为存在运动物体,删除该图像,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8.1;若否,则认为当前帧是干净帧;所述预处理包括平滑操作、灰度化、做差、对差分图二值化、膨胀、腐蚀、查找运动物体轮廓;检测干净帧棋盘上棋子数量为当前对弈棋种开局应有的棋子数量时为开局状态;开局后,将开局状态的棋子数量定义为上一状态棋子数量,将走子后出现合理的棋子数量集合定义为下一状态棋子数量集合,所述合理的棋子数量根据当前棋种的下棋规则确定,即确定上一状态棋子数量R和在规则范围内一步能最多去掉的棋子数T,即确定合理的棋子数量为R、R-1、R-2、…、R-T;当检测出当前帧棋子数量在下一状态棋子数量集合内时,认为当前帧是干净帧,将该干净帧矫正成为当前标准棋盘图像,记作boardf1;并将当前帧的棋子数量,赋值给上一状态棋子数量;执行步骤9.2,若检测出当前帧棋子数量不在下一状态棋子数量集合内时,删除该干净帧,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8;
步骤8.3:根据帧差法结合凸包检测法进行运动物体检测输出干净帧;
分别对frameE1和frameE2进行预处理,得到预处理后图像,判断预处理后图像中轮廓数量是否大于0,若是,则认为存在运动物体,删除该图像,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8.1;若否,则认为当前帧是干净帧;所述预处理包括平滑操作、灰度化、做差、对差分图二值化、膨胀、腐蚀、查找运动物体轮廓;对干净帧进行灰度化、自定义阈值二值化、Laplacian滤波、闭运算、孔洞填充、开运算、最大连通域处理后,最终得到只有棋盘的白色区域图像,分别计算白色区域面积和凸包面积,判断白色区域面积与凸包面积的比值是否大于0.98,若是,则当前帧为最终干净帧,将最终干净帧矫正成为当前标准棋盘图像,记作boardf1,执行步骤9.3,若否,则为带有运动物体的图像,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8.1;
步骤9:棋子定位;
步骤9.1:将第一个标准棋盘图像boardf定义为标准棋盘图像boardf0;
步骤9.2:获取标准棋盘图像boardf0和当前标准棋盘图像boardf1;分别对图像boardf0和boardf1进行灰度化、做差、自定义阈值二值化、膨胀、与二值图像掩膜相乘、腐蚀、中值滤波的处理,得到标准化图像;在标准化图像上查找物体轮廓,依次遍历每个轮廓,根据轮廓点集绘制最小外接圆;根据棋盘类型,提取出最小外接圆半径大于棋子半径一半的最小外接圆,判断最小外接圆个数是否等于1,若否,则检测错误,删除当前标准棋盘图像boardf1,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8;若是,则将检测到的最小外接圆的圆心坐标转换为棋盘坐标,输出棋盘坐标,所述圆心坐标即为圆心的图像坐标;获取标准棋盘图像boardf0的棋盘状态矩阵,判断棋盘状态矩阵中该棋盘坐标上是否已经存在棋子,若不存在,则认为检测正确,输出该棋盘坐标,若存在,则检测错误,删除当前标准棋盘图像boardf1,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8;
步骤9.3:获取标准棋盘图像boardf0和当前标准棋盘图像boardf1;分别对图像boardf0和boardf1进行灰度化、做差、自定义阈值二值化、膨胀、与二值图像掩膜相乘、腐蚀、中值滤波的处理,得到标准化图像;在标准化图像上查找物体轮廓,依次遍历每个轮廓,根据轮廓点集绘制最小外接圆;根据棋盘类型,提取出最小外接圆半径大于棋子半径一半的最小外接圆,判断最小外接圆个数是否等于2,若否,则检测错误,删除当前标准棋盘图像boardf1,并将当前帧frameE2作为前一帧frameE1,重新获取当前帧图像,重复步骤8;若是,则将检测到的两个最小外接圆的圆心坐标转换为棋盘坐标,输出两个棋盘坐标;获取标准棋盘图像boardf0的棋盘状态矩阵,在该棋盘状态矩阵中检测上述两个棋盘坐标,有当前行棋方棋子的棋子坐标为走子位置,另一个棋盘坐标为目标位置;
步骤10:将boardf0作为boardf1,同时将当前标准棋盘图像boardf1的棋盘状态矩阵作为标准棋盘图像boardf0的棋盘状态矩阵;
步骤11:将棋盘坐标通过服务端传给博弈系统和实时展示系统,博弈系统输出机械臂走子策略,实时展示系统在直播界面上显示走子位置;
步骤12:将博弈系统产生的走子策略传给落子系统,计算出机械臂走子坐标,机械臂吸取棋子,并根据走子坐标走子;将走子策略传给实时展示系统,在直播界面上显示机械臂走子位置;
步骤13:重复执行步骤8-步骤12,直到有一方获胜或者暂停游戏。
3.根据权利要求2所述的一种基于全局视觉的下棋机器人的控制方法,其特征在于:所述步骤4的具体步骤如下:
步骤4.1:获取不为空的图像作为前一帧图像,记作frame0,获取不为空的图像作为当前帧图像,记作frame1,对所述前一帧图像和当前帧图像根据帧差法和凸包检测法进行运动物体检测,输出第一个干净帧,记作firstf;
具体步骤为:帧差法包括分别对frame0和frame1进行预处理,得到预图像,判断预图像中轮廓数量是否大于0,若是,则认为存在运动物体,删除该图像,并将当前帧赋值给前一帧,重新获取当前帧图像,重复本步骤;若否,则认为当前帧是干净帧;所述预处理包括平滑操作、灰度化、做差、对差分图二值化、膨胀、腐蚀、查找运动物体轮廓;对帧差法得到的干净帧进行凸包检测法,对干净帧进行灰度化、自定义阈值二值化、Laplacian滤波、闭运算、孔洞填充、开运算、最大连通域处理后,最终得到只有棋盘的白色区域图像,分别计算白色区域面积和凸包面积,判断白色区域面积与凸包面积的比值是否大于0.98,若是,则当前帧为第一个干净帧,若否,则为带有运动物体的图像,将当前帧赋值给前一帧,重新获取当前帧图像,重复本步骤;
步骤4.2:在第一个干净帧上利用分块凸包检测识别出棋盘四个顶点坐标;
对第一个干净帧进行系统处理,得到处理后图像;所述系统处理包括灰度化、自定义阈值二值化、Laplacian滤波、闭运算、孔洞填充、开运算、最大连通域;对处理后图像内的轮廓提取边缘点,形成边缘点集;查找最小凸多边形,以凸多边形的中心点建立直角坐标系,划分四个象限区S1,S2,S3,S4,依次计算每一个象限内相邻两条边的夹角,取各个象限范围内夹角最小的点即为四个棋盘顶点,分别记作M1,M2,M3,M4;
步骤4.3:设置标准棋盘像素以及标准棋盘四个顶点坐标,利用中心投影变换原理得到矫正矩阵;
步骤4.4:将第一个干净帧矫正成为第一个标准棋盘图像,记作boardf。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于沈阳航空航天大学,未经沈阳航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010052771.0/1.html,转载请声明来源钻瓜专利网。