【ROS2】概念:中级-不同的 ROS 2 中间件供应商

目录

  • 支持的 RMW 实现

  • 多种 RMW 实现

  • 默认 RMW 实现

ROS 2 构建在 DDS/RTPS 之上,作为其中间件,提供发现、序列化和传输。本文( https://design.ros2.org/articles/ros_on_dds.html )详细解释了使用 DDS 实现和/或 DDS 的 RTPS 有线协议的动机。总之,DDS 是一种端到端的中间件,提供与 ROS 系统相关的功能,例如分布式发现(不像 ROS 1 那样集中)和对不同“服务质量”选项的控制。

DDS 是一种行业标准,由一系列供应商实施,例如 RTI 的 Connext DDS、eProsima 的 Fast DDS、Eclipse 的 Cyclone DDS 或 GurumNetworks 的 GurumDDS。RTPS(又名 DDSI-RTPS)是 DDS 用于通过网络通信的有线协议。

ROS 2 支持多种 DDS/RTPS 实现,因为在选择供应商/实现时,不一定是“一刀切”。在选择中间件实现时,您可能会考虑许多因素:如许可证等后勤考虑,或平台可用性等技术考虑,或计算占用。供应商可能会提供不止一个 DDS 或 RTPS 实现,以满足不同的需求。例如,RTI 有几个不同用途的 Connext 实现变体,如一个专门针对微控制器,另一个针对需要特殊安全认证的应用程序(我们目前仅支持其标准桌面版本)。

为了在 ROS 2 中使用 DDS/RTPS 实现,需要创建一个“ROS 中间件接口”(也称为 rmw 接口或 rmw )包,该包使用 DDS 或 RTPS 实现的 API 和工具实现抽象的 ROS 中间件接口。实现和维护支持 DDS 实现的 RMW 包需要大量工作,但支持至少几个实现对于确保 ROS 2 代码库不依赖于任何特定实现非常重要,因为用户可能希望根据项目需求更换实现。

支持的 RMW 实现 

961bae53eaa94fe1ab0fc7be3a01615c.png

 产品名称 许可证 RMW 实现 状态
eProsima Fast DDSApache 2 阿帕奇 2rmw_fastrtps_cpp完全支持。默认 RMW。与二进制版本一起打包。
Eclipse Cyclone DDSEclipse 公共许可证 v2.0rmw_cyclonedds_cpp完全支持。随二进制版本一起打包。
RTI Connext DDS 商业, 研究commercial, researchrmw_connextdds完全支持。支持包含在二进制文件中,但 Connext 单独安装。
GurumNetworks GurumDDS 商业commercialrmw_gurumdds_cpp社区支持。支持包含在二进制文件中,但 GurumDDS 单独安装。

有关使用多个 RMW 实现的实用信息,请参阅“使用多个 RMW 实现”教程。https://docs.ros.org/en/jazzy/How-To-Guides/Working-with-multiple-RMW-implementations.html

多种 RMW 实现

ROS 2 的二进制发行版对当前活跃的发行版提供了开箱即用的多个 RMW 实现支持(Fast DDS、RTI Connext Pro、Eclipse Cyclone DDS、GurumNetworks GurumDDS)。默认是 Fast DDS,因为我们将其与我们的二进制包一起分发,所以无需任何额外的安装步骤。

其他 RMWs 如 Cyclone DDS、Connext 或 GurumDDS 可以通过安装额外的软件包来启用,但无需重建任何东西或替换任何现有的软件包。

从源代码构建的 ROS 2 工作区可以同时构建和安装多个 RMW 实现。在编译核心 ROS 2 代码时,如果找到任何 RMW 实现,并且相关的 DDS/RTPS 实现已正确安装并配置了相关的环境变量,则将构建该 RMW 实现。例如,如果工作区中有 RTI Connext DDS 的 RMW 包代码https://github.com/ros2/rmw_connextdds ,并且还找到了 RTI 的 Connext Pro 安装,则将构建该代码。

在许多情况下,您会发现使用不同 RMW 实现的节点能够进行通信,但这并不适用于所有情况。以下是不支持的跨供应商通信配置列表:

  • Fast DDS <-> Connext

    • 由 Fast DDS 发布的 WString 无法在 macOS 上被 Connext 正确接收

  • Connext <-> Cyclone DDS

    • 不支持 WString 的发布/订阅通信

默认 RMW 实现 

如果一个 ROS 2 工作区有多个 RMW 实现,并且 Fast DDS 可用,则选择 Fast DDS 作为默认的 RMW 实现。如果未安装 Fast DDS RMW 实现,则将使用按字母顺序排列的第一个 RMW 实现标识符的 RMW 实现。实现标识符是提供 RMW 实现的 ROS 包的名称,例如 rmw_cyclonedds_cpp 。例如,如果同时安装了 rmw_cyclonedds_cpp 和 rmw_connextdds ROS 包,则 rmw_connextdds 将是默认值。如果安装了 rmw_fastrtps_cpp ,它将是默认值。

请参阅指南,了解在运行 ROS 2 示例时如何指定要使用的 RMW 实现。

附录

 基于 DDS 的 ROS

本文写于决定使用 DDS 和 RTPS 作为 ROS 2 的基础通信标准之前。有关 ROS 2 如何实现的详细信息,请参见核心文档。

c9eb67317eeec93acc3e2d72aa230f34.png

76d3a8cf3b371c6907063ea12a4ea289.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux驱动开发——字符设备驱动开发

1 概述 1.1 说明 本文是学习rk3568开发板驱动开发的记录&#xff0c;代码依托于rk3568开发板 1.2 字符设备介绍 字符设备是 Linux 驱动中最基本的一类设备驱动&#xff0c;字符设备就是一个一个字节&#xff0c;按照字节流进行读写操作的设备&#xff0c;读写数据是分先后顺…

用 Manim 库来生成一个树形结构的动画

完整代码&#xff1a; from manim import * class LargeTreeGeneration01(MovingCameraScene): DEPTH 3 CHILDREN_PER_VERTEX 2 LAYOUT_CONFIG {"vertex_spacing": (0.8, 1)} VERTEX_CONF {"radius": 0.12, "color": BLUE_B, "fi…

java基础概念05-运算符

一、自增自减运算符 二、赋值运算符 2-1、注意 三、关系运算符 四、逻辑运算符 4-1、短路逻辑运算符 五、三元运算符 六、运算符的优先级

Catalyst优化器:让你的Spark SQL查询提速10倍

目录 1 逻辑优化阶段 2.1 逻辑计划解析 2.2 逻辑计划优化 2.2.1 Catalys的优化过程 2.2.2 Cache Manager优化 2 物理优化阶段 2.1 优化 Spark Plan 2.1.1 Catalyst 的 Join 策略 2.1.2 如何决定选择哪一种 Join 策略 2.2 Physical Plan 2.2.1 EnsureRequirements 规则 3 相关文…

Linux基本用法(上)

1.计算机主要由 硬件和软件 组成 2.操作系统是什么 ? 有什么作用&#xff1f; 操作系统是软件的一类 主要作用是协助用户调度硬件工作&#xff0c;充当用户和计算机之间的桥梁 3.常见的操作系统有哪些? PC端: Windows&#xff0c;Linux,MacOS 移动端: Android&#xff…

搭建cool-admin-java(前端vue)项目

为什么选择 Cool Admin&#xff1f;​ 随着技术不断地发展&#xff0c;特别是最近 Ai 相关的技术发展&#xff0c;以往的框架已经越来越不能满足现代化的开发需求。 Cool Admin 做为后来者有后发优势&#xff0c;主要特点&#xff1a; Ai 编码&#xff0c;从页面到后端代码&…

数据库实验:SQL Server创建数据库及基本表

一、实验目的&#xff1a; 1、掌握使用SQL SERVER Management Studio工具连接数据库引擎&#xff1b; 2、掌握使用CREATE TABLE 创建基本表的用法&#xff1b; 3、掌握使用ALTER TABLE 修改基本表的用法&#xff1b; 4、掌握使用DROP TABLE删除基本表的用法&#xff1b; 二…

姜夔,师法自然的不仕道人

姜夔&#xff08;ku&#xff09;&#xff0c;字尧章&#xff0c;号白石道人&#xff0c;约生于南宋绍兴二十四年&#xff08;公元1154年&#xff09;&#xff0c;卒于南宋嘉定十四年&#xff08;公元1221年&#xff09;&#xff0c;享年67岁。他的艺术成就涵盖了诗词、散文、书…

Rpi Zero W做的老头乐声控灯

祭图__|\0>历经各种尝试&#xff0c;最后选了docker 里装个rhasspy&#xff0c;配上paho-mqtt搞出了这个奇葩夜灯。各种曲折就不说了&#xff0c;直接分享捷径思路。 这个绿板子是respeaker hat with 2 mic 用的是seeed-voicecard&#xff0c;跟着github编译&#xff0c;不…

微信小程序开发(百货商战)实战项目的购物车和个人中心的创建

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

玩转usbserver之usbserver日志报警

一、graylog 介绍 graylog是一个简单易用、功能较全面的日志管理工具&#xff0c;graylog也采用Elasticsearch作为存储和索引以保障性能&#xff0c;MongoDB用来存储少量的自身配置信息&#xff0c;master-node模式具有很好的扩展性&#xff0c;UI上自带的基础查询与分析功能比…

JAVAWeb实战(后端篇)

因为前后端代码内容过多&#xff0c;这篇只写后端的代码&#xff0c;前端的在另一篇写 项目实战一&#xff1a; 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表&#xff0c;并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…

向日葵RCE复现(CNVD-2022-10270/CNVD-2022-03672)

一、环境 1.1 网上下载低版本的向日葵<2022 二、开始复现 2.1 在目标主机上打开旧版向日葵 2.2 首先打开nmap扫描向日葵主机端口 2.3 在浏览器中访问ip端口号cgi-bin/rpc?actionverify-haras &#xff08;端口号&#xff1a;每一个都尝试&#xff0c;直到获取到session值…

动手学深度学习V2每日笔记(权重衰退+Dropout)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1UK4y1o7dy/vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&#xff0c;内容不会特别严谨仅供参考。 1.函数目录…

科普文:万字详解Kafka基本原理和应用

一、Kafka 简介 1. 消息引擎系统ABC Apache Kafka是一款开源的消息引擎系统&#xff0c;也是一个分布式流处理平台。除此之外&#xff0c;Kafka还能够被用作分布式存储系统&#xff08;极少&#xff09;。 A. 常见的两种消息引擎系统传输协议&#xff08;即用什么方式把消息…

【机器学习】探索图神经网络 (GNNs): 揭秘图结构数据处理的未来

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ ​ &#x1f48e;1. 引言 图结构数据在现实世界中无处不在&#xff0c;从社交网络中的用户关系&#xff0c;到推荐系统中的用户-物品交互&#xff0c;再到生物信息学中的分子结构。传统的机器学习模型在处理这些数据时常常力…

【Unity插件】Editor Console Pro:提升开发效率的神器

在 Unity 开发过程中&#xff0c;控制台&#xff08;Console&#xff09;是我们排查错误、获取信息的重要窗口。而 Editor Console Pro 则是 Unity 编辑器控制台的强大替代品&#xff0c;为 Unity 的控制台带来了更多实用的功能和改进&#xff0c;极大地提升了开发效率。 一、…

力扣刷题----42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#xf…

TCP程序设计

TCP概述 建立连接 客户端和服务器端在建立连接时&#xff1a; 服务端是典型的监听接受连接的模式&#xff0c;就是ListenAccept 客户端是主动建立连接的模式&#xff0c;就是Dial Go语言中使用 net包实现网络的相关操作&#xff0c;包括我们TCP的操作。 用于建立连接的典型…

【JavaEE】阻塞队列

目录 一.阻塞队列(Blocking Queue) 1.什么是阻塞队列 2.特性 二.生产者消费者模型 1.什么是生产者消费者模型&#xff1f; 2.生产者消费模型的好处 2.1解耦合 2.2削峰填谷 三.如何在java中使用阻塞队列 四.模拟实现阻塞队列 1.加锁 2.阻塞等待实现 3.解决interru…