128 lines
3.8 KiB
Markdown
128 lines
3.8 KiB
Markdown
# 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<br/>构建系统]
|
||
ROS2_Core --> rcl[rcl<br/>C语言客户端库]
|
||
ROS2_Core --> rclcpp[rclcpp<br/>C++客户端库]
|
||
ROS2_Core --> rclpy[rclpy<br/>Python客户端库]
|
||
|
||
rcl --> rmw[rmw<br/>中间件接口]
|
||
rclcpp --> rcl
|
||
rclpy --> rcl
|
||
|
||
rmw --> rmw_implementation[rmw_implementation<br/>中间件实现]
|
||
rmw_implementation --> DDS[DDS 实现]
|
||
|
||
ROS2_Tools[ROS2 工具] --> ros2cli[ros2cli<br/>命令行工具]
|
||
ROS2_Tools --> colcon[colcon<br/>构建工具]
|
||
ROS2_Tools --> launch_ros[launch_ros<br/>启动系统]
|
||
```
|
||
|
||
## 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) |