ROS2和不同的DDS程序

ROS2是建立在DDS程序的基础上的。DDS程序被用来发现节点,序列化和传递信息。 这篇文章详细介绍了DDS程序的开发动机。 总而言之,DDS程序提供了ROS系统所需的一些功能,比如分布式发现节点(并不是像ROS1那样中心化),控制传输中的不同的"通信质量(Quality of Service)"选项。

DDS是一个被很多公司实现的工业标准。比如RTI的实现Connext和eProsima的实现Fast RTPS。 ROS2 支持多种实现方式。因为没有必要“一个尺码的鞋给所有人穿”。用户有选择的自由。 在选择DDS实现的时候你要考虑很多方面:比如法律上你要考虑他们的协议,技术上要考虑是否支持跨平台。 不同的公司也许会为了适应不同的场景提出不止一种的DDS实现方式。 比如RTI为了不同的目标就有很多种他们的Connext的变种。从小到微处理器到需要特殊资质的应用程序(我们支持标准的桌面版)。

为了能够在ROS2中使用一个DDS实现,需要一个ROS中间件(RMW软件包), 这个包需要利用DDS程序提供的API和工具实现ROS中间件的接口。 为了在ROS2中使用一个DDS实现,有大量的工作需要做。但是为了防止ROS2的代码过于绑定某种DDS程序必须支持至少几种DDS程序。因为用户可能会根据他们的项目需求选择不同的DDS程序。

支持的RMW实现

名称 协议 RMW 实现 状态
eProsima Fast RTPS Apache 2 rmw_fastrtps_cpp 完全支持. 默认的RMW. 已经打包在发布的文件中.
RTI Connext commercial, research rmw_connext_cpp 完全支持. 需要从源码编译支持.
RTI Connext (dynamic implementation) commercial, research rmw_connext_dynamic_cpp 停止支持. alpha 8.* 之前版本完全支持
PrismTech Opensplice LGPL (only v6.4), commercial rmw_opensplice_cpp 停止支持. alpha 8.* 之前版本完全支持
OSRF FreeRTPS Apache 2 -- 部分支持. 开发暂停.

*暂停支持意味着从 ROS2 alpha 8 版本以后新的添加进ROS2的功能还没有添加到这些中间件的实现中来。 这些中间件的实现也许以后会会有也许以后也不会有。

对于如何同时使用多个RMW实现的方法,可以看[[使用多个RMW实现]]页面

results matching ""

    No results matching ""