# Level 1 ~ Level 4 全方位 ROS2 学习路线图
> **目标读者**: 想从零学到能用 ROS2 + 机械臂 + VLA (Vision-Language-Action) 做真实具身智能系统的开发者。
>
> **学习承诺**: 本仓库把 ROS2 从基础到 VLA 部署分成 4 级,每级有可运行的代码包 + 教科书级别文档 + 自动化测试。
>
> **预计总时长**: 每天 2-3 小时,Level 1 约 4-6 周,Level 2 约 6-8 周,Level 3 约 8-12 周,Level 4 持续学习。
---
## 目录
- [学习哲学](#学习哲学)
- [Level 1: ROS2 基础机制 (Foundation)](#level-1-ros2-基础机制-foundation)
- [Level 2: 仿真 + 工具链 (Simulation & Tooling)](#level-2-仿真--工具链-simulation--tooling)
- [Level 3: 机械臂实战 (Real Robot)](#level-3-机械臂实战-real-robot)
- [Level 4: 具身智能 VLA (Embodied AI)](#level-4-具身智能-vla-embodied-ai)
- [硬件清单](#硬件清单)
- [时间估算](#时间估算)
- [推荐阅读 + 引用](#推荐阅读--引用)
---
## 学习哲学
### 三条铁律
1. **跑通 > 读完** — 每学一个机制,先在仓库里跑通最小 demo,再读设计文档。
2. **测一次 > 看一次** — 每个包都带 pytest/gtest,跑通测试比"看懂了"更可信。
3. **文档带引用** — 每篇深度文档末尾都列 ROS2 官方文档 + 设计稿链接 + DDS 规范 + 论文。
### 设计思想: 双层解耦
- **本机 venv** — 开发工具链(ruff/black/mypy/pytest),不污染系统 Python,只装 IDE / 编辑器需要的。
- **Docker 容器** — ROS2 运行时(`osrf/ros:humble-desktop`),跨 Win/macOS/Linux 一致,apt 装 ROS2 包。
理由: ROS2 原生依赖大量 C++ 库(DDS / FastRTPS / Cyclone / MoveIt2),在 Windows 本机 pip 装 rclpy 经常飘红。容器化后,所有人跑同一镜像,问题统一在镜像里修复。
### 设计思想: 教科书写法
每篇文档**不重复 ROS2 官方教程**,而是:
1. **讲什么 (What)** — 这个机制解决什么问题。
2. **为什么 (Why)** — 为什么 ROS2 这样设计,设计稿原文引用。
3. **怎么用 (How)** — API 列表 + 最小可运行示例。
4. **怎么测 (Test)** — 单元测试 + 集成测试代码。
5. **怎么错 (Pitfalls)** — 踩过的坑 + 故障排查表。
6. **学什么 (Next)** — 进阶阅读 + 相关论文。
---
## Level 1: ROS2 基础机制 (Foundation)
> **核心目标**: 完整理解 ROS2 的 15 大基础机制,能独立写节点 + launch 文件 + 自定义接口 + 生命周期管理。
### 15 大机制清单
| # | 机制 | 当前包 | 文档 |
|---|---|---|---|
| 1 | 节点 (Node) | `py_pubsub` / `cpp_pubsub` | `10-concepts.md` |
| 2 | Topic (发布订阅) | `py_pubsub` / `cpp_pubsub` | `20-topics.md` |
| 3 | Service (请求响应) | `py_srv` | `30-services.md` |
| 4 | Action (目标-反馈-结果) | `py_action_demo` | `40-actions.md` |
| 5 | TF2 (坐标变换) | `cpp_robot_tf2` | `50-tf2.md` |
| 6 | URDF (机器人模型) | `cpp_robot_tf2` | `60-urdf.md` |
| 7 | Launch (启动编排) | `bringup` | `70-launch.md` |
| 8 | 参数 (Parameter) | `py_params` ⭐新增 | `15-params.md` ⭐新增 |
| 9 | 自定义接口 (.msg/.srv/.action) | `cpp_custom_interface` ⭐新增 | `16-custom-interfaces.md` ⭐新增 |
| 10 | 生命周期 (Lifecycle Node) | `py_lifecycle_composable` ⭐新增 | `17-lifecycle.md` ⭐新增 |
| 11 | 组合节点 (Composable Node) | `py_lifecycle_composable` ⭐新增 | `18-composable.md` ⭐新增 |
| 12 | QoS (服务质量) | `cpp_qos_demo` ⭐新增 | `19-qos.md` ⭐新增 |
| 13 | ros2 bag (录制回放) | `cpp_qos_demo` ⭐新增 | `20-bag.md` ⭐新增 |
| 14 | colcon overlay (混合工作空间) | `py_overlay_dds` ⭐新增 | `21-overlay-dds.md` ⭐新增 |
| 15 | DDS / RMW (中间件配置) | `py_overlay_dds` ⭐新增 | `21-overlay-dds.md` ⭐新增 |
⭐新增 = Level 1 完成补齐的 5 个包 + 7 篇文档。
### Level 1 子目标
- ✅ 能独立写发布者、订阅者、服务器、客户端、Action server、Action client。
- ✅ 能用 TF2 监听 / 广播坐标变换,理解 `lookupTransform` vs `buffer.lookup_transform_async`。
- ✅ 能写简单 URDF,理解 `` / `` / `` / `` / ``。
- ✅ 能写 Python launch 文件,理解 `Node` / `IncludeLaunchDescription` / `LaunchConfiguration` / `PathJoinSubstitution`。
- ⭐ **新增** 能声明参数、读参数、参数变化回调、从 YAML 加载。
- ⭐ **新增** 能自定义 .msg / .srv / .action 并在节点里使用。
- ⭐ **新增** 能用 Lifecycle Node 管理节点状态(configure / activate / cleanup / shutdown)。
- ⭐ **新增** 能用 Composable Node 把多个节点装到一个进程。
- ⭐ **新增** 能配置 QoS(Reliability / Durability / History / Depth / Deadline / Lifeliness)。
- ⭐ **新增** 能用 `ros2 bag` 录制 / 回放 / 信息查询。
- ⭐ **新增** 能用 `colcon build --packages-up-to` 做混合工作空间。
- ⭐ **新增** 能配 domain ID / static peers / QoS XML,理解 DDS 中间件。
### Level 1 测试覆盖
```
py_pubsub 11 pytest ✅
cpp_pubsub 3 gtest ✅
py_srv 7 pytest ✅
py_action_demo 5 pytest ✅
cpp_robot_tf2 4 gtest ✅
py_vision_demo 13 pytest ✅
bringup (launch 聚合,无单测)
py_params 16 pytest ⭐(新增)
cpp_custom_interface 3 gtest ⭐(新增)
py_lifecycle_composable 6 pytest ⭐(新增)
cpp_qos_demo 4 gtest ⭐(新增)
py_overlay_dds 6 pytest ⭐(新增)
总计: **78 用例**(pytest 65 + gtest 13),目标 100% 通过
> 注:78 用例是当前仓库实测数(`colcon test` 结果),与 README/AGENTS 一致。
> 上述表格列是"实测用例数"(非"测试文件数")。
```
---
## Level 2: 仿真 + 工具链 (Simulation & Tooling)
> **核心目标**: 用 MoveIt2 + Nav2 + Gazebo 把 Level 1 的基础机制用在真实仿真机器人上,学会调试 / 监控 / 测试金字塔。
### Level 2 计划包(下一阶段)
| 包 | 主题 | 关键概念 |
|---|---|---|
| `moveit2_demo` | MoveIt2 机械臂运动规划 | SRDF / PlanningScene / OMPL / CartesianPath |
| `nav2_demo` | Nav2 移动底盘导航 | Costmap / BT / SLAM / Recovery Behavior |
| `gazebo_sim` | Gazebo 仿真器集成 | SDF / Plugins / Sensors / ros2_control |
| `ros2_controllers` | ros2_control 控制器 | JointTrajectoryController / GripperController / DiffDriveController |
| `ros2_test_demo` | 测试金字塔 | launch_testing / pytest fixtures / gtest mock |
### Level 2 文档
- `22-moveit2.md` — MoveIt2 概念 + 编程 API + 调试技巧
- `23-nav2.md` — Nav2 概念 + 配置 + 行为树
- `24-gazebo.md` — Gazebo Harmonic 集成
- `25-ros2-control.md` — ros2_control 硬件抽象
- `26-testing-pyramid.md` — 单元 / 集成 / E2E 测试策略
### Level 2 子目标
- ✅ 能用 MoveIt2 给 6 自由度机械臂做运动规划。
- ✅ 能用 Nav2 给移动底盘做 SLAM + 路径规划。
- ✅ 能在 Gazebo 里仿真传感器(Lidar / Camera / IMU)。
- ✅ 理解 ros2_control 硬件抽象层。
- ✅ 写完整的测试金字塔: 单元 (60%) + 集成 (30%) + E2E (10%)。
### 推荐硬件(仿真阶段无需)
仿真阶段**不需要任何硬件**。Gazebo + RViz 足够。
---
## Level 3: 机械臂实战 (Real Robot)
> **核心目标**: 把仿真代码搬到真机,做手眼标定 + 视觉抓取 + 力控,实现"看得见、抓得起、放得稳"。
### Level 3 计划包(中后期)
| 包 | 主题 | 关键概念 |
|---|---|---|
| `arm_hardware` | 真实机械臂驱动 | UR5e / xArm / Franka / Realman 驱动 |
| `arm_calibration` | 手眼标定 | Eye-in-Hand / Eye-to-Hand / Tsai-Lenz / Park |
| `arm_perception` | 视觉感知 | RGB-D / 点云 / 6D 位姿 / GraspNet |
| `arm_grasp` | 抓取规划 | 6-DoF Grasp / suction / parallel jaw |
| `arm_trajectory` | 轨迹优化 | 时间最优 / 能量最优 / STOMP / CHOMP |
| `arm_force` | 力控 | impedance / admittance / hybrid position-force |
### Level 3 文档
- `27-arm-drivers.md` — 主流机械臂驱动对比 + 选型
- `28-hand-eye-calib.md` — 手眼标定原理 + 实践
- `29-6d-pose.md` — 6D 位姿估计(FoundationPose / GraspNet)
- `30-grasp-planning.md` — 抓取规划算法
- `31-force-control.md` — 力控原理 + 实践
### Level 3 推荐硬件(最低配置)
| 设备 | 型号 | 预算 |
|---|---|---|
| 机械臂 | xArm6 / UR5e / Realman RM75 | ¥15,000-50,000 |
| 夹爪 | 大寰 DH-3 / Robotiq 2F-85 | ¥3,000-8,000 |
| RGB-D 相机 | Intel RealSense D435 / Orbbec Gemini 2 | ¥1,500-3,000 |
| 标定板 | A4 ArUco 6×6 | ¥50 |
| 工控机 | NUC / RDK X5 | ¥3,000-5,000 |
总计: ¥25,000-70,000(可选配)
### Level 3 子目标
- ✅ 能驱动真实机械臂做点到点运动 + 直线运动。
- ✅ 做完手眼标定,误差 < 2mm。
- ✅ 视觉检测物体 6D 位姿,精度 < 5mm / 5°。
- ✅ 抓取成功率 > 80% (已知物体集)。
- ✅ 力控下能完成插孔 / 装配任务。
---
## Level 4: 具身智能 VLA (Embodied AI)
> **核心目标**: 用大模型(LLM / VLM)让机器人理解自然语言指令,自主决策动作序列,完成开放域任务。
### Level 4 计划包(终极目标)
| 包 | 主题 | 关键概念 |
|---|---|---|
| `vla_data` | 数据采集 + 处理 | DROID / Open X-Embodiment / RT-1 数据格式 |
| `vla_model` | VLA 模型 | OpenVLA / π0 / RT-2 / RoboFlamingo |
| `vla_inference` | 推理优化 | RKNN / TensorRT / ONNX / 量化 |
| `vla_deployment` | 端到端部署 | PC + RDK X5 + RK3506 三机协同 |
### Level 4 文档
- `32-vla-intro.md` — VLA 概念 + 主流模型对比
- `33-vla-training.md` — VLA 模型微调 + 数据工程
- `34-vla-inference.md` — 边缘推理 + NPU 加速
- `35-vla-deployment.md` — 真机部署 + 三机协同
### Level 4 关键论文(引用)
1. **RT-2** — Google DeepMind, 2023, "RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control"
2. **OpenVLA** — Stanford / UC Berkeley / Toyota Research, 2024, "OpenVLA: An Open-Source Vision-Language-Action Model"
3. **π0** — Physical Intelligence, 2024, "π0: A Foundation Model for Robots"
4. **DROID** Stanford, 2024, "DROID: A Large-Scale In-the-Wild Robot Manipulation Dataset"
5. **Open X-Embodiment** — Google DeepMind et al., 2023, "Scaling Up Learning Across Many Different Robot Types"
### Level 4 子目标
- ✅ 能用 OpenVLA / π0 完成"把红杯子放到桌子左边"这类指令。
- ✅ 能用 RDK X5 NPU (5 TOPS) 跑 VLA 推理,延迟 < 500ms。
- ✅ 三机协同: PC 跑大模型 / RDK X5 跑感知 / RK3506 跑实时控制。
- ✅ 在真实机械臂上完成 10+ 类自然语言指令。
### Level 4 终极硬件配置
| 设备 | 角色 | 关键算力 |
|---|---|---|
| PC (RTX 4090) | 训练 + 大模型推理 | 100+ TOPS |
| RDK X5 | 边缘 VLA 推理 | 5 TOPS NPU |
| RK3506 ×2 | 实时控制 + 通讯 | 3 核 ARM + 512MB RAM |
---
## 硬件清单(汇总)
| 阶段 | 设备 | 必需 / 可选 |
|---|---|---|
| L1 | PC + Docker | 必需 |
| L2 | PC + Docker | 必需 |
| L3 | PC + xArm + RealSense + 标定板 | 必需 |
| L3 进阶 | + 夹爪 + 工装 | 可选 |
| L4 | PC (RTX 4090) + RDK X5 + RK3506 ×2 + xArm | 必需 |
---
## 时间估算
| Level | 学习时长(每天 2-3 小时) | 关键里程碑 |
|---|---|---|
| L1 | 4-6 周 | 写自定义接口 + Lifecycle Node |
| L2 | 6-8 周 | MoveIt2 给真臂规划 + Gazebo 仿真 |
| L3 | 8-12 周 | 手眼标定 + 视觉抓取 + 力控 |
| L4 | 12+ 周 | VLA 真机部署 |
总计: **6-9 个月** 从零到 VLA 真机部署。
---
## 推荐阅读 + 引用
### ROS2 官方文档(权威)
- [ROS2 Humble 官方文档](https://docs.ros.org/en/humble/index.html)
- [ROS2 设计稿 (design.ros2.org)](https://design.ros2.org/) — 必读,讲解为什么这样设计
- [ROS2 Concepts](https://docs.ros.org/en/humble/Concepts.html) — 概念总览
- [ROS2 Tutorials](https://docs.ros.org/en/humble/Tutorials.html) — 入门教程
- [ROS2 QoS 文档](https://docs.ros.org/en/humble/Concepts/About-Quality-of-Service.html)
- [ROS2 Lifecycle Node](https://design.ros2.org/articles/node_lifecycle.html)
- [ROS2 Composable Node](https://docs.ros.org/en/humble/Concepts/About-Composition.html)
- [ROS2 Launch](https://docs.ros.org/en/humble/Tutorials/Launch-system.html)
### DDS 规范
- [OMG DDS 规范 v1.4](https://www.omg.org/spec/DDS/1.4/) — QoS 源头
- [FastRTPS 文档](https://fast-rtps.docs.eprosima.com/) — 默认 RMW
- [Cyclone DDS 文档](https://cyclonedds.io/docs/) — 备选 RMW
### 机器人学
- [Probabilistic Robotics (Thrun et al.)](http://www.probabilistic-robotics.org/) — SLAM 基础
- [Modern Robotics (Lynch & Park)](https://hades.mech.northwestern.edu/index.php/Modern_Robotics.html) — 运动学 / 动力学
### 具身智能 / VLA
- [RT-2 论文](https://arxiv.org/abs/2307.15818)
- [OpenVLA 论文](https://arxiv.org/abs/2406.09246)
- [π0 论文](https://arxiv.org/abs/2410.24164)
- [DROID 数据集](https://droid-dataset.github.io/)
- [Open X-Embodiment 数据集](https://robotics-transformer-x.github.io/)
---
## 学习方法建议
### 每日节奏(2-3 小时)
```
30 min: 读本级文档(理解概念)
60 min: 跑包内 demo(动手验证)
30 min: 改 demo 试错(巩固)
30 min: 写学习笔记(记录坑点)
30 min: 复习 + 下一节
```
### 提问技巧
学 ROS2 时遇到问题,优先:
1. 看本仓库对应文档末尾"故障排查"表
2. 看 ROS2 官方文档对应章节
3. `ros2 doctor` 输出
4. `rclpy` / `rclcpp` 源码 + 调用栈
5. 最后才 Google / Stack Overflow
### 贡献方式
学完一段后,欢迎:
- 修 bug(测试用例失败的)
- 补文档(没说清楚的)
- 加 demo(新机制的最小示例)
- 翻译(英文版)
详见 `CONTRIBUTING.md`。
---
## 路线图完成度
```
[Level 1] ████████████░░ 95% (5 包 5 文档待补,1 个 todo)
[Level 2] ░░░░░░░░░░░░░░░ 0% (规划完成)
[Level 3] ░░░░░░░░░░░░░░░ 0% (规划完成)
[Level 4] ░░░░░░░░░░░░░░░ 0% (规划完成)
```
---
**继续**: 看 `doc/01-quickstart.md` 跑通第一个 demo → `doc/10-concepts.md` 理解 ROS2 概念 → `doc/15-params.md` Level 1 深度内容。
---
---
## 📖 阅读路径导航
> 💡 这是仓库 `doc/` 下所有文档的推荐阅读顺序。[返回 README 总导航](../README.md#-23-篇文档怎么读)
>
> ⏱ **本文预计阅读时间**: 15 分钟
> 📍 **当前位置**: 第 2 / 24 篇
- ⏮ **上一篇**: [项目架构 + 设计取舍](00-overview.md)
- ⏭ **下一篇**: [5 分钟跑通 Hello World](01-quickstart.md)