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官方文档

相关推荐
鸿蒙布道师2 小时前
宇树科技安全漏洞揭示智能机器人行业隐忧
运维·网络·科技·安全·机器学习·计算机视觉·机器人
陈苏同学3 小时前
MPC控制器从入门到进阶(小车动态避障变道仿真 - Python)
人工智能·python·机器学习·数学建模·机器人·自动驾驶
Robot2517 小时前
「华为」人形机器人赛道投资首秀!
大数据·人工智能·科技·microsoft·华为·机器人
放羊郎14 小时前
具身智能机器人开源陪跑计划(机器人实战落地)
机器人·开源·具身智能·项目陪跑·从零开发
martian66515 小时前
信创生态核心技术栈:数据库与中间件
开发语言·中间件·系统架构·系统安全·创业创新
机器人之树小风16 小时前
KUKA机器人安装包选项KUKA.PLC mxAutomation软件
经验分享·科技·机器人
强化学习与机器人控制仿真20 小时前
openpi 入门教程
开发语言·人工智能·python·深度学习·神经网络·机器人·自动驾驶
神奇侠202421 小时前
快速开发-基于gin的中间件web项目开发
中间件·gin
猫头虎1 天前
5G-A来了!5G信号多个A带来哪些改变?
5g·机器人·web3·aigc·社交电子·能源·量子计算
一颗小树x1 天前
【机器人】复现 UniGoal 具身导航 | 通用零样本目标导航 CVPR 2025
机器人·具身导航·unigoal