ROS2中间件

news2024/11/14 21:23:50

ROS2 是重新设计的 Robot Operating System,无论从用户API接口到底层实现都进行了改进。这里主要关注ROS2 的中间件。

1. 通信模式

ROS2 使用DDS协议进行数据传输,并通过抽象的rmw,支持多个厂家的DDS实现(FastDDS,Cyclone DDS 等)。

DDS 允许通过Qos 策略进行自定义通信行为。

ROS 支持的基本的Qos策略:

  1. 历史记录(History)
    1. 保留近期记录:仅仅保存最大N个样本数据,通过配置队列深度选项来指定最大数据限制。
    2. 保留所有记录:存储所有的样本数据,但受限于底层中间件的配置资源限制。
  2. 深度(Depth)
    1. 队列深度:仅仅当历史记录选择为"保留最近记录"时,配合指定最大数据限制。
  3. 可靠性(Reliability)
    1. 尽力的(Best effort):尝试传输样本,但如果网络不稳定可能会丢失数据。
    2. 可靠的(Reliable):保证样本的可靠传输,可能会尝试多次重传。
  4. 持续性(Durability)
    1. 局部瞬态(Transient local):发布者负责对晚到连接(late-joining)的订阅者保留样本数据。
    2. 易变态(Volatile):不尝试保留样本数据。

另外可以使用DDS厂商提供的方式(例如XML配置文件),进行更多的Qos配置。

DDS可以帮助ROS2 解决Robot Operating System 中的许多问题。

1)本地通信效率问题

进程间共享内存通信。相比于ROS1在本机内的进程间也使用TCP/UDP进行通信,理论上ROS2 具有更好的性能表现和更低的通信延迟。

需要注意的是,DDS在大于1M的数据传输方面性能表现不佳,需要一些额外的操作或技术进行优化。

PS: 进程内通信,有的DDS未实现,一般由ROS实现。ROS1 使用 Nodelet 实现,ROS2 通过 Composition 实现。

2)非理想网络的跨机通信问题

在可靠的网络环境下,标准解决方案是 TCP/IP,因为它在大多数操作系统中都进行了优化。但是TCP/IP 难以在无线通信中传递数据,因为网络中断会导致回退、重传和延迟等。ROS 1 建立在 TCP/IP 之上,并在这些情况下受到影响。

DDS是基于UDP的,没有这个问题。DDS 可以通过 QoS 来决定何时以及如何在不可靠的条件下重新传输,从而优化可用带宽和延迟。

3)rosmaster的单点问题

相比ROS1,ROS2 移除了中心节点rosmaster。使用 peer-to-peer discovery 的方式建立“连接”。

ROS2 的 底层中间件会自动进行 Discovery node。主要有以下几个流程:

  1. 当node 启动时,它向相同ROS domain下的其他node 进行广播,说明它已经上线。其他node收到这个广播会回复自己的相关信息,从而建立“连接”,并进行通信。
  2. node会定期的进行广播它的信息,这样即使它已经错过了最初的发现过程,它也可以和新上线的node进行"连接"。
  3. node 下线时,会广播其他节点自己要下线了。
4)安全性

ROS 2 不仅依赖于 DDS 安全标准,还提供了一套额外的工具 SROS2,以简化安全基础设施的管理

5)ReadTime 支持

为了满足安全和/或性能目标,系统的某些部分必须在确定的时间内执行。ROS 2为实时系统的开发人员提供 API,以强制执行特定于应用程序的约束

2. 架构设计

1)ROS 2提供了一种模式,用于管理通过状态机转换的节点的生命周期,这些节点的状态包括未配置、未激活、活动和最终完成等。这些状态允许系统集成商控制某些节点何时处于活动状态。这是协调分布式异步系统的各个部分的重要工具。

2)ROS 2的Node 可以利用Composition 动态配置它到任何进程。

3. 生态环境

1)更多的长期支持

ROS2 项目支持周期:

Humble        2022.5 - 2027.5

Foxy             2020.5 - 2023.5

ROS1 项目支持周期:

Noetic          2020.5 - 2025.5

Melodic        2018.5 - 2023.5

(备注:关于环宇能否支持 Xavier Jetpack 升级)

2)更多的硬件厂商开源支持:

Nvidia Isaac: High-performance computing for robotics built on ROS2  

NVIDIA Isaac ROS · GitHub

Nvidia ros2 开源工程:

https://github.com/orgs/NVIDIA-AI-IOT/repositories?language=&q=ros2&sort=&type=all

3)便于友商对接

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

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

相关文章

Django 执行原生SQL

在Django中,你可以使用Raw SQL queries来执行原生的SQL查询。这对于需要进行复杂查询或Django的ORM无法满足的查询非常有用。 1,添加模型 Test/app11/models.py from django.db import modelsclass Post(models.Model):title models.CharField(max_le…

arthas:介绍

文章目录 一、Arthas(阿尔萨斯)能为你做什么?二、运行环境要求三、快速安装四、卸载五、通过浏览器连接arthas 一、Arthas(阿尔萨斯)能为你做什么? Arthas是Alibaba开源的Java诊断工具,深受开发…

buu--web做题(4)

目录 [BJDCTF2020]ZJCTF&#xff0c;不过如此 [BUUCTF 2018]Online Tool [BJDCTF2020]ZJCTF&#xff0c;不过如此 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)&q…

vue3运行若依前后台项目步骤(2024-07-19)

环境配置 1、jdk > 1.8 (我的1.8&#xff09; 2、mysql >5.7 (我的5.8&#xff09; 3、navicat (数据库管理器&#xff0c;连接mysql使用 ,我的是15) 4、mysql&#xff08;数据库&#xff0c;我的5.0&#xff09; 4、npm (我的是18.20.0) 5、idea编辑器,webtorm &#x…

Unity UGUI 之 Graphic Raycaster

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 首先手册连接如下&#xff1a; Unity - Manual: Graphic Raycaster 笔记来源于&#xff…

Mike Ferguson:我在麻省理工学院人工智能研究实验室工作一年学到了 5 件事

Mike Ferguson &#xff0c;麻省理工学院大脑和认知科学系 (MIT BCS) 担任研究软件工程师 / ML 工程师。专门研究 Brain-Score&#xff08;一种衡量类脑 AI 的工具&#xff09;。他于 2021 年春季毕业于弗吉尼亚大学&#xff0c;获得计算机科学和应用数学学士学位&#xff0c;以…

【数字电路学习新助手】掌握电路仿真软件,开启数字电路知识的新篇章

在信息科技日新月异的今天&#xff0c;数字电路知识的重要性不言而喻。无论是通信工程、计算机科学与技术&#xff0c;还是电子信息技术等领域&#xff0c;数字电路都是基础中的基础。然而&#xff0c;对于初学者来说&#xff0c;数字电路的学习往往充满了挑战。幸运的是&#…

JUC 06 锁 开始

01.volatile 02.synchronized 03.lock

深入分析 Android ContentProvider (一)

文章目录 深入分析 Android ContentProvider (一)1. Android 中的 ContentProvider 设计说明1.1. ContentProvider 的设计初衷1.2. ContentProvider 的基本结构1.3. ContentProvider 的实现示例&#xff1a;实现一个简单的 ContentProvider 1.4. ContentProvider 的使用 2. Con…

小柴带你学AutoSar系列三、标准和规范篇(1)General

flechazo 小柴冲刺嵌入式系统设计师系列总目录 小柴带你学AutoSar总目录 缘起 一个小小的介绍啦&#xff0c;逐字逐句读规范。&#x1f61c; 不求能记住多少❤️ 只是希望将知识串起来&#xff0c;用到的时候能快速找到就好啦&#xff01; 一起学习AUTOSAR的规范吧 下面呢…

matlab中plot的一些用法

文章目录 一、基本用法二、绘制多个数据集三、设置线型、颜色四、添加标题和标签五、添加图例六、设置轴范围七、绘制网格八、 在同一图中绘制多个子图九、绘制带误差条的图十、绘制半对数图和对数图十一、绘制填充区域图十二、综合案例 一、基本用法 x 0:0.1:10; y sin(x);…

主流大数据调度工具DolphinScheduler之数据采集

今天继续给大家分享主流大数据调度工具DolphinScheduler&#xff0c;以及数据的ETL流程。 一&#xff1a;调度工具DS 主流大数据调度工具DolphinScheduler&#xff0c; 其定位&#xff1a;解决数据处理流程中错综复杂的依赖关系 任务支持类型&#xff1a;支持传统的shell任…

甲骨文闲置ARM实例防回收的方法

前几日挖了个大坑&#xff0c;今天补一下&#xff0c;谈谈甲骨文闲置实例如何防止回收。 回收原则 2022年11月16日 Oracle添加声明&#xff1a; 从 2022 年 11 月 24 日开始&#xff0c;您闲置的 Always Free 计算实例可能会停止。巴拉巴拉&#xff0c;您还可以随时升级您的帐…

Java数据结构(三)——顺序表

文章目录 顺序表前置知识ArrayList的构造ArrayList的常用方法ArrayList的遍历ArrayList的扩容机制ArrayList的模拟实现ArrayList的相关练习 顺序表 前置知识 顺序表是线性表的一种&#xff08;底层是数组&#xff09;&#xff0c;另一种是链表&#xff0c;说到线性表&#xf…

Three.JS飞入定位模型的位置。

源码 flyTo(object, gltfthis) {if (object undefined || object null) {return;}const box3 new THREE.Box3();box3.expandByObject(object); // 计算模型包围盒const size new THREE.Vector3();box3.getSize(size); // 计算包围盒尺寸const center new THREE.Vector3();…

【stm32项目】基于stm32智能宠物喂养(完整工程资料源码)

基于STM32宠物喂养系统 前言&#xff1a; 随着人们生活幸福指数的提高&#xff0c;越来越多的家庭选择养宠物来为生活增添乐趣。然而&#xff0c;由于工作等原因&#xff0c;许多主人无法及时为宠物提供充足的食物与水。为了解决这一问题&#xff0c;我设计了一款便捷的宠物喂…

如何搭建一个RADIUS服务器?

1. 系统环境 1.1.操作系统 Ubuntu-20.04.1 &#xff08;kernel: 5.15.0-58-generic&#xff09; 1.2.所需软件 FreeRADIUS MariaDB 1.3.注意事项 本文提到的所有操作&#xff0c;都是以root 身份执行&#xff1b; 2. FreeRADIUS的安装 2.1. 安装FreeRADIUS服务器程序 以…

fMATLAB中fill函数填充不同区域

只需获取填充区域的边缘信息&#xff0c;函数边缘越详细越好&#xff0c;然后调用fill函数。 fill函数能够根据指定的顶点坐标和填充颜色来绘制多边形或曲线形状&#xff0c;并在其内部填充指定的颜色。这使得在MATLAB中创建具有视觉吸引力的图形变得简单而高效。 fill函数的…

TCP滑动窗口和流量控制详解

1. 什么是滑动窗口 TCP 每发送⼀个数据&#xff0c;都需要⼀次应答&#xff0c;然后继续发送&#xff0c;这样为每个数据包都进⾏确认应答&#xff0c;缺点是&#xff1a;数据往返时间越⻓&#xff0c;⽹络吞吐量越低。为了解决这个问题&#xff0c;TCP 引⼊了 窗⼝ 这个概念。…

MISRA C2012学习笔记(7)-Rules 8.12

文章目录 8.12 表达式(Expressions)Rule 12.1 表达式中运算符的优先级应明确Rule 12.2 移位运算符的右操作数应在零到比左操作数基本类型的位宽度小一的范围内Rule 12.3 不得使用逗号(,)运算符Rule 12.4 常量表达式的求值不应导致无符号整数的回绕 8.12 表达式(Expressions) R…