首页 > 范文大全 > 正文

一种用于移动机器人平台组建的通信规约设计和实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种用于移动机器人平台组建的通信规约设计和实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

【 摘 要 】 为解决移动机器人平台构建流程中上位机和下位机的通信链路问题,提出一种可靠的通信规约。该规约具有完备的自校验和握手机制,可有效剔除因传输误码和控制逻辑有误而混入的错误;具有灵活的扩展性,仅需调整少量字段便可实现机器人功能的调整,且不损害对历史版本的兼容性。本规约在基于跨平台图形框架Qt中实现并验证。

【 关键词 】 移动机器人;Qt;通信规约

1 引言

搭建自有移动机器人平台是机器人研究的起点。基于模块化设计思想,构建移动机器人平台时,可将系统分为两部分:上位机和下位机。上位机负责转译用户对机器人的控制指令,并采集和处理上层传感器数据;下位机将上位机对机器人的控制指令翻译为驱动电机的控制字,以使机器人按照用户预期运动,并实现PID等控制策略。于是,构建连接上位机和下位机的通信规约是移动机器人平台构建中重要的问题。目前,一些商用的移动机器人平台例如Segway、Pioneer,都采用上位机下位机构架,并通过规约相连。但规约部分并不对用户开放。领域内很难找到开源的规约作为参考。

考虑移动机器人在真实作业环境中的多种需求,本文提出一种可靠的移动机器人上位机与下位机之间的通信规约。并基于开源的跨平台的图形编程框架Qt实现。本文所提出的通讯规约的实现细节也在知名的代码共享平台Github上开源,可无偿用于科研和教育。

2 设计目标

在实际应用场合,移动机器人上位机和下位机间的通讯规约需要考虑几个因素:首先,移动机器人作业环境复杂,规约应具有完备的自校验机制,同时,下位机驱动能力因电机选型而异,还应校验用户指令中的逻辑错误;其次,鉴于不同的出错可能,规约应具备完善的通信握手机制,能实现错包或误码后的重发;再者,规约应具备灵活的可扩展性,以应对用户指令随不同应用和控制场景的转变而添加或更新;此外,当上位机与下位机之间的通信链路变为无线时,一个上位机可管理多个下位机,构建完备的寻址机制也是必须的。

3 规约设计

本规约设计的底层构建于RS232硬件协议,在设计上参考了文献[4],市场上现有的嵌入式板卡几乎都自带串口,很多其它接口例如USB都可通过现成的硬件解决方案转为串口。将所有的与数值有关的字段都直接以二进制传输,并不转译为ASCII码,以最大限度地节省传输数据量。

a) 字段描述

规约以语句为单位,包含9个字段,至少包含8字节,各字段定义如下。

起始标志位:0x7E,标志一条消息的开始,作为ASCII码对应的字符‘~’。

规约版本号:用以规避规约后期扩展而造成的版本冲突。初始版本号为0x10,每次规约升级需同时更新版本号。

目标地址:消息发送目的地的地址。例如,上位机地址为0x00,下位机地址为0x01,当系统包含多个下位机时,地址可扩展。

命令类型标识或响应标识:命令类型标识表示了命令类型,响应标识标志了该语句是针对何种类型命令的响应。该字段的部分值定义示于表格 2(篇幅所限,仅列出部分定义)。

命令下发标识或响应返回状态:该字段为复用字段,上位机向下位机下发命令的规约包中,该字段为“下发标识”并统一置为0xFF,标志前述命令类型为下发。而下位机对上位机的响应返回握手包中该字段依据不同的下发信息而变化,进而指示了对特定命令响应执行状态。请参见表 1所示。

参数段长度:指明后续的参数段长度,单位为字节。机器人的不同运动状态对应不同的参数段。通过参数段长度可间接计算整个指令以字节为单位的长度,即,参数段长度加上8。

参数段:指示了上位机向下位机下发的某一指令的具体命令参数,可以有多个字节也可以没有。总长度需和参数段长度相吻合,参数段中的内容可包含几类:

笛卡尔坐标、极坐标和相对运动。

校验和:除起始标识和结束标识及校验和位本身的所有字段的模256和。

结束标识:0x0D,标志一条消息的结束。

b) 功能扩展

仅需调整规约的少量字段便可实现机器人功能的升级,且不损害对历史版本的兼容性。规约的不同功能可通过调整“命令类型标识或响应标识”字段的赋值实现,因为本规约数据包中的“命令下发标识或响应返回状态”字段是复用的,与其对应,参数段的定义是不同的。

c) 规约举例

为更清晰地说明规约构成,举例如下:假设要完成的功能:让机器人运动到当前机载笛卡尔坐标系的点(-210cm,321cm),则下发的命令消息各字段内容如表 3第一行所示,下位机接收到了该命令消息,发现校验和错误,则返回响应消息如表 3第二行所示。

4 规约的实现

a) 总体思路

实现所提出通信规约的核心步骤是解析接收到的符合规约标准的规约数据包,通过各项校验确保其有效性,如果通过校验则依据规约定义将指令类型和参数段正确提取,再执行后续操作。本文所提出的规约已在如图 2所示的实验移动机器人平台上实现,并成为整个平台的最核心部分。机器人上位机基于通用的笔记本电脑,对其硬件没有特别要求,下位机部分基于开源的硬件语言Arduino板卡搭建。上位机与下位机部分通过USB虚拟串口相连。规约工作在下位机Arduino Mega2560微控制器板115200bps的波特率下。下位机部分基于串口传输单一字节所用时间的7倍时间,约0.6毫秒为时间间隔,判断一帧数据包的结束。

b) 基于Qt的规约解析

上位机部分使用了跨平台的图形界面编程框架Qt实现,具有显著的跨平台特性,串口驱动部分使用了开源的基于Qt的第三方串口库Qextserialport。

与具有高度实时性的嵌入式操作系统不同,上位机运行的通用操作系统,无论是Windows还是Linux,都并发运行了很多进程,都无法实时实现事件跳转,因此,一条合法指令有可能被两次或多次串口事件分割,即,一条指令的前段部分位于前一个数据包的尾部,后半部分位于后一个数据包的前部。

如果不妥善考虑这种可能,并给出处理方法,会丢失有用数据。因此,规约包解析过程中,不直接丢弃位于包尾的潜在合法指令,应进行逻辑判断(即,虽然长度不够但基于现有长度是否出现了误码?),如有可能成为合法指令的一部分,则置于下一个数据包的前端,以确保不丢弃分割包。同时,因为下位机会选择时机上传运动信息有很大机率与对下发指令的反馈混在一起,还需考虑一个数据包中包含多条反馈指令的情况。规约解析的全过程都需确保不丢掉任何一个正确的规约包。

规约解析流程示意图 1,每次数据处理的起点对象并不总是串口缓冲区内实时接收到的数据,而是检查将处理上一次串口事件跳转后是否有数据缓存,如果有,则将缓存的数据置于本次接收到的串口缓冲区的头部,以此来随时捕捉合法指令语句被多次串口事件分割的情况。

实现中基于Qt中的QByteArray类作为串口数据缓冲区,该类具有lastIndexOf、count等适用于捕捉字节及字节组合的成员方法,可简化规约解析流程。

这里使用了Qt中的信号(Signal)和槽(Slot)机制,图 1所示流程位于onReadyRead()槽中,而对应的信号由Qextserialport提供的readyRead()触发。

5 结束语

本文设计了一种用于组建低成本移动机器人平台的通信规约,并在实际的机器人平台上实现,本规约具有完善的校验机制,能过滤传输误码和逻辑错误引发的各种错误;同时,本规约功能扩展灵活,仅需做少量地字段调整便能为机器人平台扩展新功能。本规约为快速构建机器人平台时上位机与下位机中构建通信链路提供了可行的解决方案。

参考文献

[1] A. Brooks, T. Kaupp, and A. Makarenko, "Randomised mpc-based motion-planning for mobile robot obstacle avoidance," in IEEE International Conference on Robotics and Automation, 2009, pp. 3962-3967.

[2] Z. Chen and S.T. Birchfield, "Qualitative vision-based path following," IEEE Transactions on Robotics, vol. 25, pp. 749-754, 2009.

[3] Digia Plc. (2013). Qt Open Source Project. Available: http:///.

[4] 上海交通大学科创小组."RS422 485主从通信协议".2009.

[5] Arduino. (2013). An open-source electronics prototyping platform Available: http://www.arduino.cc/.

[6] Qextserialport. (2013). Open source serial port library for Qt. Available: https:///p/qextserialport/.

项目基金:

由国家自然科学基金项目(61105097)、上海市教育委员会科研创新项目(13YZ081)资助。

作者简介:

孙作雷(1982-),男,2010年毕业于上海交通大学,获工学博士学位,现供职于上海海事大学电子工程系,领导机器辨识与互动研究组;主要研究方向为机器学习、机器视觉和移动机器人。