ROS 与 ROS2 的区别

news/2025/2/15 5:10:53/

在机器人领域,ROS 是一个标准软件平台,具有易用性、灵活性和优秀的发布订阅通信机制。这个平台为开发者提供了构建机器人应用程序所需的各个功能模块,并且开发者能够以“可插拔”的方式组织各个功能模块。

然而,ROS的现有框架不适合实时嵌入式系统,不能满足复杂环境下高实时性的要求,且只能运行在少数操作系统上。

为了解决这些问题,ROS2 采用数据分发服务(DDSROS进行重大升级,实时数据分发服务协议改进了通信堆栈,提供可靠的数据通信机制,支持消息的发布和订阅,以及数据的广播和多播,采用 QoSQuality of Service机制,允许用户对通信数据进行更细粒度的控制,包括数据传输延迟、可靠性、带宽限制等方面。这些功能的添加使得 ROS2 具有高效、可靠的数据通信。

ROS2 是一个全新的机器人操作系统,在借鉴 ROS 成功经验的基础上,对系统架构和软件代码进行了重新设计和实现。

ROS2 的系统架构如图所示 :

1、操作系统层(OS Layer):相较 ROS1 只支持 Linux 来说,ROS2 除了支持主 流 PC 操作系统 WindowsMacLinux 外,甚至还支持 RTOSROS2 让开发者有了更多的选择和可能性。

2、中间层(Middleware Layer):ROS2 的核心层,主要由 DDS ROS2 封装的 关于机器人开发的中间件组成。DDS 是一种去中心化的数据通讯方式,采用 DDS 通信,使得 ROS2 的实时性、可靠性和连续性上都有了增强。

实时性能方面:

ROS:非实时操作系统,对于时序敏感的应用场景可能无法满足硬实时的要求。

ROS2:由于采用了DDS,能够更好地支持实时通信,提供了软实时和硬实时的能力。

ROS2 还引入了服务质量(QoS)管理机制,借助该机制可以保证在某些较差网络环境下也可以具备良 好的通讯效果。ROS2 的中间件则主要由客户端库、DDS 抽象层与进程内通讯 API 构成。

3、应用层(Application Layer):指开发者构建的应用程序,在应用层上,ROS2 几乎继承了 ROS 优秀的设计原理和概念,让用户从使用 ROS ROS2 的过度更顺利,同时也进行了一些使用方法上的改进:从 python2 python3 的编程支持、 C++标准更新到 C++11、编译系统的改进(catkin ament)、多机器人协同通信支持等。

编译系统:ROS2使用了新的编译系统Ament,代替了ROS中的Catkin系统。Ament旨在提供更快的编译速度和更好的依赖管理。

ROS2 的通信方式与 ROS1 有着明显的区别,它不像 ROS1 那样,对通信模型中的主节点有着很强的依赖性,而是去掉了这个主节点,采用 DDS 中间件来完成通信系统的构建,使用了一个分布式的通信框架来协调整个系统不同组件之间的数据交互,具有实时性、分布式、支持多操作系统等特性,更能满足现代机器人行业的需求。

ROS2 的通信过程是基于数据交换的概念来完成的,即发布者将数据发布到特定的主题上,当新的消息发布到主题上时,主题将消息发送给所有订阅者。订阅者接收到消息后,可以对消息进行处理,并将其用于自己的操作中。如果发布者和订阅者在不同的计算机上,那么 ROS2 将使用相应的网络通信协议(如 TCPUDP 等)在不同的计算机之间传输数据,这个过程是由 ROS2 中的中间件 API 接口实现的。

ROS2 的通信模型如图所示:

ROS2 优点如下:

1)通信协议多样化:ROS2 中可以选用不同的通信协议来完成数据交互, 如 UDPTCP 和共享内存等,用户可以根据自己的需要去选择最合适的通信方式。以达到更好的通信效果。

2)实时性能强:ROS2 中引入了实时通信的概念,通过采取 DDS 的通信标 准进行通信节点的数据交换,给整个系统提供了更好的实时性,这对于需要较低延迟和高带宽的应用非常重要。

3)可靠性高:ROS2 的通信模型采用 DDS 来实现,能够保证数据传输的完整性,有效避免了数据丢包、缺失的情况。

4)支持跨平台:DDS 通信中间件可以在不同的硬件环境下运行,对具体的 操作系统或者网络协议没有依赖性,因此 ROS2 能够在 LinuxWindowsMac 等 操作系统上运行。

5)可拓展性更好:ROS2 各个模块之间的耦合性较弱,支持更好的模块化开 发,可以将代码划分为各个不同单元模块,提高了代码的复用率,使得开发者可以更快地开发和测试机器人应用。

ROS和ROS2对比如下:

ROS中间件:采用自定义的消息传输系统,基于TCP/IP协议栈,包括TCPROS和UDPROS两种传输方式,且高度依赖于中央调度节点——roscore或Master节点,负责节点注册、话题和服务的管理等。

ROS2 通信模型是基于 DDS 实现的,DDS 是一种分布式数据架构,它提供了一种可靠、实时、异步和面向消息的数据传输方式。在 ROS2 中,DDS 被用作通信中间件,通过它实现了节点间的数据传输和交换。

ROS2 采用了 DDS 通信中间件技术来完善自身的体系架构,在 ROS2 中可以运行多种不同的DDS 中间件,同时不同版本的 ROS2 所使用的 DDS 也不相同,以便用户可以根据自己的需要选择合适 DDS 的去进行开发或体验 ROS2 的相关产品。在挑选 DDS 时,用户可能会考虑多种因素,例如许可证、自身硬件平台和内存资源占用等各种因素。

ROS2 通过中间层抽象出了支持不同 DDS 产品的接口,可以很好的支持不同实时 DDS 实现。同时,中间层也为用户库提供了接口,很好的将 ROS 与 DDS 进行了解耦合。同时也很好地解决了 ROS中 单一 master 节点的问题,所以 ROS2 的架构在应用层的各个节点真正的实现了各个节点关系的平等。

ROS2 相较 ROS1 运行更可靠,持续性更好,更节省资源,消息传递实时性更佳,应用场景更为广泛,因此 ROS2 更适合应用在工业生产环境。


http://www.ppmy.cn/news/1380320.html

相关文章

缓解LLM的局限性:微调 VS RAG

原文地址:Knowledge Graphs & LLMs: Fine-Tuning Vs. Retrieval-Augmented Generation 2023 年 6 月 6 日 GitHub:https://github.com/neo4j/NaLLM 大型语言模型 (LLM) 的第一波炒作来自 ChatGPT 和类似的基于网络的聊天机器人,相信在…

数据结构小记【Python/C++版】——散列表篇

一,基础概念 散列表,英文名是hash table,又叫哈希表。 散列表通常使用顺序表来存储集合元素,集合元素以一种很分散的分布方式存储在顺序表中。 散列表是一个键值对(key-item)的组合,由键(key)和元素值(item)组成。键…

unity学习(51)——服务器三次注册限制以及数据库化角色信息6--完结

同一账号只写第一次,不同账号第一次爆炸 ,就因为下面部分得到逻辑有问题 修改后的代码如下:1.成功完成角色注册信息的数据库化记录。2.每个账号上限3个角色。3.角色是可以重名的,但是角色的id不会重名。 internal class UserCach…

Midjourney绘图欣赏系列(十)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

完美十进制数——去年天梯校赛

7-4 完美十进制数 对于一个十进制正整数 x,其包含 k 个位,每个数位的数字累加和为 sum 。如果 sum%k0,那么这个十 进制数就是完美的。 例:对于数 12340,包含 5 位,数位累加和为 10,10%50&#x…

python爬虫(7)之pandas模块

1、pandas模块里的两个对象 1、Series 对象 series很类似于一维数组但是它相较于数组多了行标签 示例代码: import pandas as pd ac pd.Series([[1,2,8,9],[3,5,5,8]]) print(ac) 结果如下: 当然也可以更改行标签 示例如下: import …

理解文件系统

个人主页:Lei宝啊 愿所有美好如期而遇 磁盘 磁盘的机械构成 磁盘的物理存储 每个磁盘的盘面,磁头,扇面,扇区都有唯一的编号,同时,一个扇区的大小是512字节(扇区的大小也有4KB的,或…

Java SE String类(一):常用方法(上)

1. 常用方法 1.1 字符串构造 String类的常用构造方法只有以下三种 public class Main {public static void main(String[] args) {String s1 "hello";//使用常量串进行构造String s2 new String("hello");//创建String对象char[] array {h,e,l,l,o};…