DDS和ROS中间件实现

ROS 2和不同的DDS / RTPS供应商

ROS 2构建在DDS / RTPS之上,作为其中间件,提供发现,序列化和传输功能。本文详细介绍了使用DDS实现和/或DDS的RTPS有线协议的动机,但总之,DDS是一个端到端的中间件,提供与ROS系统相关的功能,例如分布式发现(不像ROS那样集中1)并控制传输的不同“服务质量”选项。

DDS是一个行业标准,已经被一系列供应商实现,例如RTI的实现Connext,以及ADLink的实现OpenSplice RTPS(又名DDSI-RTPS)是DDS用于通过网络进行通信的有线协议,并且还有不能满足完整的DDS API但为ROS 2提供了足够的功能的实现,例如eProsima的快速RTPS实现。

ROS 2支持多种DDS / RTPS实现,因为在选择供应商/实现时,它不一定是“一刀切(one size fits all)”。在选择中间件实现时,您可能会考虑许多因素:许可等逻辑考虑因素或平台可用性或计算占用空间等技术因素。供应商可能会提供多个针对满足不同需求的DDS或RTPS实施。例如,RTI有一些其Connext实现的变化,其目的各不相同,例如专门针对微控制器而另一个针对需要特殊安全认证的应用(我们目前仅支持其标准桌面版本)。

为了使用ROS 2的DDS / RTPS实现,需要创建“ROS中间件接口(ROS Middleware interface)”(又叫rmw接口或rmw)包,使用DDS或RTPS实现的API和工具实现抽象ROS中间件接口。实现和维护RMW包以支持DDS实现需要做很多工作,但支持几个实现对于确保ROS 2代码库不依赖于任何一个特定实现非常重要,因为用户可能希望根据需要切换不同实现版本以满足他们项目的需求。

支持的RMW实现:

Product name License RMW implementation Status
eProsima Fast RTPS Apache 2 rmw_fastrtps_cpp Full support. Default RMW. Packaged with binary releases.
RTI Connext commercial, research rmw_connext_cpp Full support. Support included in binaries, but Connext installed separately.
RTI Connext(dynamic implementation) commercial, research rmw_connext_dynamic_cpp Support paused. Full support until alpha 8.*
PrismTech Opensplice LGPL (only v6.4), commercial rmw_opensplice_cpp Partial support. Support included in binaries, but OpenSplice installed separately.
OSRF FreeRTPS Apache 2 __ Partial support. Development paused.

"Partial support" 表示没有实现rmw接口所需的一个或多个功能。

有关使用多个RMW实现的实用信息,请参阅https://github.com/ros2/ros2/wiki/Working-with-multiple-RMW-implementations.

猜你喜欢

转载自blog.csdn.net/wsc820508/article/details/81284852