张 顺,严宏志,韩奉林,李 鹏
(1.中南大学 高性能复杂制造国家重点实验室,长沙 410012;2.中南大学 机电工程学院,长沙 410012)
随着人工智能技术的飞速发展,出现了许多以Alpha Go为代表的围棋高水平人工智能对弈软件[1]。为更好地满足青少年围棋教育和空巢老人的围棋娱乐需求,围棋对弈软件需要从显示屏幕向物理世界延伸,提升用户对弈过程的真实感。将机器人与人工智能相结合,可使用户与机器人利用真实的棋子和棋盘对弈,大大提升下棋的趣味性。在当前出现的一些围棋机器人系统中,大多直接采用工业机械臂,虽然定位精度较好[2],但成本过高,外观不友好,不能很好地满足市场需求[3]。
针对上述问题,研发了一款围棋专用机器人“小智(ZRobot)”,其在控制方面首先应具有类似于工业机器人精度高的特点,按照标准的棋盘和棋子尺寸,定位误差需要小于0.3mm才能满足棋子不重叠的要求;其次,围棋机器人在控制上还要具有消费类服务机器人低成本的要求[4,5]。
综合考虑系统的性能和成本,基于ARM Cortex M4内核的STM32F407ZGT6微处理器和freeRTOS,为围棋机器人“小智(ZRobot)”设计了一种控制器,满足围棋机器人下棋的精度和速度要求。
围棋机器人“小智(ZRobot)”的总体构成框图如图1所示。围棋机器人系统由围棋机器人控制器、三轴机械臂、出子机构、电源、上位机调试软件、上位控制智能终端和电子棋盘组成。
图1 机器人系统总体结构框图
电子棋盘上的光纤传感器可感知棋手落子的位置坐标,并发送给上位控制智能终端。上位控制智能终端可以是一台平板或手机,其上安装有围棋人工智能软件,可根据当前棋局形式计算机器人下一步下棋点坐标。
围棋机器人控制器通过串口接受上位控制智能终端发来的指令,并协调控制出子机构和三轴机械臂,完成棋子准备、棋子取放、按上位智能终端要求定位等动作。机器人控制器的直接被控对象是5台步进电机(2台步进电机位于出子机构,3台步进电机位于三轴机械臂)、用于吸取棋子的真空泵及真空换向阀、运行指示灯等附属开关量输出。机器人控制器的外部输入主要包括机械臂各关节零位、取子转盘零位和取子位棋子检测等开关量。
围棋机器人控制器在机器人系统中需要完成通讯、控制输出、信号采集、数据储存等工作。通讯主要有通过两路串口分别与上位控制智能终端和上位机通讯接收控制命令、运行参数;控制输出方面对于机械臂需要同时输出控制机械臂3轴关节步进电机所需最高500kHz脉冲信号和机械臂3轴关节步进电机抱闸的通断,对于出子机构需要输出两通道脉冲信号用于控制推子电机和棋筒转动电机;信号采集需要得到出子机构棋筒零位红外传感器和取子位置光纤传感器的导通信号;数据储存需要保存围棋机器人结构参数、运行参数和控制变量。
基于上述需求,设计围棋机器人控制器硬件,设计的电路主要有STM32F407ZGT6最小系统电路,电源电路,光耦电路,电平转换电路,通讯电路,储存器电路等。图2为围棋机器人控制器硬件结构框图。
图2 围棋机器人控制器硬件结构框图
在处理器芯片的选择方面,综合考虑FPGA、DSP和ARM[6~8],在对比成本、开发难易程度和开发周期后选择基于ARMCotex-M4内核的STM32F407ZGT6芯片,工作主频168MHz,它是一颗集成FPU及DMA控制器的高性能MCU[9],既可以满足机械臂正、逆运动学解算、轨迹规划器求解、梯形加减速等计算量较大的工作[10,11],其USART1、USART2及高级定时器外设可以满足通信和步进电机控制的需求。
机器人控制器需要掉电存储机器人D-H参数、棋格坐标、运动速度及加速度等重要的几何和运动参数,因此选用基于铁电存储原理的MB85RC64VFRAM作为扩展数据存储器。
为保护I/O引脚、同时提高信号稳定性,围棋机器人控制器在外部传感器信号和控制器芯片之间加入光耦电路,选用6N137单通道高速光耦合器,转换速率为10MBit/s。
控制器需要24V、5V、3.3V三种直流电源,其中24V用于电机驱动、抱闸及外部传感器供电,3.3V用于微处理器供电,5V为板上其他控制芯片供电。
24V电源直接通过明纬AC220V/DC24V-14.5A开关电源获得,5V电源和3.3V电源利用三端稳压电源芯片LM2576-5和AMS1117-3.3V降压获得,以5V稳压电路为例,图3给出了实现原理图。
图3 5V稳压电路
围棋机器人控制器需要完成通信、轨迹规划、步进电机加减速计算、3DOT机械臂正逆运动学计算、脉冲输出等多个工作,为满足软件系统实时性、开放性和稳定性的需求[12,13],移植开源freeRTOS,把控制器需要完成的工作设计为多个单独的任务,利用系统调度器(scheduler)调度任务运行,使用消息通知实现任务同步,使用队列完成任务间数据传送。
围棋机器人控制系统基于freeRTOS操作系统开发的软件结构如图4所示,根据机器人运行要求需要建立8个主应用任务:初始任务、轨迹规划任务、正、逆运动学求解任务、运动控制任务、出子机构任务、通信任务1、通信任务2、数据管理任务。使用freeRTOS操作系统的多任务(scheduler)管理机制协调各任务工作。
各任务的功能如下:
1)初始化任务
初始化任务主要完成系统初始化工作。加载控制器串口、定时器、CAN、IIC等外设驱动,从掉电保存储存器中读取系统参数,创建其他应用任务后挂起(suspend)自身任务。
2)轨迹规划任务
轨迹规划任务负责给机械臂末端规划一条运行轨迹并协调其他任务完成轨迹输出。任务被创建后会进入阻塞态,等待通信任务1或通信任务2中的消息通知,接收到消息通知后解除阻塞态进入就绪态等待运行,得到芯片控制权后则调用轨迹规划器函数并把通信任务1或通信任务2得到的目标点作为参数传入,在笛卡尔空间内规划一条机械臂末端运行轨迹,并根据插补周期和速度、加速度等约束计算出轨迹上所有插补点。插补点的三维坐标存储于轨迹结构体插补点数组中,发送消息通知正逆运动学求解任务对所有轨迹点做逆运动学计算,获得插补点序列在关节空间的映射,然后通知运动控制任务输出所有轨迹点,完成一条轨迹的运动控制。
3)正逆运动学求解任务
正逆运动学求解任务负责对机械臂正向和逆向运动学进行求解。任务被创建后进入阻塞态,等待通信任务2或轨迹规划任务的消息通知,当接收到消息通知时会根据消息内容选择调用正运动学求解函数或逆运动学求解函数,把要求解的笛卡尔空间坐标或机械臂关节角指针作为函数参数传入,最后返回求得的解,并通知发送命令任务。
4)运动控制任务
运动控制任务负责输出脉冲控制机械臂3个步进电机。运动控制任务等待通信任务2或轨迹规划任务输出关节角增量的消息通知,根据每个关节角增量计算输出所需的脉冲数量,根据转动速度计算脉冲频率,启动定时器1(TIM1)比较输出功能,使用TIM1的通道1、通道2和通道3作为控制三个轴关节步进电机的脉冲输出 通道。
5)出子机构任务
出子机构任务负责控制出子机构推出白色或黑色棋子。出子机构任务接收通信任务2和轨迹规划任务的消息通知,接收到消息通知时控制推子步进电机推出一个棋子,并等待棋子位激光传感器检测棋子信号,然后返回出子成功状态。
6)通信任务1
通信任务1负责利用USART2和上位智能终端进行通信。通信任务1运行时,会等待USART2中断回调函数中的消息通知,当上位智能终端发来命令时,会触发USART2接收消息中断,在中断回调函数中通知通信任务1,若通信任务1不在运行态或就绪态则退出中断函数时立即进行任务调度使通信任务1进入就绪态,通信任务1得到MCU控制权后根据通信协议解析通信数据,把解析得到的下棋点或收棋点棋盘坐标变换为机器人世界坐标系坐标,然后通知轨迹规划任务。
7)通信任务2
通信任务2负责利用USART1和上位机进行通信。通信任务2接收消息过程和通信任务1基本一样;它相比通信任务1增加了按固定周期100ms发送机器人运行参数给上位机显示的功能,发送消息时把要发送的数据放入发送队列中,串口发送函数把队列中的数据按顺序依次发送出去。
8)数据管理任务
数据管理任务用来管理参数储存器FRAM。任务在运行时,会等待其他任务消息通知,可以接收其他任务的消息,根据消息内容更新储存某个参数或者从FRAM中取得参数。
机械臂轨迹规划任务要完成两个主要任务:1)根据通讯发来的下棋或提子指令,在笛卡尔空间内规划一组机器人末端行进轨迹,保证机器与棋盘和棋子无干涉;2)考虑速度、加速度要求和插补周期,将规划出的行进轨迹进行插补取样,获得一组轨迹插补点序列。
围棋机器人的下棋过程和机械臂运行轨迹如图5所示,典型的下棋动作包括三个基本动作:1)从初始位置P0前往取子位置P3取子;2)带着子从取子位置P3前往目标棋格P6;3)落子完毕后返回初始位置P0。为防止机器人发生碰撞,每个基本动作又可分为三段:第一段为上升至安全高度;第二段为在安全平面上移至目标位置上方;第三段从安全高度下降至目标位置。安全高度通过上位PC设定,依据上述规则,给定任一目标落子棋格时,可唯一确定一组空间轨迹。
图5 围棋机器人下棋过程
如图6机械臂连杆坐标系所示,机械臂为三自由度关节型串联结构,为准确控制机器人末端位置,需建立实现机器人关节空间向末端笛卡尔空间之间相互映射的机器人正逆解模型。
图6 机械臂连杆坐标系
机械臂对应的Denavit-Hartenberg参数如表1所示。
表1 围棋机器人机械臂Denavit-Hartenberg参数表
由Denavit-Hartenberg参数,可求得各连杆变换矩阵如下:
各连杆变换矩阵相乘,得到围棋机器人机械臂的变换矩阵:
利用意法半导体公司提供的浮点计算函数库矩阵计算函数式(4),可实现机械臂的正解求解。
考虑到机械臂只有三个自由度,利用几何法计算其逆解更方便[14]。参考图6中的坐标系,图7给出了关节角求解示意图。
图7 求解关节角示意图
若已知机械臂末端笛卡尔坐标P(x,y,z),机械臂逆向运动学使用几何法求解,利用几何关系,可得到该笛卡尔坐标对应的各关节转角为:
同样用意法半导体公司提供的浮点计算函数库求得上述三式,实现机械臂的逆解求解。
基于上述设计,研制了围棋机器人控制器并用于围棋机器人,并开展了多项动态实验。动态实验包括单轴点动、三轴联动、重复运行精度实验等。
图8 重复运行精度实验装置
重复运行精度实验装置如图8所示,机械臂末端安装有一个尖状触针,其尖点作为工具点,测量工具为2.4in电阻式触摸屏[15],通过单片机读取电阻屏信号可以得到触碰电阻屏时触碰点在屏幕矩形平面上沿两边X方向和Y方向的位置坐标,经过在三坐标测量机上测定,本实验用电阻屏触控精度达到0.02mm。实验过程为通过上位机发送一个固定的棋盘坐标给机器人,以使机器人机械臂末端触针尖点触碰到电阻屏,单片机读到电阻屏平面触点坐标通过串口发送到计算机记录下来,移开机器臂,重复上述过程10次,得到10组平面坐标值如表2所示。
∆x和∆y分别为X方向和Y方向当次坐标值和第1次坐标值的偏差值。则X和Y方向的最大偏差值分别为0.24mm和0.22mm,满足棋子不重叠定位误差0.3mm的要求。图9为对外展览时人机对弈表演实验。
【】【】
表2 通过电阻屏测量到的平面坐标值
图9 人机对弈表演实验
实验结果表明围棋机器人控制器在运行速度、重复运动精度等关键技术指标上都可以达到预期要求。
设计了一种基于ARM和freeRTOS的围棋机器人控制器,从硬件和软件两个方面对围棋机器人控制器进行了开发。将控制器应用于围棋机器人,通过运动实验验证了控制器的可行性和精度要求,相比现有围棋用的工业机器人具有成本低,可扩展性强的优点,同时为其他桌面棋类用机器人控制系统的开发提供了一个参考。
参考文献:
[1]苏剑波,陈叶飞,马哲,黄瑶,向国菲,陈若冰.从AlphaGo到BetaGo–基于任务可完成性分析的定性人工智能的定量实现[J].控制理论与应用,2016,33(12):1572-1583.
[2]韩焕丽.基于DSP的机械臂控制器及其轨迹规划研究[D].华南理工大学,2016.
[3]刘志伟.四轴工业机器人嵌入式运动控制器的设计[D].哈尔滨工业大学,2012.
[4]胡振旺.基于STM32的家庭服务机器人系统设计[D].广东工业大学,2015.
[5]彭刚,袁兵.基于双ARM Cortex架构的移动机器人控制器设计[J].华中科技大学学报(自然科学版),2013,41(s1):284-288.
[6]韩焕丽.基于DSP的机械臂控制器及其轨迹规划研究[D].华南理工大学,2016.
[7]曹欢.基于ARM和FPGA的多自由度机械臂控制系统设计[D]. 华东理工大学,2012.
[8]罗伟涛,张铁.基于ARM+DSP+FPGA的机器人运动控制器研究[J].机床与液压,2011,39(15):55-58.
[9]杨继森,许强,冯济琴.基于STM32F4的时栅位移传感器信号处理系统集成化设计[J].传感器与微系统,2013,32(12):113-116.
[10]徐向荣,马香峰.机器人运动轨迹规划分析与算法[J].机器人, 1988(6):20-26.
[11]吴镇炜,谈大龙.机械手空间圆弧运动的一种有效轨迹规划方法[J].机器人,1999,21(1):8-11.
[12]Guan F, Peng L, Perneel L, et al. Open source FreeRTOS as a case study in real-time operating system evolution[J].Journal of Systems & Software,2016,118(C):19-35.
[13]Craig J J.Introduction to Robotics: Mechanics and Control[M]. Addison-Wesley Pub. Co,1986.
[14]黄晨华.工业机器人运动学逆解的几何求解方法[J].制造业自动化,2014(15):109-112.
[15]李飞,凌云,陈欢,罗树英.一种电阻触摸屏坐标定位方法[J].湖南工业大学学报,2015,29(02):74-78.