# ROS2 代码结构图 ## ROS2 工作区目录结构 ```mermaid flowchart TD Workspace[ROS2 工作区] --> src[src/ 源代码目录] Workspace --> build[build/ 构建目录] Workspace --> install[install/ 安装目录] Workspace --> log[log/ 日志目录] src --> Package1[包1] src --> Package2[包2] src --> PackageN[...] Package1 --> P1_CMake[CMakeLists.txt] Package1 --> P1_PackageXML[package.xml] Package1 --> P1_src[src/ 源代码] Package1 --> P1_include[include/ 头文件] Package1 --> P1_msgs[msg/ 消息定义] Package1 --> P1_srvs[srv/ 服务定义] Package1 --> P1_actions[action/ 动作定义] ``` ## ROS2 软件架构 ```mermaid flowchart TD App[应用程序] --> ClientLibs[客户端库] subgraph ClientLibs [客户端库] direction LR RCLcpp[C++ 客户端库 rclcpp] RCLpy[Python 客户端库 rclpy] RCL[C 客户端库 rcl] end ClientLibs --> RCL_Interface[RCL 接口] RCL_Interface --> RMW[ROS 中间件接口 RMW] subgraph DDS_Implementations [DDS 实现] direction LR FastDDS[Fast DDS] CycloneDDS[Cyclone DDS] RTI_Connext[RTI Connext] OpenSplice[OpenSplice] end RMW --> DDS_Implementations DDS_Implementations --> Network[网络通信] ``` ## ROS2 核心包依赖关系 ```mermaid flowchart TD ROS2_Core[ROS2 核心] --> ament_core[ament_core
构建系统] ROS2_Core --> rcl[rcl
C语言客户端库] ROS2_Core --> rclcpp[rclcpp
C++客户端库] ROS2_Core --> rclpy[rclpy
Python客户端库] rcl --> rmw[rmw
中间件接口] rclcpp --> rcl rclpy --> rcl rmw --> rmw_implementation[rmw_implementation
中间件实现] rmw_implementation --> DDS[DDS 实现] ROS2_Tools[ROS2 工具] --> ros2cli[ros2cli
命令行工具] ROS2_Tools --> colcon[colcon
构建工具] ROS2_Tools --> launch_ros[launch_ros
启动系统] ``` ## ROS2 节点通信模型 ```mermaid flowchart LR NodeA[ROS2 节点 A] -->|发布话题| Topic1[话题 /topic1] NodeB[ROS2 节点 B] -->|订阅话题| Topic1 NodeC[ROS2 节点 C] -->|请求服务| Service1[服务 /service1] NodeD[ROS2 节点 D] -->|提供服务| Service1 NodeE[ROS2 节点 E] -->|发送目标| Action1[动作 /action1] NodeF[ROS2 节点 F] -->|执行动作| Action1 NodeF -->|反馈| NodeE NodeF -->|结果| NodeE ``` ## 说明 ### 1. 工作区目录结构 - **src/**: 包含所有ROS2包的源代码 - **build/**: 构建过程中生成的中间文件 - **install/**: 安装目录,包含可执行文件、库和资源 - **log/**: 构建和运行时的日志文件 ### 2. ROS2包的基本结构 每个ROS2包通常包含: - `CMakeLists.txt`: CMake构建配置文件 - `package.xml`: 包元数据文件 - `src/`: C++或Python源代码 - `include/`: C++头文件 - `msg/`, `srv/`, `action/`: 消息、服务、动作定义文件 ### 3. 软件架构层次 1. **应用程序层**: 用户编写的ROS2节点 2. **客户端库层**: 语言特定的API(C++、Python、C) 3. **RCL层**: 通用的ROS客户端库 4. **RMW层**: ROS中间件抽象接口 5. **DDS层**: 具体的DDS实现 ### 4. 通信模式 - **话题(Topics)**: 发布/订阅模式,单向异步通信 - **服务(Services)**: 请求/响应模式,同步通信 - **动作(Actions)**: 目标/反馈/结果模式,长时间运行的任务 ## 使用方法 1. 将本文件在支持 Mermaid 图的 Markdown 查看器中打开(如 VS Code with Mermaid 插件、GitHub、GitLab 等) 2. 图表将自动渲染为可视化图形 3. 如需修改图表,编辑对应的 Mermaid 代码块 ## 相关资源 - [ROS2 官方文档](https://docs.ros.org/) - [ROS2 架构设计](https://design.ros2.org/) - [Mermaid 语法指南](https://mermaid.js.org/syntax/flowchart.html)