基于LCM的无人水面机器人软件系统设计

时间:2022-08-24 12:10:53

基于LCM的无人水面机器人软件系统设计

摘 要: 针对港口安全的需要,为了提高监视港口安全的水面机器人软件系统的可靠性与实时性,提出了基于LCM的改进的机器人软件系统设计。它可以实时采集水面机器人各传感器参数,然后利用收集到的参数进行UPSV自身的运动控制,实现智能避障,监测港口安全等功能。在数据采集与通信方面,这套软件系统是基于LCM进行设计的;在行为控制方面,对其进行了改进,主要采用的是IvP控制模型。

关键字: LCM; UPSV; 水面机器人; IvP; 实时系统

中图分类号: TN911?34 文献标识码: A 文章编号: 1004?373X(2013)20?0038?03

0 引 言

一个机器人软件系统一般分成如下三部分:数据采集,状态估计,任务执行。为了完成特定的任务,模块与模块间需要进行信息交互。现行的操作系统可以很方便的实现在不同计算机上组织不同软件模块的通信,这样以来,就把模块间数据交换的研究转变成了对不同进程间的通信的研究。

本软件采用的是基于/订阅模式的LCM(Lightweight Communications and Marshalling)进行设计的,采用的是UDP多播技术进行通信[1]。LCM是一个针对开发实时性要求较高的消息传递系统的开发套件。采用模块化的设计方式,不同的模块可以运行在同一个或不同的硬件平台上,并且不同模块的开启与停止互不影响[2]。此外,LCM还提供了一系列的调试工具,方便软件开发过程中的调试。

1 LCM的基本原理

LCM主要可以分成以下几个模块:类型定义模块、数据编组模块、通信模块、调试工具。类型定义模块,对复合数据类型定义的语法进行了说明,LCM中的不同数据都是通过一个或多个复合数类型进行定义与声明的;编组模块主要功能是实现消息的编码/解码,经过编码的数据都以二进制的形式进行传递; 通信模块基于/订阅模式的消息传递系统进行设计,采用UDP多播技术作为底层的通信手段。

1.1 类型定义模块

LCM定义了一个统一的数据类型模式来定义开发过程所用到的一些数据,每一个数据类型的声明都是一个消息结构体,并且数据类型的定义与平台无关。下面是一个LCM进行变量声明的一个例子:

从面可以看出,LCM允许成员变量的嵌套定义。每一个变量都会放在自己相应的filename.lcm文件中,如struct waypoint_t会在文件waypoint_t.lcm中进行定义。LCM中的支持的基本数据类型有整型:int8_t,int16_t,int32_t,int64_t;浮点型:float,double;字符串类型:string;布尔类型: boolean。

另外,LCM还支持用户自定义的数组类型。数组可采用固定长度和可变长度的方式进行定义。

1.2 数据编组模块

数据编组将用户定义的数据编码成二进制流,这一部分是由LCM自身进行处理的,用户可以不用关心内部是如何实现的。编组模块还可以给特定的消息模块添加一个“数字签名”处理,“数字签名”是一个占8 B的变量,它的计算是通过一个Hash函数来求得的。LCM客户端接收到一个消息时,它首先会解析消息中的“数字签名”,如果这个“签名”与它所期待的不一样,那么客户端就会报告错误。

1.3 通信模块

LCM中采用的UDP多播技术,它会把接收到的消息全都发送到所有的客户端,然后客户端会忽略掉那些所不关心的数据。LCM最大的消息大小为4 GB,它提供了一种最大可能的包传递机制,可以最大可能的降低数据传递过程中的丢包现象。LCM中的消息通过UDP多播技术在网络中进行传输,当一个进程在一个特定的命名的信道上发送数据后,网络中的另一个进程可以订阅同一信道中的数据从而接收传递来的消息包。

2 IvP简介及LCM系统的改进

IvP(Interval Programming)[3]的关键在于可以对目标函数分段定义,然后通过设计一个IvP solver,可对近似后的目标函数进行全局优化。

图1中所示的行为目标函数定义为:

[f(x,y)=Ae-(x-x0)2+(y-y0)22σ2]

式中:A=150;σ=32.4;x0=50;y0=1 150;x,y是该行为的决策变量,取值范围均为[-250,250]。

图1(a)是直接把目标函数平均分成了7 056(每一块小区域的大小是84×84)块近似的结果;图1(b)是把目标函数分成了289(每一块小区域的大小是17×17)块近似的结果;图1(c)是直接把目标函数平均分成732块小的区域。

IvP问题,可归结为:对于每一个行为,都有与之相对应的目标函数,针对目标函数,利用IvP函数对它进行一系列的近似表达,然后从决策空间中寻找出一个最优决策点,使它满足式(1),从而将决策点对应的决策变量作为行为选择的输出结果。

对于传统的LCM行为控制模块进行了改进,采用了LCM与IvP相结合的方式实现控制模块与其他模块的通信。LCM主要是实现数据模块与IvP模块间的数据通信,IvP主要实现对各个决策命令进行融合,以期达到最佳的路径决策控制。LCM服务器与各个客户端间的通信没有改变,控制模块会订阅其他数据模块的信息,如GPS、AHRS、陀螺仪等数据,然后利用IvP solver做出最优的决策,实现对机器人位姿航向等的控制。控制模块同样也会订阅声纳、质谱仪等数据,实时的向岸基平台传送,从而实现对海洋环境的监测。

3 软件系统设计

3.1 系统的总体框图

系统的总体框图如图2所示。软件设计的核心在于内部的LCM通信机制和IvP控制模块。其中,LCM是系统各个模块通信的桥梁,数据保存客户端、各传感器客户端和IvP控制模块在一开始的时候会建立起与LCM服务器的连接,连接成功后,当有消息到来时,服务器会向各个客户端发送数据,每一个客户端根据自己所订阅的数据进行取舍。每一个传感器都对应一个驱动,这些驱动主要负责与LCM的接口的通信,对应的驱动都是一个标准的进程,作为一个客户端实现与LCM服务器的通信,进行数据的传输,每一个传感器都有一个与之对应的数据类型,例如,GPS的数据类型定义如下:

这个数据结构中存放的是GPS的相关数据,包括时标、经/纬度、速度等,这个数据作为一个数据包在不同的模块间进行应用。

3.2 系统流程图

软件开始的时候,先对各变量进行初始化,把时标timestamp赋初值为0,这个变量对于后面实现传感器同步起到重要的作用,在数据保存客户端会把接收到的传感器数据加上时标timestamp然后进行保存。之后开启LCM服务器,如果开启成功,把mFlag赋值为1,配置串口参数,打开串口,建立连接,然后发送传感器开启指令进行数据的接收与处理。

在OnNewMail()中,一方面是对接收到的数据进行处理,加上同步时标然后进行保存,另一方面会把接收到的数据传递到IvP模块中,供IvP solver使用;在OnIterate()中主要是完成行为决策的输出,从而控制机器人的各个方向的运动。

对于IvP模型的行为选择计算流程如图4所示。

IvP问题归结为对于每个行为所对应的目标函数,利用IvP函数[4?5]对其进行近似表达,然后从决策空间中寻找到一个决策点使其满足上面的条件,从而将决策点对应的决策变量作为行为选择的输出结果。

4 结 语

本文首先对LCM的基本原理进行了简单介绍,然后重点介绍了LCM中的数据类型的定义、数据编组模块、通信模块,提出了LCM的改进方法,并对改进方法中采用的行为控制方法进行了说明,着重讲解了IvP行为控制的方法。

参考文献

[1] MOORE David, OLSON Edwin, HUANG Albert. Lightweight communications and marshalling for low?latency interprocess communications [EB/OL]. [2009?09?02]. http:// www.dspace.mit.edu/handle/1721.1/46708.

[2] 杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报,1999,27(2):68?75.

[3] 蒋大鹏.多水下机器人协调控制技术研究[J].哈尔滨:哈尔滨工程大学,2011.

[4] BENJAMIN M R, CURCIO J A, LEONARD J J, et al. Navigation of unmanned marine vehicles in accordance with the rules of the road [C]// Proceedings 2006 IEEE International Conference on Robotics and Automation. Orlando, FL: IEEE, 2006: 3581?3587.

[5] BENJAMIN M R, SCHMIDT H, NEWMAN P M, et al. Nested autonomy for unmanned marine vehicles with MOOS?IvP [J]. Journal of Field Robotics, 2010, 27(6): 834?875.

[6] 龚建伟,熊光明.Visual C++/Turbo C串口通信编程实中践[M].2版.北京:电子工业出版社,2007.

上一篇:姿态传感器温度补偿方法研究 下一篇:仿真软件在《数字电子技术》课程教学中的应用