本文为2022年第十七届中国研究生电子设计竞赛安谋科技企业命题一等奖作品分享,参加极术社区的【有奖活动】分享2022研电赛作品扩大影响力,更有丰富电子礼品等你来领!
基于EAIDK-610的中国象棋机器人对弈系统
参赛单位:西安邮电大学
指导老师:张恒山 赵凤
参赛队员:许家璇 高瑞 李永恒
作品简介
中国象棋是中华传统文化中最具有代表性的文化遗产,其历史源远流长。由于中国象棋具有很强的竞技性、益智性与娱乐性,在国内拥有大量的专业人士及业余爱好者。目前在市面上存在很多可在手机或电脑上运行的象棋软件,但老年人在使用电子产品方面普遍存在障碍,长期面对显示器也会对青少年的视力产生不良影响,因此我们团队将中国象棋与计算机视觉、人工智能、自动控制原理等技术相结合,实现一款可以与人对弈的中国象棋机器人,让更多人认识并学习这一文化瑰宝。
基于EAIDK-610的中国象棋机器人对弈系统由桌面式机械臂、磁性棋盘及棋子、STM32下位机控制系统、 EAIDK-610 开发套件组成。当用户走棋完成后,EAIDK-610通过摄像头采集棋局图像,获取玩家的走棋路线,并运行Elephantfish象棋搜索算法计算一步最优应对策略,下位机通过逆运动解算及梯形加减速算法控制机械臂快速移动棋子,完成一次对弈过程,并给予相应的语音提示。目前机器人已经实现了常规开局、残局对弈及语音提示功能,正在加入机器摆棋、棋局破解、语音对话等功能。该机器人体积小巧、响应速度快,功能丰富,用户体验将远远优于象棋软件及同类型的棋类机器人。
作品全貌
机械设计
机器人使用桌面式SCARA机械臂,参考T站模型链接:Desktop SCARA robot by YANG\_GT - Thingiverse
基于EAIDK-610的中国象棋机器人对弈系统3D模型,使用SolidWorks2016创建,非标件(橙色零部件)使用3D打印制作。
链接:https://pan.baidu.com/s/1wNpXbhwf3dRBQvftsIE5Qg
提取码:234k
下位机电路
AltiumDesigner16工程文件:
链接:https://pan.baidu.com/s/1I3_ZuyW63Es_l4B93szx8A
提取码:juro
下位机的主要功能是机械臂的运动控制,除此之外还有简单的人机交互界面(一个OLED显示屏,两个按键)、语音模块控制、与上位机的通信。
其中主控使用的是STM32F103C8T6,机械臂采用42步进电机驱动,驱动器是A4988,主控与驱动器之间使用光耦隔离。机械臂末端电磁铁使用一个H桥驱动,语音模块使用的是SYN6288,可通过串口接收文字,解码后播放语音。
STM32资源分配如下:
I/O引脚 | 功能 | 使用到的系统资源 |
---|---|---|
PA0 | 主臂电机脉冲输出 | TIM2 |
PB0 | 副臂电机脉冲输出 | TIM3 |
PB8 | Z轴电机脉冲输出 | TIM4 |
PA9,PA10 | 程序下载调试 | USART1 |
PC13 | 程序运行指示 | 滴答时钟 |
PB3,PB4 | 电磁铁控制 | 普通I/O |
PB5 | 蜂鸣器 | 普通I/O |
PB13 | 主臂电机方向控制 | 普通I/O |
PB12 | 副臂电机方向控制 | 普通I/O |
PB14 | Z轴电机方向控制 | 普通I/O |
PB15 | 三轴电机使能控制 | 普通I/O |
PA2,PA3 | 上位机通信 | USART2 |
PB10,PB11 | SYN6288语音模块 | USART3 |
PB6,PB7 | OLED屏 | I2C(软件模拟) |
PA13,PA14 | SWD下载调试接口 | SWD |
PA4,PA5,PA6,PA7 | 预留SPI接口 | SPI(硬件) |
PA11,PA12 | 用户按键 | 普通I/O |
下位机程序设计
下位机源码下载地址(Keil5):
链接:https://pan.baidu.com/s/1bUcL7kNskY2Asv6L1yjL6w
提取码:if84
下位机的主要功能是机械臂的运动控制,包括两部分:逆运动解算及电机加减速控制。
SCARA机械臂为三轴,正运动指的是已知每个轴的角度,这时候机械臂的姿态就唯一确定了,其末端执行器的xyz坐标也确定了。在象棋对弈过程中需要控制机械臂移动到棋盘的某个坐标,逆运动解算就是根据输入的xyz坐标计算出机械臂每个轴的角度。
由于机械臂使用的是步进电机,主控向步进电机驱动器发送一个脉冲,步进电机就转动一个步距角,步进电机实际的运动方式是按照步距角“抖动”旋转,因此如果脉冲频率变化过快,比如在起动或刹车时,会产生丢步或过冲现象,机械臂运动便会出现误差。对电机加入一个加减速过程能够有效避免这种情况,合适的加速过程也能让步进电机运动至更高的速度,加快走棋速度,减少玩家等待时间。在象棋机器人中使用的是简单的梯形加减速,即根据每个轴旋转的角度、设置的加速度、最大速度三个参数来规划电机的加减速过程,可分为能加到最大速度(vt图像为梯形)和不能加到最大速度(vt图像为三角形)两种情况。
上位机开发
上位机代码链接:https://github.com/STM32xxx/Chinese-chess-robot-upper-computer.git
上位机包括四个部分:
- 界面:显示摄像头处理结果,输出调试信息
- 象棋搜索算法:运行Elephantfish象棋搜索算法
- 图像处理:使用OpenCV及级联分类器识别棋子的位置及类别
- 串口通讯:负责上位机和下位机的通信
界面
象棋搜索算法
基于开源象棋算法Elephantfish进行改进,参考如下。
elephantfish: 一个只有124行的中国象棋引擎
图像处理
对于棋子位置的识别通过霍夫圆检测就可以完成,再通过文字区域的色块阈值来判断出棋子的颜色(红/黑),这样就可以完成常规开局对弈。因为象棋开局时每个棋子的位置是固定的,因此只需要判断出玩家走棋前后哪个棋子位置发生变化就可以判断出玩家走棋路线,但对残局对弈无能为力。
残局对弈在开局时不光要识别出棋子的位置,还要识别出是什么棋子。因此先采集各类棋子的图片,使用级联分类器训练出棋子分类模型,在残局对弈开始阶段确定每个棋子的位置及类别,之后的对弈都可参考常规开局。
视频展示
https://www.bilibili.com/video/BV1gt4y1u7NAwww.bilibili.com/video/BV1gt4y1u7NA