在机器人领域,ROS 是一个标准软件平台,具有易用性、灵活性和优秀的发布订阅通信机制。这个平台为开发者提供了构建机器人应用程序所需的各个功能模块,并且开发者能够以“可插拔”的方式组织各个功能模块。
然而,ROS的现有框架不适合实时嵌入式系统,不能满足复杂环境下高实时性的要求,且只能运行在少数操作系统上。
为了解决这些问题,ROS2 采用数据分发服务(DDS) 对 ROS进行重大升级,实时数据分发服务协议改进了通信堆栈,提供可靠的数据通信机制,支持消息的发布和订阅,以及数据的广播和多播,采用 QoS(Quality of Service)机制,允许用户对通信数据进行更细粒度的控制,包括数据传输延迟、可靠性、带宽限制等方面。这些功能的添加使得 ROS2 具有高效、可靠的数据通信。
ROS2 是一个全新的机器人操作系统,在借鉴 ROS 成功经验的基础上,对系统架构和软件代码进行了重新设计和实现。
ROS2 的系统架构如图所示 :
1、操作系统层(OS Layer):相较 ROS1 只支持 Linux 来说,ROS2 除了支持主 流 PC 操作系统 Windows,Mac,Linux 外,甚至还支持 RTOS,ROS2 让开发者有了更多的选择和可能性。
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 将使用相应的网络通信协议(如 TCP、UDP 等)在不同的计算机之间传输数据,这个过程是由 ROS2 中的中间件 API 接口实现的。
ROS2 的通信模型如图所示:
ROS2 优点如下:
(1)通信协议多样化:在 ROS2 中可以选用不同的通信协议来完成数据交互, 如 UDP、TCP 和共享内存等,用户可以根据自己的需要去选择最合适的通信方式。以达到更好的通信效果。
(2)实时性能强:ROS2 中引入了实时通信的概念,通过采取 DDS 的通信标 准进行通信节点的数据交换,给整个系统提供了更好的实时性,这对于需要较低延迟和高带宽的应用非常重要。
(3)可靠性高:ROS2 的通信模型采用 DDS 来实现,能够保证数据传输的完整性,有效避免了数据丢包、缺失的情况。
(4)支持跨平台:DDS 通信中间件可以在不同的硬件环境下运行,对具体的 操作系统或者网络协议没有依赖性,因此 ROS2 能够在 Linux、Windows、Mac 等 操作系统上运行。
(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 更适合应用在工业生产环境。