当前位置: 首页 > news >正文

ROS 2中的DDS中间件

文章目录

  • 一、简介
  • 二、默认支持的 DDS (Data Distribution Service) 实现
  • 三、切换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实现,性能较好,并且能够满足许多实时系统的要求。

    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提供了更多的调试信息且非常轻量。

    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的商业支持提供,通常需要许可证和支持合同才能使用完整的功能,不然会以试用版的形式支持并具有一些限制,特别注意!!!

    sudo apt install ros-<ros2-distro>-rmw-connextdds
    

    dds协议

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

    sudo apt install ros-<ros2-distro>-rmw-opensplice
    

    无法定位

三、切换DDS实现

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

    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实现。

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

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

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

    状态查看

小结

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

http://www.lryc.cn/news/513350.html

相关文章:

  • 「下载」智慧文旅运营综合平台解决方案:整体架构,核心功能设计
  • NVR小程序接入平台EasyNVR使用FFmpeg取流时提示错误是什么原因呢?
  • 计算机因进程结束导致白屏
  • OpenGL入门最后一章观察矩阵(照相机)
  • ES6中定义私有属性详解
  • 工业5G路由器让无人机数据传输 “飞” 起来
  • 面试经典150题——滑动窗口
  • MiFlash 线刷工具下载合集
  • 【MySQL高级】第1-4章
  • 课程设计项目之基于Python实现围棋游戏代码
  • uni-app tab 双击事件监听
  • 如何在Maxscript脚本中检查磁盘可用空间?
  • pytorch梯度上下文管理器介绍
  • Redis Stream:实时数据处理的高效解决方案
  • 使用交换机构建简单局域网
  • 基于MATLAB的冰箱水果保鲜识别系统
  • Flink源码解析之:Flink On Yarn模式任务提交部署过程解析
  • 吊舱激光测距核心技术详解!
  • [ZJCTF 2019]NiZhuanSiWei
  • Kafka配置公网或NLB访问(TCP代理)
  • 大模型推理:vllm多机多卡分布式本地部署
  • clickhouse-backup配置及使用(Linux)
  • 【YashanDB知识库】启动yasom时报错:sqlite connection error
  • JAVA学习笔记_Redis进阶
  • LabVIEW手部运动机能实验系统
  • SpringBoot的注解@SpringBootApplication及自动装配
  • STM32学习之EXTI外部中断(以对外式红外传感器 / 旋转编码器为例)
  • 数字赋能:制造企业如何靠“数字能力”实现可持续“超车”?
  • .NET在中国的就业前景:开源与跨平台带来的新机遇
  • 【基础篇】一、MySQL数据库基础知识