在《ROS2源码下载与编译》一文中,我们下载了ROS2的源码,并分析了代码的目录结构。本文将继续分析ROS2代码的软件架构设计
1. 核心模块(代码仓库)
| 模块(仓库) | 模块名称 | 主要功能 |
|---|---|---|
ros2/ros2 |
元仓库 | ROS2仓库的工作空间和子仓库管理文件(.repos) |
ros2/rcl |
ROS Client Library(C语言实现层) | ROS Client库的核心实现,由C语言编写。 |
ros2/rclcpp |
ROS Client Library(C++接口层) | ROS Client库的C++封装接口,由C++编写,基于rcl实现。 |
ros2/rclpy |
ROS Client Library(Python接口层) | ROS Client库的Python封装接口,由Python编写,基于rcl实现。 |
ros2/rmw |
(通信)中间件接口 | ROS通信模块的中间件接口,也就是遵循DDS(Data Distribution Service)标准和规范的通信接口。 |
eProsima/Fast-DDS |
Fast-DDS实现库 | 中间件接口的一种实现,有eProsima团队开发和维护。这是ROS2默认的通讯框架 |
eclipse-cyclonedds/cyclonedds |
CyCloneDDS实现库 | 中间件接口的一种实现,有eclipse团队开发和维护 |
ros2/rosidl |
ROS接口定义 | 负责统一管理ROS 2的接口定义(如.msg、.srv、.action),并通过代码生成工具将这些接口转换为多语言支持的代码(如C++、Python)和DDS兼容的IDL文件。 |
ros2/ros2cli |
命令行工具 | 常用的ROS命令如:ros2 node、ros2 topic、ros2 service等的实现。 |
2. 软件架构
2.1. 架构层次图
2.2. 架构层次与源码模块
| 架构层级 | 源码模块 | 功能描述 |
|---|---|---|
| 应用层 | 您的功能包 | 用户自己编写的节点、Launch文件、配置文件等,实现具体的机器人业务逻辑。 |
ros2cli 及相关模块 (如 ros2run, ros2node等) |
ROS 2命令行工具的框架和具体命令实现。它们利用 rclpy 提供用户与ROS 2系统交互的接口。 |
|
launch_ros |
用于编写Python版的launch文件,提供强大且可编程的节点启动与管理能力。 | |
核心功能包 (如 navigation2) |
基于ROS 2客户端库构建的、实现特定机器人功能(如导航、控制)的软件集合。 | |
| ROS 2客户端库层 | rclcpp |
**ROS客户端库 (C++)**。构建于 rcl 之上,提供面向对象的、符合C++习惯的API,是性能敏感应用的首选。 |
rclpy |
**ROS客户端库 (Python)**。构建于 rcl 之上,通过Python绑定提供易于使用的API,适合快速原型开发和工具脚本。 |
|
rcl |
**ROS客户端库 (C API)**。核心库,用C语言封装了底层 rmw 的功能,并添加了ROS概念。为上层的语言特定库提供统一、稳定的C接口。 |
|
rosidl |
ROS接口定义库。负责处理接口定义文件(.msg, .srv, .action),并生成针对不同语言和中间件的类型支持代码。 | |
| ROS 2中间件层 | rmw |
ROS中间件接口。定义了一组纯C的API头文件,是所有DDS实现适配器必须遵循的接口规范,是实现解耦的关键。 |
rmw_implementation |
一个包,负责在运行时加载和绑定具体的RMW实现,根据环境变量将顶层的 rmw API调用路由到对应的实现上。 |
|
| 具体RMW实现包 (例如: eProsima/Fast-DDS) |
符合 rmw 接口规范的具体实现,作为适配器将通用的 rmw 调用翻译成特定DDS库的调用。 |
|
rmw_fastrtps_cpp |
基于 eProsima Fast DDS 的RMW实现,是ROS 2默认的实现。 | |
rmw_connextdds |
基于 RTI Connext DDS 的RMW实现,通常用于对性能和可靠性有更高要求的商业应用。 | |
rmw_cyclonedds_cpp |
基于 Eclipse Cyclone DDS 的RMW实现,以轻量级和高性能著称。 | |
rosidl_typesupport |
负责消息类型支持,定义了如何将ROS接口定义转换为不同DDS所能理解的数据类型(例如 typesupport_fastrtps_cpp)。 |
|
| 操作系统层 | N/A | ROS 2运行的基石。ROS2支持Linux, Windows, macOS等平台,但此层不属于ROS 2源码,是其外部依赖。ROS2通过 跨平台的通信中间件、跨平台的构建系统和工具链(CMake/ament_cmake/Python/Colcon)、可移植的C/C++代码 等技术手段保证整个软件项目的跨平台支持。 |