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

相关推荐
遨博学院3 小时前
机器人编程界面
机器人
曹勖之19 小时前
在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标
ue5·机器人
曹勖之19 小时前
UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误
matlab·ue5·机器人
曹勖之21 小时前
撰写脚本,通过发布/joint_states话题改变机器人在Rviz中的关节角度
开发语言·python·机器人·ros2
奔跑吧邓邓子1 天前
DeepSeek 赋能智能养老:情感陪伴机器人的温暖革新
人工智能·机器人·deepseek·智能养老·情感陪伴
安全系统学习1 天前
网络安全逆向分析之rust逆向技巧
前端·算法·安全·web安全·网络安全·中间件
VR最前沿1 天前
全新Xsens Animate版本是迄今为止最大的软件升级,提供更清晰的数据、快捷的工作流程以及从录制开始就更直观的体验
人工智能·科技·机器人·自动化
CHOTEST中图仪器1 天前
激光干涉仪:解锁协作机器人DD马达的精度密码
机器人·激光干涉仪
Tisfy1 天前
LeetCode 2434.使用机器人打印字典序最小的字符串:贪心(栈)——清晰题解
leetcode·机器人·字符串·题解·贪心·
敢敢のwings1 天前
论文速读《DexWild:野外机器人策略的灵巧人机交互》
机器人·人机交互