ROS 2中的DDS中间件

文章目录

一、简介

中间件是一个软件层,通常用于连接不同的应用程序、服务或系统,以便它们能够相互通信和交换数据。中间件并不直接向用户暴露,而是在系统之间充当"桥梁"或"调解人"。简单理解成邮局的信箱,但它并不仅仅是这么简单。ROS1中间件 是ROS组织自己基于TCP/UDP机制建立的,而ROS2采用了第三方的DDS作为中间件 ,将DDS服务接口进行了一层抽象,保证了上层应用层调用接口的统一性。ROS2为每家DDS供应商都开发了对应的DDS接口层,然后通过DDS抽象层来统一DDS的API。这里不做具体的DDS介绍,只想说当我们在遇到如帧率异常、丢帧、大量数据同步异常的时候,可以考虑更换DDS的方式进行解决。

二、默认支持的 DDS (Data Distribution Service) 实现

  1. Fast DDS(开源):Fast DDS是ROS 2官方推荐的DDS实现之一,由eProsima开发。Fast DDS提供了较低的延迟和高吞吐量,并且支持广泛的特性,如QoS(Quality of Service)设置、持久性、可靠性等,是ROS 2中的默认DDS实现,性能较好,并且能够满足许多实时系统的要求。

    bash 复制代码
    sudo apt install ros-<ros2-distro>-rmw-fastrtps  # ros2-distro 换成自己的ros版本,如 humble
  2. Cyclone DDS(开源):Cyclone DDS是由Eclipse Cyclone DDS提供的开源DDS实现特别适合系统资源有限的嵌入式设备和对低延迟要求较高的应用场景。相对于 Fast DDS,Cyclone DDS提供了更多的调试信息且非常轻量。

    bash 复制代码
    sudo apt install ros-<ros2-distro>-rmw-cyclonedds
  3. RTI Connext DDS:RTI Connext DDS是由Real-Time Innovations (RTI) 提供的商业DDS实现。它是一个功能非常强大的DDS实现,广泛应用于工业、汽车、航空航天等领域,提供了丰富的特性和高可靠性。RTI Connext DDS可以通过ROS 2的商业支持提供,通常需要许可证和支持合同 才能使用完整的功能,不然会以试用版的形式支持并具有一些限制,特别注意!!!

    bash 复制代码
    sudo apt install ros-<ros2-distro>-rmw-connextdds
  4. OpenSplice DDS(开源/商业):OpenSplice DDS是由ADLINK Technology提供的另一种DDS实现,适用于实时和高吞吐量的系统。尤其在工业控制和其他需要高可靠性、分布式系统的场景中非常常见。从ROS 2 Eloquent开始,OpenSplice DDS已不再被官方支持。高版本想要使用OpenSplice DDS,可能需要自行编译和配置,不然无法定位软件包。OpenSplice DDS的商业版本会涉及许可证和支持合同。开源版本遵循 Apache License 2.0协议。

    bash 复制代码
    sudo apt install ros-<ros2-distro>-rmw-opensplice

三、切换DDS实现

  1. ROS 2支持的DDS实现,可以通过设置ROS 2环境变量RMW_IMPLEMENTATION来指定使用的DDS实现。

    bash 复制代码
    export RMW_IMPLEMENTATION=rmw_fastrtps_cpp        # Fast DDS(默认实现)
    export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp      # Cyclone DDS
    export RMW_IMPLEMENTATION=rmw_connextdds_cpp      # RTI Connext DDS
    export RMW_IMPLEMENTATION=rmw_opensplice_cpp      # OpenSplice DDS
  2. 可以将这些export命令添加到~/.bashrc文件中,这样每次打开终端时都能自动设置DDS实现。

    bash 复制代码
    echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> ~/.bashrc   # 不同 DDS实现
    source ~/.bashrc
  3. 可以使用命令查看RMW_IMPLEMENTATION环境变量的值。

    bash 复制代码
    echo $RMW_IMPLEMENTATION
  4. 可以使用指令诊断和检查ROS 2环境的状态。如果一切正常,你会看到 "All checks passed",以及当前正在使用的中间件实现(如 rmw_fastrtps_cpp)

    bash 复制代码
    ros2 doctor 
    ros2 doctor --report   # 使用选项 --report,来查看更详细的系统状态报告

小结

选择适当的DDS实现取决于你的应用需求、性能要求以及是否需要企业级支持。对于大多数开发者,Fast DDSCyclone DDS 是合适的选择,而RTI Connext DDSOpenSplice DDS 则适用于工业级或大规模分布式系统。一些其他的内容可以参考ROS 2官方文档

相关推荐
Urbano2 小时前
模板机选购全维度科普:不止做服装,扫地机器人拖布批量量产品牌选型指南
机器人
Agilex松灵机器人3 小时前
UMR × NAVIS:移动机器人行业级通用一体化底盘与3D导航解决方案
人工智能·3d·机器人·ros·slam·vla·松灵机器人
山东穆柯传感器5 小时前
雷达尺寸重量受限,车顶或机器人安装有小型化版本吗
机器人·雷达
白白白飘6 小时前
【9】Langchain实战案例:构建一个聊天机器人
microsoft·langchain·机器人
国科安芯7 小时前
空间在轨服务机器人通信链路中抗辐射收发器的应用研究
网络·数据库·算法·机器人·安全性测试
txg6668 小时前
机器人领域热点简报(2026-06-30 — 2026-07-07)
人工智能·搜索引擎·机器人
yonlin16 小时前
Telegram Rss Bot - RssStream 面向创作者和开发者的 Telegram 自动化机器人简介
机器人·telegram·电报
神经智研社19 小时前
ROS2--8章 机器人坐标系 tf2库
机器人·ros2·机器人环境搭建·ros2 jazzy·机器人坐标系系统
YMWM_20 小时前
企业级机器人数据平台开发
机器人·数据平台
某林2121 天前
从硬件解耦、3D公差设计到ROS 2柔性导航
人工智能·3d·机器人·ros2·技术复盘