APP下载

机器人中间件消息实时性保证机制的研究与实现

2015-12-25樊泽栋丁博史殿习张鹏飞

软件 2015年10期
关键词:实时性

樊泽栋++丁博++史殿习++张鹏飞

摘要:在分布计算环境下机器人领域对网络消息传输的实时性有着迫切的需求。目前主流的机器人中间件ROS(Robot Operatmg System)尚不能提供对消息实时性的支持。在传统分布计算件领域,对网络消息传输的实时性的研究已经非常深入,并涌现出很多优秀的研究成果(例如OpenSplice DDS)。本文将OpenSplice DDS集成到ROS内核的通信层,使之成为ROS底层可选的通信协议之一,从而实现ROS网络消息传输的实时性。实验表明,修改后的ROS内核具有更好的可伸缩性和消息优先级等实时保证能力。

关键词:机器人中间件;实时性;分布计算环境;ROS

中图分类号:TP31 文献标识码:A DOI: 10.3969/j.issn.1003-6970.2015.10.006

引言

随着机器人软件日趋复杂,特别是机器人分布式应用的普及,中间件等软件基础设施在机器人软件领域的地位也日趋重要,其作用主要表现在两个方面:(1)通过平台化实现软件重用,即通过规范化、模块化的编程模型(例如面向机器人领域的构件模型)来实现机器人应用逻辑的有效重用。(2)为分布异构提供必要支持。即通过中间件的引入,使得机器人应用的开发者无需关心底层的分布性,实现异构机器人计算结点之间的互联互通。

目前,由著名机器人公司Willow Garage开发和维护的ROS(Robot Operating System)是国际上比较主流的开源机器人中间件,并逐渐成为机器人领域的事实标准。ROS的首要设计目标是提高机器人研究和开发过程中的代码重用,使得开发者可以将精力聚焦在新的使能技术上。它具有如下一些显著的特点:

(1)元操作系统。ROS虽然名为“操作系统”,但它是一个元操作系统,即运行在已有的通用操作系统之上(如Ubuntu)的一层基础软件。在这个意义上,它更符合传统中间件的定义。

(2)分布式架构。一个机器人内部往往有多个计算/信息处理结点,因此ROS本身设计为一个分布式、点对点的架构。在每个结点的通用操作系统之上,它提供了与机器人密切相关的各类服务(如多个计算节点之间的消息发布/订阅能力)。

(3)微内核和“瘦”化设计。ROS内部基于微内核设计,它不追求构造一个单一化的巨大的机器人开发和运行环境,而是通过微内核集成了大量的工具和模块。

但是,ROS目前尚不能提供对实时性的支持,而在分布计算环境下机器人领域对实时性又有着极为迫切的需要。基于此现状,本文对ROS的内核进行修改,将OpenSplice DDS集成到ROS中,实现ROS对网络消息传输的实时陛的支持。本文后续内容组织如下:第2节阐述研究背景与相关工作,第3节给出ROS消息实时性实现的内核扩展方法,第4节进行测试并得出实验结果,第5节结束语。

1 研究背景与相关工作

1.1 机器人分布计算环境下的消息实时性

随着机器人应用规模的增长和应用领域的扩展,分布计算技术在机器人应用中日趋重要,主要表现在两个方面:(1)真实机器人需要感知和处理多种环境信息,在动态变化的环境中遂行复杂任务,本身往往具有多个信息处理结点;(2)人们希望机器人能完成更加复杂的作业,这些复杂的作业由单一机器人已难以完成,需要多机器人通过分布计算相互协调与合作共同完成。

机器人与物理世界紧密结合,物理世界的时间约束直接映射到机器人软件上,因此实时性是机器人软件的重要特性,机器人分布计算软件也不例外。考虑如下的机器人分布计算场景:用于侦查和作战的无人机系统通常由无人机、地面控制站和配套网络通信设施组成(见图1)。例如一个典型的美军“捕食者”系统包括四架无人机、一个地面控制站和一个“特洛伊精神II”数据分发系统。无人机需要向后台传输飞行状态数据、实时图像信息等多种类型数据,这些数据有不同的优先级和预期传输时延,例如飞行状态数据虽然数据量较少,但必须高优先级、低延时传送,否则可能会造成远程操控的时滞,这对于高速飞行的无人机可能是致命的;而高分辨率的地面图像信息主要用于情报搜集,这些图像以流的形式持续向后台传送,需要占用很大的带宽,但可以以低先级传递,必要时可以通过丢帧等方式来避免网络拥堵。

因此,要满足机器人分布计算场景的需求,在消息层面需要提供消息优先级设置、预期传输延迟设置、自动夭折时限设置、时间过滤周期设置等与时间相关的服务质量保证能力。这些消息传输过程中的时间约束即为本文所称的消息实时性。

1.2 相关研究工作

针对上节提出的消息实时性需求,本小节将具体阐述两个方面的相关工作:首先是介绍在传统中间件领域是如何实现消息实时性的;其次是介绍目前ROS已有的实时性实现方案。

1.2.1 DDS

在企业计算和互联网计算领域,DDS是目前实现消息实时性的主流中间件解决方案。在许多大型网络化实时系统中,最为关键的是数据(如嵌入式设备运行状态、各类环境数据)的实时交换,即数据必须按照服务质量QoS(如各类实时约束)分发给感兴趣的订阅者。为此,OMG组织发布了消息实时中间件DDS(Data Distribution Service for Real-timeSystems)。在DDS中消息的传输采用的是基于主题的订阅/发布模型。在此模型下,数据的发送者不是直接将消息发送给接收者,而是先将消息发送到主题(topic)上,然后所有订阅了这个消息订阅者从主题接受消息而不需要知道消息的发布者。通过此模型,DDS中消息的发送者和接受者在时间和空间上是松耦合的,这样DDS可以较好的应用在高度动态的环境下,例如分布式机器人环境。

与其它消息中间件相比(例如Advanced MessageQueuing Protocol).DDS具有以下两个优点:(1)服务质量设置。DDS定义了较为全面的与时间相关的服务质量QoS控制策略,例如消息的传输优先级、消息自动夭折、传输延迟控制、基于时间过滤消息等等。(2)扩展性强。首先DDS采用的是点对点的传输模式,其次DDS支持UDP/IP组播,这使得DDS具有良好的可扩展性。由于DDS具有上述优点,DDS数据分发服务已在国防、电信、航空、分布控制、工业自动化等领域得到广泛的运用。

OpenSplice DDS是由PrismTech公司研发的开源实现,是目前唯一完全兼容OMG DDS标准的中间件,提供了对所有DCPS描述和DLRL对象描述的支持,能够为系统应用提供在正确的时间和地点获取正确的数据的能力。因而本文将采用OpenSplice DDS来实现机器人中间件ROS的消息实时性。

1.2.2 ROS实时性现有解决方案

上文已经提到ROS作为当前主流的机器人中间件不能提供对实时性的支持,但是ROS支持与实时代码的集成,即在ROS应用中嵌入其他实时性保证的类包。目前在此方面主要有两类具有代表性的实践:

(1)与PR2机器人实现相关的实时代码

PR2机器人是Willow Garage公司自身的产品,在其实现过程中需要一些实时代码,这些包的名称都是pr2_*的形式。例如,PR2机器人的主控软件包(原文是Main loop that runs the robot)pr2.etherCAT、控制器软件包pr2_controller_manager等都提供了对硬实时的支持。

(2) ROS与Orocos实时工具包的集成

Orocos是一个面向机器人控制的开源软件框架,其上的软件以Orocos构件的形式组织。Orocos工具链中的实时工具包提供了对操作系统实时能力(如线程调度能力)的高层抽象,以及Orocos构件的运行容器。开发人员可以基于Orocos实时工具包快速开发出具有实时性保证的机器人控制构件。Orocos的底层可以直接是标准的Linux内核,也可以是RTAI/LXRT或Xenomai软件框架,后二者基于标准Linux提供了硬实时的编程接口。

上述两种ROS实时性解决方案都是只支持机器人本地计算节点内部的实时性,而对分布环境下网络消息的传输不能提供实时性保证机制。

2 ROS消息实时性实现的内核扩展

本文在ROS Indigo版本的基础上,增加消息传输优先级和传输延迟控制、消息自动夭折机制、基于时间的过滤四个方面的实时性保证机制。为实现这一目的,本文对ROS内核进行了扩展,将DDS引入到了ROS内核中,提出了基于ROS/DDS的集成架构,进而设计实现了ROS中的DDS协议插件,并引入了可供上层应用使用的实时性相关API。

2.1 基于协议插件的ROS/DDS集成架构

从本文2.2.1节的分析可以看出,DDS是分布式实时消息传递的成熟中间件规范,在消息层面上能够支持较为全面的实时性支持,并且相关产品已经在实时嵌入式系统、工业控制系统等领域得到广泛应用。因此,本文直接选取符合DDS规范的开源实现OpenSplice DDS,将其集成到ROS的消息通信层中,替代已有的ROS消息通信机制,从而为ROS提供所需的消息实时性保证能力。

如图2所示,本文主要对ROS内核做了如下修改:1)选取符合DDS规范的开源实现,将之集成到ROS内核的消息通信层,成为ROS底层的可选通信协议之一;2)将ROS应用层的现有API(消息发布/订阅等方法)映射到DDS实现上,使得上层应用可以通过ROS API进行常规的消息发送和接收;3)新增实时相关的消息发布/订阅API,并将之映射到底层DDS的实时特性。当上层应用调用新增的实时API进行消息发送和接收时,修改后的ROS内核将提供消息优先级、传输延迟、消息自动夭折、基于时间的过滤能力等。

为了尽可能保持ROS现有API的兼容性,本文主要在ROS内核底部的消息通信层进行修改。鉴于DDS是直接面向消息发布/订阅机制的中间件,内部已经封装了连接管理、缓冲区管理等机制,因此本文采用DDS接管ROS全部的消息通信层工作的方法来实现机器人的消息实时性。

2.2 DDS协议插件

如前所述,在基于协议插件的集成架构中,DDS协议插件将接管ROS通信层的全部工作。因此,协议插件实际上起到了在ROS消息发送和接收两个缓冲区与OpenSplice DDS之间的桥接作用,其设计方案如图3所示:

图3中,DDS协议插件的核心类是DDSBroker类和DDSListener类:前者负责完成DDS消息中间件的初始化、Topic的创建等管理工作,并从发送消息缓冲区中获取ROS消息,转换成DDS消息进行发送;后者将接收到的DDS消息解包,还原成ROS消息,将之放入到ROS的接收消息缓冲区中。此外,DDS协议插件中还包括了如下一些内部模块:

·DataWriter池,用来保存本结点所发布Topic对应的DDS DataWriter;

·DataReader池,用来保存本结点所订阅Toipc对应的DDS DataReader;

·Topic映射,用来在ROS Topic和DDS Topic的语法格式之间进行转换;

·消息转换,用来在DDS和ROS消息之间进行双向转换;

·出错处理,将DDS异常映射到ROS的错误处理中。

此外,集成架构还需要解决的另一个挑战是与官方ROS版本的兼容性:当系统的多个结点中,部份是官方ROS版本(未集成DDS协议),部份是集成了DDS协议的版本,能否实现互联互通互操作?为实现这一目标,本文扩展ROS中原有的协议协商机制,增加对DDS消息协议协商的支持。当两个ROS结点之间建立连接时,将通过双方都支持的XMLRPC协议进行协商,并优先选择DDS协议。如果有一方不支持DDS协议,将降级使用TCP或其它可用协议。同时,用户也可以通过ROS应用层API中的Transport_hint机制来指定优先使用的底层通信协议。

2.3 实时性相关API的添加

修改后的ROS内核具有消息传输优先级和传输延迟控制、消息自动夭折机制、基于时间的过滤等实时性保证能力。这些能力是以应用层API新增方法的形式所直观展现出来的。除了所有ROS原有的API外,本文在ROS内核中增加消息优先级设置、预期传输延迟设置、自动夭折时限设置、时间过滤周期设置等API,从而使得上层应用可以使用新增的实时性保证能力(如表l所示)。

3 测试与实验结果

本节主要对修改后的ROS内核性能和实时进行的测试,以验证本文工作的有效性。

3.1 实验平台

本文测试实验平台为两台服务器,通过千兆带宽交换机相连,具体配置如下:

中央处理器:Intel Xeon E5-2403 v3 4核处理器,主频1.8GHz。

内存:ECC DDR4,8Gb。

操作系统:Ubuntu 14.04。

交换机:NETGEAR GS108T。

3.2 ROS原生协议与DDS协议的对比

首先,我们对改进后的ROS的吞吐量进行测试,并将结果与ROS的官方版本进行对比。吞吐量的测试主要分为两个方面:

(1)1对l测试,即1个消息发布者对1个消息订阅者,发送的单个消息的大小从100B到50KB。测试结果如图4 (a)所示,修改后的ROS内核到达带宽最大容量的速度要比ROS官方版本慢,这是因为确保消息传输的实时代码以及网络消息附加字段会带来的一定的额外开销。

(2)1对n测试,即一个消息的发布者对n个消息的订阅者(n=l、2、…、5),其中每个消息的大小为20KB。实验结果如图4(b)所示,当消息的订阅者不断增加时,可以发现ROS官方版本的吞吐量会急速下降,而改进后的ROS相对来说较为稳定;并且当订阅者的数量达到4个及以上时,改进后的ROS的吞吐量会超过ROS的官方版本。

3.3 修改后ROS内核的实时能力测试

为了验证修改后的ROS的实时性是否有效,本小节选取消息优先级作为测试的对象。测试方法如下:为了测试出消息优先级设定的效果,本次实验选定了三种不同优先级的消息(high、normal、low),分别在三个不同的话题上进行发布,每个消息的大小为SKB;消息的发布者不停的在这三个话题上发布消息,直到订阅这三个话题的订阅者接受到的消息达到300条。实验结果如图4(c)所示,可以发现改进后的ROS收到高优先级的消息数为179条,收到低优先级的消息数为l条;而ROS的官方版本接收到不同优先级的消息的数量相同。因此,修改后的ROS能够对实时性提供有效的支持。

4 结束语

本文主要针对机器人中间件ROS实时性支持不足的现状,提出了“ROS+DDS”框架以此来实现ROS的消息实时性。具体是将OpenSplice DDS集成到ROS内核的通信层,作为ROS底层的可选消息协议之一以此来实现实时性。通过实验证明,改进后的ROS能够对实时性提供较为有效的支持。下一步我们将继续优化“ROS+DDS”框架以实现ROS直接调用DDS的通信层进行消息的实时传输。

猜你喜欢

实时性
基于规则实时性的端云动态分配方法研究
基于虚拟局域网的智能变电站通信网络实时性仿真
航空电子AFDX与AVB传输实时性抗干扰对比
浅谈嵌入式系统的实时性问题
LonWorks总线实时性能分析与仿真研究
浅析PCM设备在电力通信网络中的应用和发展
计算机控制系统实时性的提高策略
一种满足实时性需求的测发控软件改进技术
OpenCV在摄像机标定上的应用
基于卡尔曼滤波的台球跟踪技术研究