ROS2中间件

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.mzph.cn/diannao/47969.shtml

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

相关文章

Python 和 R两者的主要区别和优缺点对比

有个问题,既然做模型调的还是python,那为啥很多人还用R呢? 这是一个很好的问题。Python 和 R 都是数据科学和统计分析领域中非常流行的编程语言,它们各有优缺点,选择哪种语言通常取决于具体的任务需求、个人或团队的技…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路: 找到链表的中间节点,然后逆置链表的后半部分,再一一遍历链表的前半部分和后半部分,判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…

Java 如何实现单点登录案例详解

单点登录(SSO)是一种用户身份验证机制,允许用户在多个系统或应用程序中使用同一组登录凭据。从业务需求的角度来看,单点登录具有以下优势和必要性: 从业务需求的角度来看,单点登录具有以下优势和必要性&am…

梧桐数据库:数据库技术中表的统计信息技术详解

在数据库技术中,表的统计信息主要用于查询优化等方面,以下是对其的详细解释: 作用: 帮助查询优化器做出更合理的执行计划决策,以提高查询性能。 常见的统计信息类型: 行数(Row count&#xf…

Transformer是怎样处理序列数据的?

Transformer模型最初是一种广泛应用于自然语言处理(NLP)和其他序列建模任务的架构。它由编码器(encoder)和解码器(decoder)组成。 以下是Transformer模型输入和输出的详细介绍: 输入 1. 输入…

Pandas库学习之dataframe.corr()函数

Pandas库学习之dataframe.corr()函数 一、简介 dataframe.corr()是Pandas库中的一个函数,用于计算DataFrame中各列之间的相关系数。相关系数衡量的是两个变量之间线性关系的强度和方向,结果在-1到1之间,分别表示完全负相关和完全正相关。 二…

前端代码审查大纲

一、代码审查的目的 提升代码质量:代码审查可以发现代码中的错误、漏洞、不符合规范的地方,从而及时进行修正。这有助于提升代码的稳定性和可靠性,减少运行时出现的问题。 统一编码标准和风格:代码审查可以确保团队成员遵循统一的…

Maven学习——Maven的下载、安装与配置(详细攻略!)

目录 前言 1.下载与安装 2.配置Maven的环境变量 3.配置Maven的本地仓库 4. 配置Maven的镜像远程仓库 前言 我在之前写了一篇博客,是介绍Maven的基本概念和下载安装,但是由于篇幅过长,Maven的下载与安装写的并不详细🐶&#x…

TCP三次握手与四次挥手详解

1.什么是TCP TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,属于互联网协议族(TCP/IP)的一部分。TCP 提供可靠的、顺序的、无差错的数据传输服务&…

TeamViewer手机端APP提示:请先验证账户

当你在手机端下载安装了TeamViewerAPP后,需要你先登录个人账号,然后还会要求你验证账户,同时跳转到一个网址中,但是这个网址并没有自动跳转到验证账户的位置。 解决办法: 在手机浏览器中进入下面这个网址:…

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…

分布式搜索引擎ES-elasticsearch入门

1.分布式搜索引擎:luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎:数据源:数据库或者爬虫资源 分布式存储与搜索:多个节点组成的服务,提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…

算法基础之回溯法

本文将详细介绍回溯法的基本原理和适用条件,并通过经典例题辅助读者理解回溯法的思想、掌握回溯法的使用。本文给出的例题包括:N皇后问题、子集和问题。 算法原理 在问题的解空间树中,回溯法按照深度优先的搜索策略,从根结点出发…

IP溯源工具--IPTraceabilityTool

工具地址:xingyunsec/IPTraceabilityTool: 蓝队值守利器-IP溯源工具 (github.com) 工具介绍: 在攻防演练期间,对于值守人员,某些客户要求对攻击IP都进行分析溯源,发现攻击IP的时候,需要针对攻击IP进行分析…

Hive理论讲解

Hive介绍 1、Hive本质 Hive本质是【数仓设计方案】,hive本身并不存储数据【数据包含:元数据 (表)数据】。 2、hql和sql对比 sql 结构化查询语言【structured query language】hql hive/hadoop类sql查询语言【hive/hadoop query language like sql…

Python学习笔记40:游戏篇之外星人入侵(一)

前言 入门知识已经学完,常用标准库也了解了,pygame入门知识也学了,那么开始尝试小游戏的开发。 当然这个小游戏属于比较简单的小游戏,复杂的游戏需要长时间的编写累计开发经验,同时也需要一定的时间才能编写出来。现在的话还是嫩…

2024年7月16日(使用光盘创建本地仓库,引入网络镜像仓库,创建自建仓库)

了解yum源安装包的特点 了解常用的网络yum源 掌握本地和网络yum源的配置 能够使用yum工具安装软件包 rpm -ivh xxx 手动添加依赖 yum不止执行安装,会自动处理依赖安装 1、yum优点 rpm安装 (下载软件 单独安装 需要解决依赖关系) 源码安装 &am…

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要-大舍传媒

海外媒体发稿-瑞典SEO破茧成蝶:从0到10的实战精要 一、迷茫与意义的探寻 有一天我找了王老师聊天,谈到生活迷茫和人生的意义。老师说了一段话:当全情投入于一件事情时,是没有时间去迷茫或思索人生意义的。我感触很深,当总感到迷…

linux服务器配置conda环境安装教程

1 软件准备 1.1 软件下载 https://repo.anaconda.com/archive/index.html 根据官网选择自己需要的版本。 这里下载的是 Anaconda3-2023.03-1-Linux-x86_64.sh 或者直接在linux中输入 wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh 1.…

操作系统内核源码杂谈篇:临界区

临界资源,是指同一时刻只能由一个线程(linux下为进程)访问的资源,而临界区就是为了确保临界资源访问是单一数据流。 临界区的代码执行,也就是进行原子操作,不会被打断。 先分析RTOS的运行架构&#xff0c…