ROS 2的架构如图所示,主要由系统层(OS Layer),DDS实现层,ROS 2 DDS接口层(Abstract DDS Layer),ROS2客户端层(ROS2 Client Layer)和应用层(Application Layer)等部分构成。

操作系统层(Operating System Layer):
该层对ROS 2提供了底层的系统支持,包括硬件抽象(Hardware Abstraction)、操作系统接口(Operating System Interface)等,是ROS 2运行所依赖的基础。ROS 2支持多种操作系统平台,包括Linux、Windows、macOS等。此外,为了适应在资源受限的微控制器(MCU)上运行ROS 2,ROS 2也提供了精减后的Micro-ROS。
DDS实现层(DDS Implementation Layer):
该层利用数据分发服务,提供了高性能、实时、可靠的数据通信机制,确保节点之间的消息传输效率和可靠性。ROS 2本身未指定DDS的实现,只要符合标准的DDS均可配置为ROS 2的通信后端,ROS 2默认使用eProsima Fast DDS作为通信后端。
ROS 2 DDS接口层(Abstract DDS Layer):
该层是机器人操作系统的核心层,负责对DDS实现层进行定制,实现ROS 2节点之间的通信机制,包括发布/订阅(Publish/Subscribe)、服务(Service)、动作(Action)等通信手段。ROS 2通过该层实现了机器人操作系统的核心功能,定义了节点、节点的运行方式和节点间的通信等功能。
ROS 2客户端层(ROS 2 Client Layer):
该层主要供了C++,Python,Rust等语言的API接口,屏蔽了ROS 2底层的实现细节,为开发者提供了简单易用的通信接口,开发者只需要调用相关方法或函数就能方便地和其他节点进行通信。
应用层(Application Layer):
该层是ROS 2架构的最上层,包括实际的机器人应用程序,例如导航、视觉处理、动作控制等。ROS 2广泛使用的原因之一就是在应用层存在大量优秀的第三方应用程序,在安装后仅需配置即可实现机器人的智能控制,例如控制机械臂的MoveIt 2和移动机器人导航的Nav 2等。在一般的情况下,开发者仅需利用ROS 2的API接口来编写节点,通过节点之间的通信实现机器人系统的整合,从而实现各种各样的机器人功能。
除以上几层,要使用ROS 2控制真实机器人,离不开硬件层(Hardware Layer)。
硬件层是机器人运行的物理硬件设备,包括传感器、执行器、嵌入式系统等。通过将硬件设备根据ROS 2的规范进行适配,并开发相应的驱动程序,ROS 2可以与各种硬件设备进行交互,实现对真实世界的控制与感知。硬件层的适配是将ROS 2系统与实际机器人硬件连接起来的关键步骤,ROS 2与各种硬件设备的兼容性使得机器人开发者可以灵活选择和组合不同的硬件组件,从而构建出形态多样,功能强大的机器人系统。