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)便于友商对接

相关推荐
矛取矛求9 分钟前
Linux系统性能调优技巧
linux
One_Blanks13 分钟前
渗透测试-Linux基础(1)
linux·运维·安全
Perishell14 分钟前
无人机避障——大疆与Airsim中的角速度信息订阅获取
linux·动态规划·无人机
爱吃喵的鲤鱼18 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
dessler30 分钟前
Linux系统-ubuntu系统安装
linux·运维·云计算
newxtc39 分钟前
【客观理性深入讨论国产中间件及数据库-科创基础软件】
数据库·中间件·国产数据库·国产中间件·科创
idealzouhu40 分钟前
【canal 中间件】canal 常见的启动方式
中间件
7年老菜鸡1 小时前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Ni-Guvara1 小时前
函数对象笔记
c++·算法
似霰1 小时前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder