Files
ROS2_learn/doc/00-levels.md
T
2026-08-05 18:17:25 +08:00

362 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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,理解 `<link>` / `<joint>` / `<inertial>` / `<visual>` / `<collision>`
- ✅ 能写 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 ⭐(新增)
总计: **82 用例**(pytest 64 + gtest 14 + launch_test 4),目标 100% 通过
> 注:82 用例是当前仓库实测数(`colcon test` 结果),与 README/AGENTS 一致。
> 上述表格列是"实测用例数"(非"测试文件数")。
> 拆分:pytest=11+7+5+13+16+6+6=64,gtest=3+4+3+4=14,launch_test=1+1+1+1=4。
```
---
## 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)