当前位置: 首页 > 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官方文档。

相关文章:

ROS 2中的DDS中间件

文章目录 一、简介二、默认支持的 DDS (Data Distribution Service) 实现三、切换DDS实现小结 一、简介 中间件是一个软件层&#xff0c;通常用于连接不同的应用程序、服务或系统&#xff0c;以便它们能够相互通信和交换数据。中间件并不直接向用户暴露&#xff0c;而是在系统…...

「下载」智慧文旅运营综合平台解决方案:整体架构,核心功能设计

智慧文旅运营综合平台&#xff0c;旨在通过集成大数据、云计算、物联网、人工智能等先进技术&#xff0c;为景区、旅游企业及相关管理机构提供一站式的智慧化运营服务。 智慧文旅运营综合平台不仅能够提升游客的游览体验&#xff0c;还能帮助景区管理者实现资源的优化配置和业务…...

NVR小程序接入平台EasyNVR使用FFmpeg取流时提示错误是什么原因呢?

在视频监控系统中&#xff0c;FFmpeg常用于从各种源&#xff08;如摄像头、文件、网络流等&#xff09;获取流媒体数据&#xff0c;这个过程通常称为“取流”。 在EasyNVR平台中&#xff0c;使用FFmpeg取流是一种常见的操作。FFmpeg作为一款强大的开源多媒体处理工具&#xff…...

计算机因进程结束导致白屏

问题场景&#xff1a; 计算机卡顿利用&#xff08;右击计算机桌面底部任务栏->打开任务管理器->结束任务->或进程被意外结束导致白屏&#xff09; 问题描述 白屏 原因分析&#xff1a; 在结束进程时&#xff0c;导致 文件资源管理器 进程崩溃。 解决方案&#xf…...

OpenGL入门最后一章观察矩阵(照相机)

前面的一篇文章笔者向大家介绍了模型变化矩阵&#xff0c;投影矩阵。现在只剩下最后一个观察矩阵没有和大家讲了。此片文章就为大家介绍OpenGL入门篇的最后一个内容。 观察矩阵 前面的篇章当中&#xff0c;我们看到了即使没有观察矩阵&#xff0c;我们也能对绘制出来的模型有一…...

ES6中定义私有属性详解

在ES6中&#xff0c;定义私有属性的方式相对传统的JavaScript有所不同。ES6并没有提供直接的语法来定义私有属性&#xff0c;但可以通过几种方法间接实现私有属性。 1. 使用Symbol来模拟私有属性 Symbol是一种新的数据类型&#xff0c;可以作为对象的键&#xff0c;并且它的值…...

工业5G路由器让无人机数据传输 “飞” 起来

无人机上搭载5G通信模块&#xff0c;该模块与工业5G路由器通过5G网络建立连接。无人机的飞控系统、传感器以及摄像头等设备采集到的数据&#xff0c;如飞行姿态、高度、速度、环境图像、温度湿度等&#xff0c;经过编码、加密、调制等处理后转换为适合5G网络传输的信号形式。 …...

面试经典150题——滑动窗口

文章目录 1、长度最小的子数组1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、无重复字符的最长子串2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、串联所有单词的子串3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、最小覆盖子串4.1 题目链接4.2 题目描…...

MiFlash 线刷工具下载合集

MiFlash 线刷工具下载合集 MiFlash 线刷工具下载合集 – MIUI历史版本相较于小米助手的刷机功能&#xff0c;线刷还是偏好使用 MiFlash。特点是界面简单纯粹&#xff0c;有自定义高级选项&#xff0c;可以选择刷机不上 BL 锁&#xff0c;自定义刷机脚本&#xff0c;EDL 刷机模…...

【MySQL高级】第1-4章

第1章 存储过程 1.1 什么是存储过程&#xff1f; 存储过程可称为过程化SQL语言&#xff0c;是在普通SQL语句的基础上增加了编程语言的特点&#xff0c;把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中&#xff0c;通过逻辑判断、循环等操作实现复杂计算的程序语言。 换…...

课程设计项目之基于Python实现围棋游戏代码

项目介绍 游戏进去默认为九路玩法&#xff0c;当然也可以选择十三路或是十九路玩法 使用pycharam打开项目&#xff0c;pip安装模块并引用&#xff0c;然后运行即可&#xff0c; 代码每行都有详细的注释&#xff0c;可以做课程设计或者毕业设计项目参考 效果预览 源码下载 h…...

uni-app tab 双击事件监听

1、data中定义属性&#xff0c;用于临时记录点击次数 tabClick: {touchNum: 0 },2、添加页面事件监听方法 onTabItemTap(e) {this.tabClick.touchNumsetTimeout(()>{if(this.tabClick.touchNum > 2){// 双击执行代码区}this.tabClick.touchNum 0}, 250) },个人博客&am…...

如何在Maxscript脚本中检查磁盘可用空间?

在我们实际工作中&#xff0c;有时需要在工作开始之前检查磁盘的可用空间&#xff0c;比如渲染。 当然&#xff0c;我们可以人工很容易查看电脑中各个磁盘的空间使用情况&#xff0c;但是&#xff0c;如果是Maxscript插件完成的工作&#xff0c;那么如何才能实现其工作之前对磁…...

pytorch梯度上下文管理器介绍

PyTorch 提供了多种梯度上下文管理器&#xff0c;用于控制自动梯度计算 (autograd) 的行为。这些管理器在训练、推理和特殊需求场景中非常有用&#xff0c;可以通过显式地启用或禁用梯度计算&#xff0c;优化性能和内存使用。 主要梯度上下文管理器 torch.no_grad(): 功能&am…...

Redis Stream:实时数据处理的高效解决方案

Redis Stream&#xff1a;实时数据处理的高效解决方案 引言 在当今这个数据驱动的时代&#xff0c;实时数据处理对于各种应用场景都至关重要。Redis&#xff0c;作为一个高性能的键值存储系统&#xff0c;自然也紧跟这一趋势&#xff0c;推出了Redis Stream——一种用于处理实…...

使用交换机构建简单局域网

创建交换机SW-1 交换机接口规划 序号交换机名接口连接设备接口类型1SW-1Ethernet 0/0/1Host-1默认2SW-1Ethernet 0/0/2Host-2默认3SW-1Ethernet 0/0/5Host-3默认4SW-1Ethernet 0/0/6Host-4默认 主机IP规划 Host-1&#xff1a;192.168.64.11/24&#xff0c;接入SW-1 Ethernet…...

基于MATLAB的冰箱水果保鲜识别系统

摘要&#xff1a;本作品旨在研究和实现基于MATLAB软件的冰箱水果保鲜识别系统&#xff0c;针对多种常见水果混合的图像进行处理和识别。首先&#xff0c;根据水果与背景的差异选择合适的阈值&#xff0c;对图像进行去噪和对比度增强&#xff0c;然后进行二值化处理。接下来&…...

Flink源码解析之:Flink On Yarn模式任务提交部署过程解析

Flink源码解析之&#xff1a;Flink On Yarn模式任务提交部署过程解析 一、Flink on Yarn部署模式概述 Apache Hadoop YARN 在许多数据处理框架中都很流行。 Flink 服务提交给 YARN 的 ResourceManager&#xff0c;后者会在 YARN NodeManagers 管理的机器上生成容器。 Flink 将…...

吊舱激光测距核心技术详解!

一、核心技术 吊舱激光测距的核心技术主要体现在激光发射与接收、信号处理与距离计算、以及数据校正与优化等方面。 激光发射与接收&#xff1a; 激光发射器&#xff1a;产生经过调制的激光束&#xff0c;该激光束具有特定的频率和波形。这些激光束被投射到目标物体上。 光…...

[ZJCTF 2019]NiZhuanSiWei

检查通过 file_get_contents 函数读取 $text 变量指定的文件内容是否等于字符串 "welcome to the zjctf"。 测试了一下直接传参&#xff0c;然后进入下一阶段&#xff0c;通过php伪协议读取useless.php发现不行&#xff0c;我们使用data协议将其输入进去试试 读取到…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...