杨剑,黄泽鹏,吴昶华,李昆
(华南理工大学 广州学院,广州510800)
目前机器人应用主要面向制造业和娱乐行业,随着全国各地机器人大赛的举办和普及,各大、中、小学校越来越重视机器人教育与培训。本文设计了一款应用于普及机器人知识的17自由度仿真人形教育机器人。
控制器系统以ARM7处理器为核心通过串口下载和传输控制信息,主要由17路舵机控制驱动电路接口、串口通信调试电路、遥控接口及电源等几部分组成。通过UBT12HB 舵机总线半双工串口UART通信协议,采用定时器产生17路PWM驱动信号,控制机器人各种姿态下的舵机角度和速度。该系统具有运动形态新颖、运动效果优异、操作反应灵敏、体态特征丰富等特点,可应用于机器人知识普及和教学。
舵机是一种位置角度伺服驱动器,含控制电路、驱动马达、差速器、位置检测器和外壳等部件,其中控制电路上有用于驱动马达与进行信号通信的IC电路,内部齿轮一般采用金属材质,能够在提供大转矩的同时保证结构上的稳固。舵机结构如图1所示。
本文采用的舵机是UBT12HB 串行总线伺服舵机,舵机输出转矩为0.8 N·m(6.5 V),1.2 N·m (8.5 V),最大可以提供0.198 s/60°的转速,角度偏转范围为-30°~240°。满载电流为0.9 A,采用半双工串口UART通信协议。URAT串口波特率:115 200;数据位位:8;停止位:1;校验位:0;流量控制:NONE。采用TTL电平多层连接,共用总线,最多可以连接240个舵机。舵机主要通信协议部分参数如表1所示。
图1 舵机结构图
上位机通过winform平台下提供的接口发送串口数据,经简单硬件转换成半双工串口传输信号与舵机通信。17自由度串行总线舵机机器人控制上位机的主要功能如图2所示。
上位机依靠串口通信,在进行通信之前需要对串口进行检测,检查舵机机器连接状态及通信状态是否稳定,在连接稳定之后才能进行下一步的操作。舵机控制模块由舵机编号(id)选择、角度、速度,以及批处理功能模块组成,能够对17路总线舵机组中的单个或多个进行单独或批量控制和通信。在控制信号发送之前需要对控制信号及指令进行检查校验其合法性及是否具有实际意义。筛选过滤无用指令,计算整理后由串口发送之后交给串口控制模块检查通信情况。
图2 上位机整体主要功能图
表1 舵机主要通信协议部分参数
软件主界面如图3所示:左半界面是与17路串行伺服舵机实际对应位置图,用于显示实际控制中的舵机机器人的状态,以及能够以某些交互方式提高舵机选择效率与定位;右侧为数据控制与舵机操控面板,右下为信息面板,用于显示各种交互信息和反馈数据。
图3 软件主界面
在Visual C#平台下,利用.NET Framework 中的SerialPort组件,可以实现底层的串口通信,使用之前引入相应的命名空间System.IO.Ports,利用SerialPort属性:PortName、BaudRate、DataBits、StopBits、Parity 等 进 行 串口的配置,采用DataReceived方法进行数据接收和通信检查。配置部分代码如图4所示。
由于SerialPort接收数据是同步阻塞调用,所以使用Invoke自动创建线程,接收来自串口的数据之后通过缓存数据帧再在程序线程内部检查格式,匹配舵机机器人的应答指令。
在舵机机器人的连接过程中,需要进行通信的应答,来判断舵机组的连接情况与通信情况,在判断之前需要校验接收数据的格式,部分代码如图5所示。
根据舵机通信协议,将某些控制指令定义在属性上,部分代码如图6所示。
代码中的帧头内容对应舵机文档协议,stop、test、read等字节数组内存放常用指令,在程序内部通过线程使用相应的属性,可以达到一个基本的控制效果。
图4 Serial Port配置部分代码
上位机通过串口发送字节指令,接收来自舵机机器人应答信号处理通信问题,但是程序内部字节指令不能直观地进行操作和交互,需转换成字符、十进制或者其他格式交互操作,部分指令格式转换的代码如图7所示。
常见的几种转换方法有textWork16、str10to16、str16to10等,由于交互界面上的指令数据基本是text,在获取输入数据之后,调用相关方法将string指令转换为byte指令存入指令表中以获取操作数,并将指令缺失的字节操作码补全。
图5 串口检查校验部分代码图
图6 通信1协议部分图
图7 部分指令转换方法代码
上位机的指令编辑可以分为单路伺服舵机的指令编辑与多路舵机指令的批量编辑。部分编辑的指令存放如图8所示。
图8 部分指令存放结构图
单个舵机的指令编辑比较简单,并没有太多的操作限制,对于批量舵机的操作,关系到舵机机器人的姿态及批量操作中的舵机id,会存在重复、不规范、无意义的情况,所以需要对姿态的操作做一个结构上的定义和编辑上的限制。
对于17路伺服舵机机器人的姿态(主要是在某一时刻状态和连续的动作时对相关舵机的操作角度、回读角度、持续时间、延时等情况)进行描述,舵机组控制指令编辑流程如图9所示。
图9 舵机组控制指令编辑流程图
对于舵机机器人姿态控制,可以分为静态和动态状态,连续的静态姿态组成一个基本的动态,多个动态组成一个动作指令集,对于多个静态姿态组成的动态,在编辑的时候将其分为多个动作组,不同的动作组之间互不影响,相同的动作组内应该是舵机的最小集合,对于指令的编辑的增、删、改,有跨组编辑和组内编辑,应该考虑不同情况下操作合法性和合理性。
指令编辑操作完成后需要更新数据,其次刷新现有动作组,然后提交给异步线程处理,可以在异步线程中执行指令或者保存指令,在执行指令时可能会有一些误差,可以在执行过程中给指令进度添加一进度条,方便对当前执行状态的观察及后续数据调整。部分执行代码如图10所示。
图10 部分执行指令进度代码
区别于普通的通过控制板控制伺服舵机,文章研究了在.net平台下利用总线串口直观地控制一种17伺服舵机组成的机器人姿态,通过指令集及对指令集的操作,可以直接获取到控制所需的字节指令,方便指令的移植及机器人姿态的研究,对于获取到的动作指令,内容包括舵机号、舵机角度、速度及持续时间,得到的数据可以适用于其他型号的总线型伺服舵机,能够缩短舵机组动作姿态开发的进度。