Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

在《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 noderos2 topicros2 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++代码 等技术手段保证整个软件项目的跨平台支持。

评论