跳转至

00_整体路线图与前言

本文档属于 Robotics Tutorial 项目,作者:Pengfei Guo,达妙科技。采用 CC BY 4.0 协议,转载请注明出处。

仅覆盖子课程一:机械臂基础(P01-P02 + M01-M15)

机械臂方向 C++ 进阶教学大纲(v0.1 · 增量式完整版)

定位:本大纲是《面向 SLAM 工程师的 C++ 中高级进阶完整教学大纲 v8》(46 章 48 周)的**增量扩展**,面向完成 v8 主线后希望切入**机械臂方向**(6/7-DOF 工业臂、协作臂、移动操作臂)的工程师。

章节编号:Part 0(P01, P02 共 2 章跨方向共享) + Part 1-6(M01-M15 机械臂专题,共 15 章)= 17 章,约 24 周。Part 0 可复用到后续腿足/无人机/RL 专题而不重写。

数据基础:基于 100+ 个机械臂相关开源项目的源码级分析——《机械臂规控 C++ 项目全景调研》、《manipulator_cpp_research》、《机器人规划与控制领域 C++ 库生态全景调研》、《规划与控制领域的 C++ 横向工程技术全景》、《轮足机器人与足式机械臂开源项目全景调研》、《Mastering URDF and Xacro for Robot Modeling in ROS 2》、《ROS2 Hardware Integration and Embedded Ecosystem》等。

前置假设:学员已完成 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++ 技术 + 库生态"。

风格对齐:核心章节尽量采用 教学目标 / 前置依赖 / 核心知识点(多个子标题) / 项目精读清单 / 实战练习(A 型 + B 型 + 思考题) / 预计学习时间 的六段式结构;少数后置综合章节后续统一补齐,导航不把该结构作为已完成承诺。

预留接口:每章标注 ✅ 全方向共享 / ⚪ 部分共享 / ❌ 纯机械臂 以便后续复用到腿足/无人机/RL 专题。


整体路线图

主线 v8 完成(Ch1-46,第 1-48 周)
         │  学生此时具备:
         │   - C++17 现代特性(含 CRTP、SFINAE、Concepts)
         │   - Eigen 高级(Map/Block/表达式模板)
         │   - 并发(thread/mutex/atomic/TBB)
         │   - SLAM 图优化(GTSAM/Ceres/g2o)
         │   - ROS2 基础/CMake/CUDA 基础
         │   - SLAM 项目精读(ORB-SLAM3/FAST-LIO2)
┌─────────────────────────────────────────────────────┐
│ Part 0:跨方向共享基础(第 49-51 周,2.5 周)           │
│   P01 URDF / Xacro 机器人建模                        │
│   P02 sim-to-real 资产管道与多目标部署               │
└─────────────────────────────────────────────────────┘
         │ 【✅ 后续腿足/无人机/RL 专题直接复用】
┌─────────────────────────────────────────────────────┐
│ Part 1:机械臂动力学与运动学(第 52-55 周,4 周)       │
│   M01 Pinocchio 深度精读——CRTP + 模板标量类型       │
│   M02 动力学库对比——RBDL/DART/KDL/Drake             │
│   M03 IK 求解器——KDL/TRAC-IK/IKFast/ik_geo/pick-ik   │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Part 2:碰撞检测与数学优化(第 56-59 周,4 周)         │
│   M04 碰撞检测——FCL / HPP-FCL(Coal)                │
│   M05 QP / NLP 建模工程——OSQP/ProxQP/Ipopt/CasADi   │
│   M06 自动微分与代码生成——CppAD/CppADCodeGen         │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Part 3:机械臂运动规划(第 60-65 周,5.5 周)           │
│   M07 OMPL 采样规划——StateSpace 继承体系            │
│   M08 轨迹优化规划器——TrajOpt/CHOMP/STOMP/KOMO       │
│   M09 GPU / SIMD 加速规划——cuRobo + VAMP            │
│   M10 时间参数化——Ruckig / TOPP-RA / TOTG           │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Part 4:实时控制与硬件(第 66-68 周,3 周)             │
│   M11 实时 C++ 工程——PREEMPT_RT + 无堆分配          │
│   M12 ros2_control + 硬件驱动 + RL 部署             │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Part 5:任务编排与系统集成(第 69-71 周,3 周)          │
│   M13 BehaviorTree.CPP 深度                          │
│   M14 MoveIt2 + MTC 工业集成                         │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Part 6:综合实战(第 72-73 周,2 周)                   │
│   M15 Mini-Manip——Franka Panda pick-and-place       │
└─────────────────────────────────────────────────────┘

全部投入:Part 0 + Part 1-6 共 24 周,全职等效约 6 个月;业余 15-20 小时/周约 12-15 个月。


前言:给 SLAM 背景学员的认知导引

0.1 SLAM 工程师进入机械臂的三大认知跨越

完成 v8 的 SLAM 主线后,进入机械臂方向会遇到三个核心的心智模型切换。先说清楚,避免在 M01 Pinocchio 时感到"思维方式对不上"。

跨越一:从"估计"到"生成"

SLAM 的工作方式是给定传感器数据估计机器人状态——观测 → 状态(被动的状态识别)。机械臂规控的工作方式是给定任务目标生成动作序列——目标 → 状态序列 → 动作(主动的状态合成)。优化问题的变量结构、约束类型、求解频率根本不同:SLAM 是批量或滑窗的,机械臂规控是滚动时域的。

跨越二:从"稀疏因子图"到"密集约束 QP"

Ceres/g2o 擅长的是**无约束或仅含边界约束的非线性最小二乘**——SLAM 的主要问题形式。规控的核心挑战是**带约束的优化**:关节限位、碰撞避免、力/力矩上限、动力学方程都是不等式或等式约束。Ceres 不支持通用不等式约束,这是 SLAM 工程师进入规控的第一道认知鸿沟。从 least-squares 到 constrained NLP 的迁移不是"加一个库",而是问题建模范式的根本改变——你需要学的是 OSQP/ProxQP(QP)、Ipopt(NLP)、HPIPM(结构化 MPC-QP)这批新求解器。

跨越三:从"10Hz 软实时"到"1kHz 硬实时"

你可能一直以为 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 实时的禁忌

0.2 机械臂 C++ 生态的三大学派对立

进入机械臂方向会发现,开源项目不是松散分布,而是**三大学派鼎立**:

学派 核心项目 许可证 C++ 标准 架构哲学
法国 INRIA 学派 Pinocchio + TSID + Crocoddyl + Coal + ProxQP + Aligator BSD-2 C++17/20/23 纯模板 + 模块化库,每库只做一事做到极致
美国 TRI 学派 Drake(一个巨型库) BSD-3 C++20 + Bazel 集成框架 + System<T> 标量参数化
美国 SwRI 工程派 MoveIt2 + Tesseract + ros2_control BSD-3/Apache-2.0 C++17 pluginlib 运行时多态 + ROS2 深度集成

三派**教学价值都是 5 星**,但路径完全不同: - INRIA 路线 = 学会用 5-7 个独立库拼装(本大纲主选) - Drake 路线 = 只学一个但代码库巨大(M02 选读) - SwRI 路线 = pluginlib/YAML 配置驱动(M14 精读)

对 RL + 具身方向的启示:Drake 路线因 AutoDiffXdsymbolic::Expression 对 RL+MPC 混合研究最友好(同一份代码同时做仿真/优化/符号推导);但工程落地最快的是 MoveIt2 + ros2_control 路线。本大纲以 INRIA 为主干,Drake 在 M02 精读,MoveIt2 在 M14 精读,三派都覆盖。

0.3 前置依赖一览

本大纲章节 依赖 v8 章节 依赖的具体知识点
M01 Pinocchio v8 Ch14(CRTP)、Ch11(Eigen) Sophus CRTP 基础、模板元编程、Eigen Map/Block
M02 动力学库 v8 Ch6(继承多态) 虚函数表、override/final
M03 IK v8 Ch19-20(并发) std::thread/std::atomic 用于 TRAC-IK 并行
M04 碰撞检测 v8 Ch13(模板特化) FCL BVH 模板设计
M05 QP/NLP v8 Ch17(Ceres) 最小二乘基础、Jet AD,扩展到约束优化
M06 AD + codegen v8 Ch17(Ceres) Ceres Jet 的 tape-based AD 心智模型
M11 实时 C++ v8 Ch19-20、Ch35(pmr) STL 分配语义、atomic 内存序
M12 ros2_control v8 Ch31(ROS2 高级) Lifecycle Node、Component、QoS
M13 BT.CPP v8 Ch29(设计模式) Composite Pattern、Strategy Pattern
M14 MoveIt2 v8 Ch29、Ch31 pluginlib(dlopen + 工厂 + 虚函数)

v8 前置三层口径: - 最低可启动:Ch11、Ch14、Ch17、Ch19-20、Ch29、Ch31。可支撑 P01/M01/M03/M05/M11/M13/M14 的入门版和 Quick Start 演示,但不覆盖全部工程细节。 - 推荐补齐:Ch3、Ch6、Ch11、Ch14、Ch17、Ch19-20、Ch29、Ch31、Ch35。适合按 M01-M15 主线学习并进入 M11/M12 实时控制。 - 完整前置:完成 v8 Ch1-Ch46。若未完整完成,至少按附录 C 的章节索引补齐与机械臂直接相关的章节。

0.4 预留接口的明确标注(供后续腿足/无人机/RL 专题复用)

  • ✅ 全方向共享(内容一字不改即可迁移):Part 0 完整、M01(Pinocchio)、M02(动力学库)、M05(QP/NLP)、M06(AD+codegen)、M11(实时 C++)、M13(BT.CPP)——共 8 章
  • ⚪ 部分共享(核心知识共用,但应用场景/API 不同):M04(碰撞检测)、M09(GPU/SIMD)、M10(时间参数化)、M12(ros2_control)、M15(Mini-Manip 模板)
  • ❌ 纯机械臂(不迁移):M03(IK)、M07(OMPL 采样)、M08(轨迹优化规划器)、M14(MoveIt2+MTC)

未来做**腿足专题**时,可直接复制 ✅ 的 8 章,仅在 M12 替换为腿足的 legged_control/OCS2 栈、在 M14 替换为腿足的 TSID/WBC 内容。