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

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.kler.cn/a/466413.html

相关文章:

  • 小程序学习06——uniapp组件常规引入和easycom引入语法
  • Easticsearch介绍|实战?
  • Flask是什么?深入解析 Flask 的设计与应用实践
  • 【Unity3D】UGUI Canvas画布渲染流程
  • 基于单片机的数字电子秒表设计
  • Springboot 下载附件
  • 小信号处理
  • LeetCode -Hot100 - 438. 找到字符串中所有字母异位词
  • 前后端分离项目部署到云服务器、宝塔(前端vue、后端springboot)详细教程
  • Trimble天宝X9三维扫描仪为建筑外墙检测提供了全新的解决方案【沪敖3D】
  • 【运维工具】Ansible一款好用的自动化工具
  • MQ-导读
  • 显示视频DP、HDMI、DVI、VGA接口的区别
  • 九转算法蛊
  • linux nginx maccms管理后台无法进入页面不存在和验证码不显示的问题
  • 深入探究 CSRF 攻击:原理、危害与防范之道
  • 校园顺路代送微信小程序ssm+论文源码调试讲解
  • 接受Header使用错Map类型,导致获取到的Header值不全
  • 黑马Java面试教程_P10_设计模式
  • [每周一更]-(第130期):微服务-Go语言服务注册中心的中间件对比
  • Vue 项目中实现打印功能:基于目标 ID 的便捷打印方案
  • LeetCode 142:环形链表入口
  • qt的utc时间转本地时间
  • Java基本数据类型与字节数组的相互转换
  • JAVA复习题
  • 使用docker desktop提示 需要更新WSL