Skip to content

Commit 694c6de

Browse files
docs: add manipulator tutorial documents
1 parent a4b6132 commit 694c6de

47 files changed

Lines changed: 65470 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
> 本文档属于 [Robotics Tutorial](https://github.com/Michael-Jetson/Robotics_Tutorial) 项目,作者:Pengfei Guo,达妙科技。采用 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 协议,转载请注明出处。
2+
3+
# 机械臂方向教学文档导读
4+
5+
> **版本**:目录导读 v2 | **更新日期**:2026-05-09
6+
> **组织方式**:当前目录是机械臂方向的多文件教学文档集合,而不是单一合并文档。主线包含 P01-P02、M01-M15、F01-F10、D01-D10,并保留调研报告和附录作为参考。
7+
> **全局入口**:请优先从《机械臂方向_综合教学大纲.md》进入全局路线图;《00_整体路线图与前言.md》仅覆盖子课程一(机械臂基础)。
8+
> **适用对象**:完成 v8/v10 SLAM 主线 + 公共基础层后切入机械臂方向的工程师
9+
> **核心技术栈**:Pinocchio · MoveIt2 · Drake · ros2_control · KDL
10+
11+
---
12+
13+
## 导读:本文档的组织结构与阅读指引
14+
15+
本目录共同构成**机械臂方向的完整知识体系**。各文件之间存在明确的递进关系和分工:
16+
17+
### 三大子课程(教学主体)
18+
19+
| 子课程 | 章节编号 | 周数 | 核心主题 | 学习路径定位 |
20+
|--------|---------|------|---------|-------------|
21+
| **子课程一:机械臂基础** | P01-P02 + M01-M15 | 24 周 | 建模/动力学/IK/碰撞/优化/规划/实时/MoveIt2 集成 | **起点**——从 SLAM 背景切入机械臂,建立位置控制全栈能力 |
22+
| **子课程二:力控与柔顺控制** | F01-F10 | 28 周 | 阻抗/导纳/WBC/学习型力控 | **进阶**——从位置控制跨入力的世界,掌握接触操作 |
23+
| **子课程三:双臂协调与遥操作** | D01-D10 | 24 周 | 协调规划/内力控制/双边力反馈/运动映射 | **高阶**——从单臂跨入多代理协调,覆盖数据采集管线 |
24+
25+
三大子课程构成**基础 -> 力控 -> 双臂遥操**的递进学习路径:子课程一的终点(单臂位置控制 + MoveIt2)是子课程二的起点;子课程二的终点(单端口阻抗/导纳控制 + WBC)是子课程三的起点。学员可根据自身目标选择学到哪一层停下。
26+
27+
### 两份项目调研(参考资料)
28+
29+
| 调研报告 | 覆盖范围 | 用途 |
30+
|---------|---------|------|
31+
| **精炼版调研** | 40 个核心 C++ 项目速查 + 16 个 C++ 教学主题提炼 | 快速索引:按类别查项目、按教学主题查代码范例 |
32+
| **全景调研(第一批)** | 8 个 T0 深度剖析 + 30 个 T1 分类项目 | 深度参考:每个 T0 项目含架构分析、核心文件路径、C++ 技术点 |
33+
34+
两份调研为三大子课程的"项目精读清单"和"实战练习"提供数据支撑。子课程中引用的核心开源项目,原则上在调研报告中维护更详细的元信息(Stars、许可证、C++ 标准、关键文件)和教学评分;附录中的 Stars 仅作索引提示,权威口径以调研报告主表及其截至日期为准。
35+
36+
### 阅读建议
37+
38+
- **系统学习**:按顺序阅读子课程一 -> 二 -> 三,遇到项目精读时查阅对应调研报告
39+
- **按需查阅**:直接跳到感兴趣的章节(如 F04 笛卡尔阻抗控制),通过"前置依赖"段落回溯所需知识
40+
- **附录区分**:三大子课程各有独立的附录体系(分别以"机械臂附录"、"力控附录"、"双臂附录"为前缀),两份调研报告也各有自己的附录
41+
42+
---
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
> 本文档属于 [Robotics Tutorial](https://github.com/Michael-Jetson/Robotics_Tutorial) 项目,作者:Pengfei Guo,达妙科技。采用 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 协议,转载请注明出处。
2+
3+
## 仅覆盖子课程一:机械臂基础(P01-P02 + M01-M15)
4+
5+
### 机械臂方向 C++ 进阶教学大纲(v0.1 · 增量式完整版)
6+
7+
> **定位**:本大纲是《面向 SLAM 工程师的 C++ 中高级进阶完整教学大纲 v8》(46 章 48 周)的**增量扩展**,面向完成 v8 主线后希望切入**机械臂方向**(6/7-DOF 工业臂、协作臂、移动操作臂)的工程师。
8+
>
9+
> **章节编号**:Part 0(P01, P02 共 2 章跨方向共享) + Part 1-6(M01-M15 机械臂专题,共 15 章)= **17 章,约 24 周**。Part 0 可复用到后续腿足/无人机/RL 专题而不重写。
10+
>
11+
> **数据基础**:基于 100+ 个机械臂相关开源项目的源码级分析——《机械臂规控 C++ 项目全景调研》、《manipulator_cpp_research》、《机器人规划与控制领域 C++ 库生态全景调研》、《规划与控制领域的 C++ 横向工程技术全景》、《轮足机器人与足式机械臂开源项目全景调研》、《Mastering URDF and Xacro for Robot Modeling in ROS 2》、《ROS2 Hardware Integration and Embedded Ecosystem》等。
12+
>
13+
> **前置假设**:学员已完成 v8 的 46 章——掌握现代 C++17(含 CRTP、SFINAE、表达式模板)、Eigen 高级、并发(thread/mutex/atomic/TBB)、SLAM 优化(GTSAM/Ceres/g2o)、ROS2 基础、CMake/CUDA 基础、SLAM 项目精读(ORB-SLAM3/FAST-LIO2)。在此基础上切入机械臂**不需要重新学 C++**,只需补"机械臂领域特有的 C++ 技术 + 库生态"。
14+
>
15+
> **风格对齐**:核心章节尽量采用 `教学目标 / 前置依赖 / 核心知识点(多个子标题) / 项目精读清单 / 实战练习(A 型 + B 型 + 思考题) / 预计学习时间` 的六段式结构;少数后置综合章节后续统一补齐,导航不把该结构作为已完成承诺。
16+
>
17+
> **预留接口**:每章标注 **✅ 全方向共享 / ⚪ 部分共享 / ❌ 纯机械臂** 以便后续复用到腿足/无人机/RL 专题。
18+
19+
---
20+
21+
## 整体路线图
22+
23+
```
24+
主线 v8 完成(Ch1-46,第 1-48 周)
25+
26+
│ 学生此时具备:
27+
│ - C++17 现代特性(含 CRTP、SFINAE、Concepts)
28+
│ - Eigen 高级(Map/Block/表达式模板)
29+
│ - 并发(thread/mutex/atomic/TBB)
30+
│ - SLAM 图优化(GTSAM/Ceres/g2o)
31+
│ - ROS2 基础/CMake/CUDA 基础
32+
│ - SLAM 项目精读(ORB-SLAM3/FAST-LIO2)
33+
34+
┌─────────────────────────────────────────────────────┐
35+
│ Part 0:跨方向共享基础(第 49-51 周,2.5 周) │
36+
│ P01 URDF / Xacro 机器人建模 │
37+
│ P02 sim-to-real 资产管道与多目标部署 │
38+
└─────────────────────────────────────────────────────┘
39+
│ 【✅ 后续腿足/无人机/RL 专题直接复用】
40+
41+
┌─────────────────────────────────────────────────────┐
42+
│ Part 1:机械臂动力学与运动学(第 52-55 周,4 周) │
43+
│ M01 Pinocchio 深度精读——CRTP + 模板标量类型 │
44+
│ M02 动力学库对比——RBDL/DART/KDL/Drake │
45+
│ M03 IK 求解器——KDL/TRAC-IK/IKFast/ik_geo/pick-ik │
46+
└─────────────────────────────────────────────────────┘
47+
48+
┌─────────────────────────────────────────────────────┐
49+
│ Part 2:碰撞检测与数学优化(第 56-59 周,4 周) │
50+
│ M04 碰撞检测——FCL / HPP-FCL(Coal) │
51+
│ M05 QP / NLP 建模工程——OSQP/ProxQP/Ipopt/CasADi │
52+
│ M06 自动微分与代码生成——CppAD/CppADCodeGen │
53+
└─────────────────────────────────────────────────────┘
54+
55+
┌─────────────────────────────────────────────────────┐
56+
│ Part 3:机械臂运动规划(第 60-65 周,5.5 周) │
57+
│ M07 OMPL 采样规划——StateSpace 继承体系 │
58+
│ M08 轨迹优化规划器——TrajOpt/CHOMP/STOMP/KOMO │
59+
│ M09 GPU / SIMD 加速规划——cuRobo + VAMP │
60+
│ M10 时间参数化——Ruckig / TOPP-RA / TOTG │
61+
└─────────────────────────────────────────────────────┘
62+
63+
┌─────────────────────────────────────────────────────┐
64+
│ Part 4:实时控制与硬件(第 66-68 周,3 周) │
65+
│ M11 实时 C++ 工程——PREEMPT_RT + 无堆分配 │
66+
│ M12 ros2_control + 硬件驱动 + RL 部署 │
67+
└─────────────────────────────────────────────────────┘
68+
69+
┌─────────────────────────────────────────────────────┐
70+
│ Part 5:任务编排与系统集成(第 69-71 周,3 周) │
71+
│ M13 BehaviorTree.CPP 深度 │
72+
│ M14 MoveIt2 + MTC 工业集成 │
73+
└─────────────────────────────────────────────────────┘
74+
75+
┌─────────────────────────────────────────────────────┐
76+
│ Part 6:综合实战(第 72-73 周,2 周) │
77+
│ M15 Mini-Manip——Franka Panda pick-and-place │
78+
└─────────────────────────────────────────────────────┘
79+
```
80+
81+
**全部投入**:Part 0 + Part 1-6 共 24 周,全职等效约 6 个月;业余 15-20 小时/周约 12-15 个月。
82+
83+
---
84+
85+
## 前言:给 SLAM 背景学员的认知导引
86+
87+
### 0.1 SLAM 工程师进入机械臂的三大认知跨越
88+
89+
完成 v8 的 SLAM 主线后,进入机械臂方向会遇到三个核心的心智模型切换。先说清楚,避免在 M01 Pinocchio 时感到"思维方式对不上"。
90+
91+
**跨越一:从"估计"到"生成"**
92+
93+
SLAM 的工作方式是给定传感器数据估计机器人状态——观测 → 状态(被动的状态识别)。机械臂规控的工作方式是给定任务目标生成动作序列——目标 → 状态序列 → 动作(主动的状态合成)。优化问题的变量结构、约束类型、求解频率根本不同:SLAM 是批量或滑窗的,机械臂规控是滚动时域的。
94+
95+
**跨越二:从"稀疏因子图"到"密集约束 QP"**
96+
97+
Ceres/g2o 擅长的是**无约束或仅含边界约束的非线性最小二乘**——SLAM 的主要问题形式。规控的核心挑战是**带约束的优化**:关节限位、碰撞避免、力/力矩上限、动力学方程都是不等式或等式约束。**Ceres 不支持通用不等式约束**,这是 SLAM 工程师进入规控的第一道认知鸿沟。从 least-squares 到 constrained NLP 的迁移不是"加一个库",而是问题建模范式的根本改变——你需要学的是 OSQP/ProxQP(QP)、Ipopt(NLP)、HPIPM(结构化 MPC-QP)这批新求解器。
98+
99+
**跨越三:从"10Hz 软实时"到"1kHz 硬实时"**
100+
101+
你可能一直以为 FAST-LIO2 的"100Hz"是快的。但机械臂与真机通信的时间基准是 **1 kHz**(1 ms 周期),偶尔超时会导致机器人失控。这要求:无动态内存分配(任何 `malloc` 可能导致 100-500 µs 延迟尖峰)、无异常、无阻塞 mutex、PREEMPT_RT 内核、`SCHED_FIFO` 调度、`mlockall` 锁内存。习惯的 `std::vector::push_back()``std::cout` 调试、`std::mutex` 保护共享数据——**都是 1 kHz 实时的禁忌**
102+
103+
### 0.2 机械臂 C++ 生态的三大学派对立
104+
105+
进入机械臂方向会发现,开源项目不是松散分布,而是**三大学派鼎立**:
106+
107+
| 学派 | 核心项目 | 许可证 | C++ 标准 | 架构哲学 |
108+
|------|----------|--------|---------|----------|
109+
| **法国 INRIA 学派** | Pinocchio + TSID + Crocoddyl + Coal + ProxQP + Aligator | BSD-2 | C++17/20/23 | 纯模板 + 模块化库,每库只做一事做到极致 |
110+
| **美国 TRI 学派** | Drake(一个巨型库) | BSD-3 | C++20 + Bazel | 集成框架 + `System<T>` 标量参数化 |
111+
| **美国 SwRI 工程派** | MoveIt2 + Tesseract + ros2_control | BSD-3/Apache-2.0 | C++17 | pluginlib 运行时多态 + ROS2 深度集成 |
112+
113+
三派**教学价值都是 5 星**,但路径完全不同:
114+
- INRIA 路线 = 学会用 5-7 个独立库拼装(本大纲主选)
115+
- Drake 路线 = 只学一个但代码库巨大(M02 选读)
116+
- SwRI 路线 = pluginlib/YAML 配置驱动(M14 精读)
117+
118+
**对 RL + 具身方向的启示**:Drake 路线因 `AutoDiffXd``symbolic::Expression` 对 RL+MPC 混合研究最友好(同一份代码同时做仿真/优化/符号推导);但工程落地最快的是 MoveIt2 + ros2_control 路线。本大纲以 INRIA 为主干,Drake 在 M02 精读,MoveIt2 在 M14 精读,三派都覆盖。
119+
120+
### 0.3 前置依赖一览
121+
122+
| 本大纲章节 | 依赖 v8 章节 | 依赖的具体知识点 |
123+
|-----------|------------|-----------------|
124+
| M01 Pinocchio | v8 Ch14(CRTP)、Ch11(Eigen) | Sophus CRTP 基础、模板元编程、Eigen Map/Block |
125+
| M02 动力学库 | v8 Ch6(继承多态) | 虚函数表、`override`/`final` |
126+
| M03 IK | v8 Ch19-20(并发) | `std::thread`/`std::atomic` 用于 TRAC-IK 并行 |
127+
| M04 碰撞检测 | v8 Ch13(模板特化) | FCL BVH 模板设计 |
128+
| M05 QP/NLP | v8 Ch17(Ceres) | 最小二乘基础、Jet AD,扩展到约束优化 |
129+
| M06 AD + codegen | v8 Ch17(Ceres) | Ceres Jet 的 tape-based AD 心智模型 |
130+
| M11 实时 C++ | v8 Ch19-20、Ch35(pmr) | STL 分配语义、atomic 内存序 |
131+
| M12 ros2_control | v8 Ch31(ROS2 高级) | Lifecycle Node、Component、QoS |
132+
| M13 BT.CPP | v8 Ch29(设计模式) | Composite Pattern、Strategy Pattern |
133+
| M14 MoveIt2 | v8 Ch29、Ch31 | pluginlib(dlopen + 工厂 + 虚函数) |
134+
135+
**v8 前置三层口径**:
136+
- **最低可启动**:Ch11、Ch14、Ch17、Ch19-20、Ch29、Ch31。可支撑 P01/M01/M03/M05/M11/M13/M14 的入门版和 Quick Start 演示,但不覆盖全部工程细节。
137+
- **推荐补齐**:Ch3、Ch6、Ch11、Ch14、Ch17、Ch19-20、Ch29、Ch31、Ch35。适合按 M01-M15 主线学习并进入 M11/M12 实时控制。
138+
- **完整前置**:完成 v8 Ch1-Ch46。若未完整完成,至少按附录 C 的章节索引补齐与机械臂直接相关的章节。
139+
140+
### 0.4 预留接口的明确标注(供后续腿足/无人机/RL 专题复用)
141+
142+
- **✅ 全方向共享**(内容一字不改即可迁移):**Part 0 完整**、M01(Pinocchio)、M02(动力学库)、M05(QP/NLP)、M06(AD+codegen)、M11(实时 C++)、M13(BT.CPP)——**共 8 章**
143+
- **⚪ 部分共享**(核心知识共用,但应用场景/API 不同):M04(碰撞检测)、M09(GPU/SIMD)、M10(时间参数化)、M12(ros2_control)、M15(Mini-Manip 模板)
144+
- **❌ 纯机械臂**(不迁移):M03(IK)、M07(OMPL 采样)、M08(轨迹优化规划器)、M14(MoveIt2+MTC)
145+
146+
未来做**腿足专题**时,可直接复制 ✅ 的 8 章,仅在 M12 替换为腿足的 legged_control/OCS2 栈、在 M14 替换为腿足的 TSID/WBC 内容。
147+
148+
---

0 commit comments

Comments
 (0)