本文档属于 Robotics Tutorial 项目,作者:Pengfei Guo,达妙科技。采用 CC BY 4.0 协议,转载请注明出处。
足式方向综合教学大纲¶
版本: v1.0 | 日期: 2026-05-07 定位: 面向完成 C++ 主线 v8 的 SLAM/机器人工程师,系统掌握足式机器人运动控制全栈 数据基础: 27 个教学文件(序章 2 + 正文 24 + 大纲 1),约 42,000 行;覆盖动力学基础设施→腿足控制核心→状态估计与感知→RL 与混合范式→综合实战 总投入: 序章 2 章(通读)+ 正文 24 章 ~29 周;可按 Part 独立选修
快速路径(Quick-Start Tracks)¶
不是每个人都需要 29 周完整课程。以下三条路径面向最常见的职业目标:
路径 A:工业工程师路径(~14 周)¶
目标:在 MuJoCo/IsaacLab 中部署四足 MPC+WBC 控制器,训练并导出 RL locomotion policy。
足式/30_Pinocchio深度精读(Pinocchio浮动基座, 1.5周) → 足式/50_空间向量与浮动基座动力学(空间向量代数, 2周) → 足式/60_QP_NLP建模(QP/NLP, 1.5周)
→ 足式/70_腿足简化模型理论(简化模型, 1.5周) → 足式/90_WBC分层优化与TSID(WBC/TSID, 2周) → 足式/110_OCS2完整栈与双线程MPC(OCS2 MPC, 2周)
→ 足式/190_腿足RL训练栈(RL训练栈, 1.5周) → 足式/240_legged_control精读(legged_control精读, 1.5周)
总计 ~14 周
里程碑: - 第 5 周:能用 Pinocchio 加载四足 URDF 并计算浮动基座正/逆动力学 - 第 9 周:能组装 WBC QP 并在仿真中实现四足站立平衡 - 第 12 周:能部署 OCS2 MPC + WBC 实现 trot 步态 - 第 14 周:能训练 RL policy 并用 legged_control 架构跑通全栈
路径 B:全栈博士路径(~29 周)¶
目标:完整掌握优化/学习/感知三大范式,具备博士研究入门能力。
全部 24 章按顺序学习。
Part I (3周) → Part II (8周) → Part III (5周) → Part IV (3周)
→ Part V (5周) → Part VI (5周)
总计 ~29 周
里程碑: - 第 3 周:Pinocchio + QP 基础设施就绪 - 第 11 周:MPC + WBC + 步态管理全链路打通 - 第 16 周:状态估计 + 落脚点规划闭环 - 第 19 周:实时工程 + 硬件栈认知完成 - 第 24 周:RL 训练/部署/混合范式掌握 - 第 29 周:Mini-Legged 综合实战 + 研究方向选定
路径 C:RL 特化路径(~12 周)¶
目标:专攻端到端 RL locomotion,快速具备 sim-to-real 能力。
足式/30_Pinocchio深度精读(Pinocchio基础, 1周) → 足式/70_腿足简化模型理论(简化模型速览, 1周) → 足式/90_WBC分层优化与TSID(WBC概念, 1周)
→ 足式/190_腿足RL训练栈(RL训练栈, 2周) → 足式/200_RL的CPP部署(RL C++部署, 1.5周) → 足式/210_RL与MPC混合范式(RL+MPC混合, 1.5周)
→ 足式/220_腿足感知数据结构(感知数据结构, 1周) → 足式/180_腿足硬件栈(硬件栈, 1周) → 足式/250_Mini-Legged综合实战(综合实战, 2周)
总计 ~12 周
里程碑: - 第 3 周:理解简化模型与 WBC 概念,知道 RL 要替代什么 - 第 6 周:能在 IsaacLab 训练四足 locomotion policy - 第 9 周:能将 RL policy 导出为 C++ 推理并理解混合范式 - 第 12 周:能在仿真中完成感知驱动的 locomotion 全栈
计算与硬件需求表¶
| 章节范围 | GPU | 真机 | 最低配置 | 推荐配置 | 备注 |
|---|---|---|---|---|---|
| Part I 足式/30_Pinocchio深度精读-50 | 不需要 | 不需要 | 8GB RAM, 4核 | 16GB RAM | Pinocchio+Eigen 纯 CPU |
| Part II 足式/70_腿足简化模型理论-52 | 不需要 | 不需要 | 8GB RAM | 16GB RAM | 理论推导+仿真验证 |
| Part II 足式/90_WBC分层优化与TSID-55 | 不需要 | 推荐四足 | 16GB RAM | 32GB + Go2 | OCS2 实时 MPC 推荐真机 |
| Part II 足式/120_步态管理与接触序列 | 不需要 | 推荐 | 16GB RAM | 32GB + Go2 | 步态在真机验证最直观 |
| Part III 足式/130_腿足状态估计-58 | 不需要 | 推荐 | 16GB RAM | 32GB + Go2 | 状态估计需真机传感器 |
| Part III 足式/150_优化驱动落脚与接触规划-60 | 推荐 | 推荐 | RTX 3060 | RTX 4090 + Go2 | CNN 落脚需 GPU |
| Part IV 足式/170_实时CPP工程-62 | 不需要 | 强烈推荐 | PREEMPT_RT 内核 | Go2 + Jetson Orin | 实时+硬件章节 |
| Part V 足式/190_腿足RL训练栈-65 | 需要(GPU 并行) | 不需要 | RTX 3060 | RTX 4090 | IsaacLab/MJX 训练 |
| Part VI 足式/220_腿足感知数据结构-67 | 推荐 | 推荐 | RTX 3060 | RTX 4090 + Go2 | 高程图+Perceptive MPC |
| Part VI 足式/240_legged_control精读-69 | 推荐 | 强烈推荐 | RTX 3060 | RTX 4090 + Go2 | 全栈部署 |
| Part VI 足式/260_研究方向与博士导引 | 不需要 | 不需要 | -- | -- | 研究方向导引 |
最低可行配置(覆盖全部仿真训练):RTX 4090 24GB + 32GB 系统内存 + Ubuntu 22.04 PREEMPT_RT
工业级配置(含真机部署):上述 + Unitree Go2 四足 + Jetson Orin(部署端)
工业 vs 研究标记¶
| 标记 | 含义 | 代表章节 |
|---|---|---|
| [工业必修] | 工程落地核心能力 | 足式/30_Pinocchio深度精读, 足式/50_空间向量与浮动基座动力学, 足式/60_QP_NLP建模, 足式/90_WBC分层优化与TSID, 足式/110_OCS2完整栈与双线程MPC, 足式/170_实时CPP工程, 足式/180_腿足硬件栈, 足式/200_RL的CPP部署, 足式/240_legged_control精读 |
| [研究必修] | 博士/研究方向核心 | 足式/80_接触力学与约束优化, 足式/100_DDP家族与Crocoddyl, 足式/150_优化驱动落脚与接触规划, 足式/160_感知驱动落脚规划, 足式/210_RL与MPC混合范式, 足式/230_Perceptive_MPC, 足式/260_研究方向与博士导引 |
| [进阶选修] | 按需深入 | 足式/40_CppAD与代码生成, 足式/120_步态管理与接触序列, 足式/140_落脚点规划经典方法, 足式/190_腿足RL训练栈, 足式/220_腿足感知数据结构, 足式/250_Mini-Legged综合实战 |
标记使用说明: - 工业导向学习者可跳过所有 [研究必修] 章节,节约约 35% 时间 - 博士预备者应全部完成,特别重视 [研究必修] 章节的论文精读部分 - [进阶选修] 章节中 足式/190_腿足RL训练栈(RL 训练栈)对 RL 方向学习者为必修
总览路线图¶
v8 主线完成(Ch1-46, 第 1-48 周)
│ C++17 · Eigen · 并发 · SLAM 优化 · ROS2 · CMake/CUDA
▼
┌─────────────────────────────────────────────────────────────────┐
│ 序章: 全景导论 (足式/10_序章上篇_全景与四分法-足式/20_序章下篇_前沿与学习路径, 2章, 通读性质) │
│ 足式/10_序章上篇_全景与四分法 全景与四分法 — 规控本体四分法+基础设施共享+腿足定位 │
│ 足式/20_序章下篇_前沿与学习路径 前沿与学习路径 — 自驾特殊地位+VLA/DiffSim/WorldModel+路径 │
└─────────────────────────┬───────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────┐
│ Part I: 动力学基础设施 (足式/30_Pinocchio深度精读-50, 4章 ~3周) │
│ 足式/30_Pinocchio深度精读 Pinocchio深度精读 [工业必修] │
│ 足式/40_CppAD与代码生成 CppAD与CppADCodeGen [进阶选修] │
│ 足式/50_空间向量与浮动基座动力学 空间向量代数与浮动基座动力学 [工业必修] │
│ 足式/60_QP_NLP建模 QP/NLP建模 [工业必修] │
├─────────────────────────────────────────────────────────────────┤
│ Part II: 腿足控制核心 (足式/70_腿足简化模型理论-56, 6章 ~8周) │
│ 足式/70_腿足简化模型理论 腿足简化模型理论 [工业必修] │
│ 足式/80_接触力学与约束优化 接触力学与约束优化 [研究必修] │
│ 足式/90_WBC分层优化与TSID WBC分层优化与TSID [工业必修] │
│ 足式/100_DDP家族与Crocoddyl DDP家族与Crocoddyl [研究必修] │
│ 足式/110_OCS2完整栈与双线程MPC OCS2完整栈与双线程MPC [工业必修] │
│ 足式/120_步态管理与接触序列 步态管理与接触序列 [进阶选修] │
├─────────────────────────────────────────────────────────────────┤
│ Part III: 状态估计与感知 (足式/130_腿足状态估计-60, 4章 ~5周) │
│ 足式/130_腿足状态估计 腿足状态估计 [工业必修] │
│ 足式/140_落脚点规划经典方法 落脚点规划经典方法 [进阶选修] │
│ 足式/150_优化驱动落脚与接触规划 优化驱动的落脚与接触规划 [研究必修] │
│ 足式/160_感知驱动落脚规划 感知驱动的落脚规划 [研究必修] │
├─────────────────────────────────────────────────────────────────┤
│ Part IV: 实时工程与硬件 (足式/170_实时CPP工程-62, 2章 ~3周) │
│ 足式/170_实时CPP工程 实时C++工程 [工业必修] │
│ 足式/180_腿足硬件栈 腿足硬件栈 [工业必修] │
├─────────────────────────────────────────────────────────────────┤
│ Part V: RL与混合范式 (足式/190_腿足RL训练栈-65, 3章 ~5周) │
│ 足式/190_腿足RL训练栈 腿足RL训练栈 [进阶选修/RL方向必修] │
│ 足式/200_RL的CPP部署 RL的C++部署 [工业必修] │
│ 足式/210_RL与MPC混合范式 RL与MPC混合范式 [研究必修] │
├─────────────────────────────────────────────────────────────────┤
│ Part VI: 感知控制综合与实战 (足式/220_腿足感知数据结构-70, 5章 ~5周) │
│ 足式/220_腿足感知数据结构 腿足感知数据结构 [进阶选修] │
│ 足式/230_Perceptive_MPC Perceptive MPC [研究必修] │
│ 足式/240_legged_control精读 legged_control精读 [工业必修] │
│ 足式/250_Mini-Legged综合实战 Mini-Legged综合实战 [进阶选修] │
│ 足式/260_研究方向与博士导引 研究方向与博士导引 [研究必修] │
└─────────────────────────────────────────────────────────────────┘
章节依赖关系图¶
足式/10_序章上篇_全景与四分法/足式/20_序章下篇_前沿与学习路径 (序章, 可随时回看)
│
▼
足式/30_Pinocchio深度精读 Pinocchio ──→ 足式/40_CppAD与代码生成 CppAD [可延迟]
│ │
▼ ▼
足式/50_空间向量与浮动基座动力学 空间向量 ←────── 足式/40_CppAD与代码生成 (AD导数验证)
│
▼
足式/60_QP_NLP建模 QP/NLP
│
├──────────────────┬──────────────────┐
▼ ▼ ▼
足式/70_腿足简化模型理论 简化模型 足式/80_接触力学与约束优化 接触力学 足式/90_WBC分层优化与TSID WBC/TSID
│ │ │
│ ▼ │
│ 足式/100_DDP家族与Crocoddyl DDP/Crocoddyl ←───┘
│ │
▼ ▼
足式/120_步态管理与接触序列 步态管理 ←── 足式/110_OCS2完整栈与双线程MPC OCS2 MPC ←── 足式/100_DDP家族与Crocoddyl
│ │
▼ ▼
足式/140_落脚点规划经典方法 落脚点经典 足式/130_腿足状态估计 状态估计
│ │
▼ │
足式/150_优化驱动落脚与接触规划 优化落脚 ←────────┘
│
▼
足式/160_感知驱动落脚规划 感知驱动落脚
│
├──────────────────┐
▼ ▼
足式/170_实时CPP工程 实时C++ 足式/180_腿足硬件栈 硬件栈
│ │
▼ ▼
足式/190_腿足RL训练栈 RL训练栈 足式/220_腿足感知数据结构 感知数据结构
│ │
▼ ▼
足式/200_RL的CPP部署 RL C++部署 足式/230_Perceptive_MPC Perceptive MPC
│ │
▼ │
足式/210_RL与MPC混合范式 RL+MPC混合 ───────┤
│ │
▼ ▼
足式/240_legged_control精读 legged_control精读
│
▼
足式/250_Mini-Legged综合实战 Mini-Legged综合实战
│
▼
足式/260_研究方向与博士导引 研究方向与博士导引
各 Part 学习检查点汇总¶
Part I 检查点¶
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能加载 URDF 并计算 FK | 给定关节角输出足端位置,与 MATLAB 对比 | 足式/30_Pinocchio深度精读 |
| 能解释 RNEA 的前向/反向扫描 | 画出递推过程并标注输入输出 | 足式/50_空间向量与浮动基座动力学 |
| 能组装并求解一个简单 QP | 给定 \(H, f, A, b\) 用 ProxQP 求解 | 足式/60_QP_NLP建模 |
Part II 检查点¶
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能写出 LIPM 方程并推导 Capture Point | 手推公式,解释各项物理含义 | 足式/70_腿足简化模型理论 |
| 能说出摩擦锥的线性化方法 | 锥约束 → 多面体近似 → 线性不等式 | 足式/80_接触力学与约束优化 |
| 能组装 WBC 的 QP | 写出等式约束(动力学)和不等式约束(摩擦锥) | 足式/90_WBC分层优化与TSID |
| 能描述 OCS2 的双线程架构 | MPC 线程 + 控制线程的无锁通信 | 足式/110_OCS2完整栈与双线程MPC |
Part III 检查点¶
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能描述腿足 EKF 的状态定义 | 列出所有状态变量及其物理含义 | 足式/130_腿足状态估计 |
| 能推导 Raibert 启发式公式 | 写出三项及各自的物理含义 | 足式/140_落脚点规划经典方法 |
| 能解释 TAMOLS 的优化框架 | SDF 碰撞 + graduated optimization | 足式/160_感知驱动落脚规划 |
Part IV 检查点¶
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能列出 RT 安全禁区清单 | 禁 new/malloc/throw/cout/线程创建 | 足式/170_实时CPP工程 |
| 能配置 SCHED_FIFO + mlockall | 代码示例 + cyclictest 验证 | 足式/170_实时CPP工程 |
| 能描述 Go2 SDK 的通信协议 | UDP + 低层/高层接口区别 | 足式/180_腿足硬件栈 |
Part VI 检查点¶
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能解释高程图的 Kalman 融合 | 写出标量 KF 更新公式 + 解释增益含义 | 足式/220_腿足感知数据结构 |
| 能描述 Perceptive MPC 的地形约束 | 落脚高度 = 高程图查询值 | 足式/230_Perceptive_MPC |
| 能选择一个研究方向并给出动机 | 1 段话描述方向 + 一个具体研究问题 | 足式/260_研究方向与博士导引 |
前置知识依赖矩阵¶
| 本大纲章节 | 依赖 v8 章节 | 关键知识点 |
|---|---|---|
| 足式/30_Pinocchio深度精读 Pinocchio | v8 Ch11(Eigen 高级), Ch14(CRTP), Ch23(李群 manif) | Eigen Map/Block, CRTP 静态多态, SE(3) 流形运算 |
| 足式/40_CppAD与代码生成 CppAD | v8 Ch24(Ceres 自动微分), Ch14(CRTP) | 前向/反向 AD, Jet 类型, 表达式模板 |
| 足式/50_空间向量与浮动基座动力学 空间向量 | v8 Ch11(Eigen), Ch23(李群) | 旋转/变换矩阵, Plucker 坐标, 递归算法 |
| 足式/60_QP_NLP建模 QP/NLP | v8 Ch11(Eigen), Ch24(Ceres) | 凸优化基础, KKT 条件, 稀疏矩阵 |
| 足式/70_腿足简化模型理论-52 简化模型/接触力学 | v8 Ch23(李群), Ch11(Eigen) | 质心动力学, 摩擦锥, LCP/NCP |
| 足式/90_WBC分层优化与TSID WBC | 足式/50_空间向量与浮动基座动力学, 足式/60_QP_NLP建模 | RNEA/ABA, QP 求解, 零空间投影 |
| 足式/100_DDP家族与Crocoddyl-55 DDP/OCS2 | 足式/60_QP_NLP建模, 足式/90_WBC分层优化与TSID | 最优控制, Riccati 递推, SQP |
| 足式/130_腿足状态估计 状态估计 | v8 Ch25-26(VIO/滤波), Ch23(李群) | EKF/ESKF, InEKF, 因子图 |
| 足式/170_实时CPP工程 实时 C++ | v8 Ch17-20(并发), Ch35(pmr 内存) | SCHED_FIFO, mlockall, 无堆分配 |
| 足式/190_腿足RL训练栈-64 RL | v8 Ch45-46(CUDA/Docker), PPO/SAC 基础(自学) | GPU 训练, LibTorch/ONNX, sim-to-real |
最小前置:未完成 v8 者至少补 Ch11(Eigen)、Ch14(CRTP)、Ch17(锁)、Ch19-20(并发)、Ch23(李群)、Ch24(自动微分)、Ch35(pmr 内存) 共 7 章。
学习方法建议¶
高效阅读论文的流程¶
腿足方向的学习离不开大量论文阅读。推荐以下结构化流程:
第一遍(10 分钟):扫描 - 读标题、摘要、图表 - 回答:这篇论文解决什么问题?用了什么方法?结果如何? - 决定是否需要精读
第二遍(1-2 小时):理解 - 读引言、方法、实验 - 跳过推导细节,关注直觉 - 画出方法的系统框图 - 记录 3 个问题:什么不明白?什么有争议?什么可以改进?
第三遍(3-5 小时):精读(仅对核心论文) - 逐行推导每个公式 - 对照开源代码验证理解 - 尝试复现核心实验 - 写一页批判性总结
每周学习计划模板¶
| 日期 | 活动 | 时间 | 产出 |
|---|---|---|---|
| 周一 | 读本周章节的理论部分 | 3-4 小时 | 笔记(核心概念 + 公式) |
| 周二 | 手推关键公式 + 代码验证 | 2-3 小时 | 验证脚本 |
| 周三 | 读对应论文(第一遍 + 第二遍) | 2-3 小时 | 论文笔记 |
| 周四 | 实现累积项目本周模块 | 3-4 小时 | 代码提交 |
| 周五 | 做练习题 + 总结 | 2-3 小时 | 练习报告 |
| 周末 | 机动:补课 / 深挖 / 休息 | 0-4 小时 | - |
总计:每周 12-21 小时。这是可持续的学习节奏——避免"周末突击 12 小时然后一周不看"的模式。
调试技巧¶
腿足系统的调试与传统软件不同——bug 的表现往往是"机器人摔倒"而非"程序崩溃"。以下是几种关键的调试方法:
| 方法 | 适用场景 | 操作 |
|---|---|---|
| 参数扫描 | MPC/WBC 权重不确定 | 自动化扫描参数网格,记录每组参数的性能指标 |
| 录制回放 | 真机出问题但难以复现 | 用 rosbag 录制所有 topic,在仿真中回放分析 |
| 金丝雀测试 | 新代码可能引入 bug | 在已知"正确"的场景(平地站立)上先跑一遍确认不退化 |
| 逐模块替换 | 不确定哪个模块出问题 | 依次用"已知正确"的版本替换每个模块,定位问题源 |
| 可视化 | 观测空间或动作不直观 | 实时绘制关节角度/力矩/速度曲线,发现异常模式 |
生态速览(2026-05 更新)¶
| 工具/框架 | 当前版本 | 状态 | 在本大纲中的位置 |
|---|---|---|---|
| Pinocchio | 3.9.0 | 活跃开发 | 足式/30_Pinocchio深度精读 核心精读,贯穿全部章节 |
| OCS2 | v1.0 | 维护模式(ETH RSL 不再积极开发) | 足式/110_OCS2完整栈与双线程MPC 核心精读,足式/240_legged_control精读 架构参考 |
| Crocoddyl | 3.2 | 活跃(重大 API 重构,不向后兼容) | 足式/100_DDP家族与Crocoddyl 核心精读 |
| Aligator/ProxDDP | T-RO 2025 | 新项目推荐(Crocoddyl 后继) | 足式/100_DDP家族与Crocoddyl 延伸,新项目应迁移 |
| TSID | Pinocchio 生态 | 活跃 | 足式/90_WBC分层优化与TSID 核心 |
| ProxQP | ProxSuite | 活跃 | 足式/60_QP_NLP建模 推荐 QP 后端 |
| OSQP | 0.6.x | 稳定 | 足式/60_QP_NLP建模 备选 QP |
| Ipopt | 3.14+ | 稳定 | 足式/60_QP_NLP建模 NLP 核心 |
| IsaacLab | 3.0 (Newton) | 活跃(Newton 后端 = MuJoCo Warp) | 足式/190_腿足RL训练栈 RL 训练主平台 |
| MuJoCo | 3.7.0 | 活跃(MJX GPU 成熟) | 足式/190_腿足RL训练栈 仿真后端 |
| MuJoCo Playground | v0.2.0 | RSS 2025 Outstanding Demo | 足式/190_腿足RL训练栈 RL 训练参考平台 |
| rsl_rl | ETH RSL | 活跃 | 足式/190_腿足RL训练栈 RL 训练库 |
| legged_control | ETH RSL | 维护模式 | 足式/240_legged_control精读 精读,架构参考 |
| rl_sar | 社区 | 活跃 | 足式/200_RL的CPP部署 RL 部署参考 |
| CppAD | 20240000+ | 稳定 | 足式/40_CppAD与代码生成 精读 |
| CppADCodeGen | -- | 稳定 | 足式/40_CppAD与代码生成 精读 |
生态选型指南¶
选择工具时,以下决策树可以帮助快速定位:
动力学库选型:
MPC 框架选型:
需要实时 MPC?
├── 是 → 新项目?
│ ├── 是 → Aligator(ProxDDP,最新)
│ └── 否(已有 OCS2 代码)→ 继续用 OCS2(维护模式但稳定)
└── 否 → Crocoddyl 3.2(离线轨迹优化)
RL 训练平台选型:
需要 GPU 并行训练?
├── 是 → NVIDIA GPU?
│ ├── 是 → IsaacLab 3.0(Newton + MuJoCo Warp)
│ └── 否 → MuJoCo Playground(JAX,跨平台)
└── 否 → 单 CPU 训练(rsl_rl + MuJoCo)
QP 求解器选型:
关键生态事件(2025-2026): - OCS2 进入维护模式:存量代码巨大,教学价值不减,但新项目应考虑 Aligator - Crocoddyl 3.2 重大 API 重构:足式/100_DDP家族与Crocoddyl 以 3.2 API 为准 - IsaacLab 3.0 Newton 后端实质运行 MuJoCo Warp:打破 IsaacLab=PhysX 的绑定 - MuJoCo Playground 获 RSS 2025 Outstanding Demo:MuJoCo GPU RL 训练栈生产就绪
Per-Part 章节详情¶
Part I:动力学基础设施(第 49-51 周,~3 周)¶
完成本 Part 后你能做什么:用 Pinocchio 加载任意浮动基座 URDF,计算 FK/ID/FD 及其解析导数;用 CppAD 做自动微分验证;用 ProxQP/Ipopt 组装和求解 QP/NLP。这是后续所有章节的计算基础。
足式/30_Pinocchio深度精读 Pinocchio 深度精读(1038 行)⭐ [工业必修]¶
精读 Pinocchio 3.x 在浮动基座场景下的架构与算法,掌握 CRTP 访问者模式、标量参数化与 Lie 群抽象。
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | v8 Ch11(Eigen 高级), Ch14(CRTP), Ch23(李群 manif) |
| 标记 | [工业必修] |
科研脉络: - Featherstone (1987, 2008):空间向量代数 + RNEA/ABA 算法奠基 - Carpentier & Mansard (2018):刚体动力学算法的解析导数 - Carpentier et al. (2019):Pinocchio C++ 库架构设计
教学目标:
- 能加载浮动基座 URDF 并正确配置 SE(3) 根关节
- 能用 double/CppAD::AD<double> 双标量实例化同一模型
- 能调用 FK/RNEA/ABA 并理解 O(n) 复杂度来源
核心知识点:
1. Model/Data 分离 + Algorithm 无状态函数式设计
2. CRTP 访问者模式:JointModelBase<Derived> 静态多态 dispatch
3. 标量参数化:ModelTpl<Scalar> 支持 double/AutoDiffXd/casadi::SX
4. Lie 群抽象:LieGroupBase 的 integrate/difference/interpolate
5. 浮动基座特化:JointModelFreeFlyer 的 SE(3) 积分
6. RNEA/ABA 的模板展开路径与 O(n) 递推细节
7. 解析导数 computeABADerivatives() vs 有限差分的精度/速度
8. Coal(hpp-fcl 3.x) 碰撞接口
前沿连接: - Aligator(Crocoddyl 后继)的 Pinocchio 3.x 深度依赖 - 可微仿真中 Pinocchio 作为解析梯度源
练习:
1. 加载 Go2 URDF,分别用 double 和 AD<double> 计算 RNEA,验证 AD 导数与解析导数一致性 (<1e-10)
2. 画出 JointModelRevoluteTpl 的 CRTP 继承链调用图
预估时间:1.5 周
足式/40_CppAD与代码生成 CppAD 与 CppADCodeGen(1443 行)⭐⭐ [进阶选修,可延迟]¶
掌握 CppAD 前向/反向模式 AD 与 CppADCodeGen 的编译期代码生成,为 MPC/优化提供高效梯度。
| 属性 | 值 |
|---|---|
| 周数 | 1 周(可延迟至 足式/100_DDP家族与Crocoddyl/55 前补) |
| 前置依赖 | 足式/30_Pinocchio深度精读, v8 Ch24(Ceres 自动微分) |
| 标记 | [进阶选修] |
科研脉络: - Griewank & Walther (2008):"Evaluating Derivatives" 自动微分经典教材 - Bell (2005):CppAD 设计原理
教学目标: - 理解前向模式(tangent) vs 反向模式(adjoint) 的适用场景 - 能用 CppADCodeGen 将动力学函数预编译为 C 代码
核心知识点: 1. AD 的 tape 录制机制与计算图 2. 前向模式:\(n\) 次传播获得 \(n\) 列雅可比(输入维度小时高效) 3. 反向模式:\(m\) 次传播获得 \(m\) 行雅可比(输出维度小时高效) 4. Jacobian/Hessian 的稀疏模式利用 5. CppADCodeGen:离线生成 .c 文件 → dlopen 动态加载 6. OCS2 中 AD 的实际使用模式
前沿连接: - JAX 的 jit+vmap 与 CppAD 的设计哲学对比 - 可微仿真中 AD 穿透物理引擎
练习: 1. 对 3-DOF 摆臂的正向运动学做前向/反向 AD,对比 Jacobian 耗时 2. 用 CppADCodeGen 预编译 Go2 的 RNEA,测量与运行期 AD 的速度差异
预估时间:1 周
足式/50_空间向量与浮动基座动力学 空间向量代数与浮动基座动力学(1984 行)⭐ [工业必修]¶
从 Featherstone 空间向量代数出发,完整推导浮动基座多体动力学方程,掌握 RNEA/ABA/CRBA 的 O(n) 递推算法。
| 属性 | 值 |
|---|---|
| 周数 | 2 周 |
| 前置依赖 | 足式/30_Pinocchio深度精读, v8 Ch23(李群) |
| 标记 | [工业必修] |
科研脉络: - Featherstone (1983):空间向量代数初创 - Featherstone (2008):"Rigid Body Dynamics Algorithms" 经典教材 - Orin et al. (2013):质心动力学(Centroidal Dynamics) 与质心动量矩阵
教学目标: - 能手推 Plucker 坐标系下的 6D 力/运动变换 - 能用 RNEA 做逆动力学、ABA 做正动力学 - 理解浮动基座 \(M\dot{v} + h = S^T\tau + J_c^T\lambda\) 中每一项的物理意义
核心知识点: 1. Plucker 坐标:6D 运动向量 \(\hat{v} = (\omega, v)\) 与力向量 \(\hat{f} = (n, f)\) 2. 空间变换矩阵 \({}^AX_B\) 的构造与链式组合 3. 空间惯量矩阵 \(I_s\) 的 6x6 表示与平行轴定理 4. RNEA 递推:前向扫描(速度/加速度传播) + 反向扫描(力传播) 5. CRBA:复合刚体算法计算关节空间质量矩阵 \(M(q)\) 6. ABA:关节空间正动力学 \(\ddot{q} = M^{-1}(\tau - h)\) 的 O(n) 算法 7. 质心动力学与质心动量矩阵 \(A_G\):\(h_G = A_G \dot{q}\) 8. 浮动基座动力学方程:欠驱动约束 \(S\) 矩阵的含义
前沿连接: - SRBD(单刚体动力学) 是质心动力学的最简化版本——足式/70_腿足简化模型理论 将详细推导 - WBC 的 QP 直接以此方程为等式约束——足式/90_WBC分层优化与TSID 核心
练习:
1. 手推 2-link 浮动基座臂的 \(M, h\) 并与 Pinocchio 数值对比
2. 实现一个最简 RNEA(不用 Pinocchio),验证与 pinocchio::rnea() 结果一致
预估时间:2 周
足式/60_QP_NLP建模 QP/NLP 建模(1727 行)⭐ [工业必修]¶
掌握凸 QP 与非线性 NLP 的建模范式和求解器工程,为 WBC/MPC 提供优化基础设施。
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | v8 Ch11(Eigen 稀疏), v8 Ch24(优化基础) |
| 标记 | [工业必修] |
科研脉络: - Goldfarb & Idnani (1983):活跃集 QP 算法(qpOASES 基础) - Stellato et al. (2020):OSQP 算子分裂算法 - Bambade et al. (2022):ProxQP 近端算子+信赖域
教学目标: - 能手动组装 \(\min \frac{1}{2}x^THx + g^Tx\) s.t. \(Ax \leq b\) 并调用三大求解器 - 能为 WBC 的力分配组装完整 QP - 能用 Ipopt 求解轨迹优化 NLP
核心知识点: 1. QP 标准形式与 KKT 条件 2. 三大 QP 求解器对比:qpOASES(活跃集) / OSQP(ADMM) / ProxQP(近端+信赖域) 3. 稀疏矩阵工程:Eigen::SparseMatrix + CSC 格式 4. 热启动(warm-start) 策略与 MPC 循环中的应用 5. NLP 求解器 Ipopt:内点法、障碍参数、收敛准则 6. NLP 建模工具:CasADi 符号化建模 + Ipopt/SNOPT 后端 7. 二阶锥约束(SOCP):摩擦锥的精确锥表示 8. 求解器选型决策树:问题规模 × 稀疏性 × 实时性
前沿连接: - ProxQP 是 Pinocchio 生态推荐的 WBC QP 后端 - HPIPM 是 OCS2 的 MPC QP 后端
练习: 1. 组装一个四足站立的力分配 QP(12 个接触力变量 + 摩擦锥约束),用三大求解器分别求解并对比耗时 2. 用 CasADi + Ipopt 求解一个简化的 2D 跳跃轨迹优化
预估时间:1.5 周
Part II:腿足控制核心(第 52-59 周,~8 周)¶
完成本 Part 后你能做什么:理解 LIPM/SRBD 简化模型理论,掌握摩擦锥/互补约束接触力学,能组装 WBC QP 和 OCS2 MPC,理解步态管理与接触序列调度。这是足式控制的数学核心。
足式/70_腿足简化模型理论 腿足简化模型理论(1602 行)⭐ [工业必修]¶
从 LIPM 到 SLIP 到质心动力学,建立足式机器人的简化建模体系。
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/50_空间向量与浮动基座动力学(浮动基座动力学), 足式/60_QP_NLP建模(QP 基础) |
| 标记 | [工业必修] |
科研脉络: - Kajita et al. (2001):LIPM + ZMP 双足行走 - Blickhan (1989):SLIP 弹簧-质量模型 - Di Carlo et al. (2018):MIT Cheetah 凸 MPC(SRBD 的工业化里程碑)
教学目标: - 理解 LIPM/DCM/SRBD/SLIP 四种简化模型的数学推导与适用场景 - 能推导 SRBD 的线性化状态空间方程 - 理解简化模型与全身模型的精度-速度权衡
核心知识点: 1. LIPM(线性倒立摆模型):恒定 CoM 高度假设 → \(\ddot{x} = \omega^2(x - p)\) 2. DCM(发散质心运动):\(\xi = x + \dot{x}/\omega\),捕获点概念 3. ZMP/CoP:零力矩点与支撑多边形稳定性判据 4. SRBD(单刚体动力学):忽略腿部惯性 → 12 维状态空间 5. SRBD 线性化与离散化:MPC 凸化的数学基础 6. SLIP(弹簧加载倒立摆):腿部弹性建模,跑步/跳跃 7. Centroidal Dynamics:质心动量矩阵 \(A_G\) 与角动量守恒 8. 四种模型的精度-速度对比表
前沿连接: - SRBD 是 MIT Cheetah 凸 MPC 的核心假设 - 全身 MPC(Aligator/OCS2)不再做 SRBD 假设,但计算量更大
练习: 1. 推导 SRBD 的连续时间状态空间方程 \(\dot{x} = Ax + Bu\),写出 \(A, B\) 矩阵 2. 对比 LIPM 和 SRBD 在四足 trot 步态下的质心轨迹预测误差
预估时间:1.5 周
足式/80_接触力学与约束优化 接触力学与约束优化(1756 行)⭐⭐ [研究必修]¶
从 Coulomb 摩擦到互补约束,建立接触力学的完整数学框架。
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/60_QP_NLP建模(QP/NLP), 足式/70_腿足简化模型理论(简化模型) |
| 标记 | [研究必修] |
科研脉络: - Coulomb (1785):库仑摩擦定律 - Stewart & Trinkle (1996):LCP 接触模型 - Pang et al. (2023):接触的准动态平滑化
教学目标: - 理解 Signorini 互补条件与 Coulomb 摩擦锥 - 能将接触约束建模为 LCP/NCP - 理解接触不连续性对优化/学习的挑战
核心知识点: 1. Signorini 互补条件:\(\phi \geq 0, \lambda \geq 0, \phi \cdot \lambda = 0\) 2. Coulomb 摩擦锥:\(\sqrt{f_x^2 + f_y^2} \leq \mu f_z\) 3. 摩擦锥线性化:多面体近似(4面/8面/16面)与 SOC 精确锥 4. LCP(线性互补问题):\(w = Mz + q, w \geq 0, z \geq 0, w^Tz = 0\) 5. 接触模式枚举:\(n\) 个接触点 → \(3^n\) 种模式(分离/滑动/粘着) 6. 松弛与平滑化:Fischer-Burmeister 函数、对数障碍 7. 事件驱动 vs 时间步进仿真 8. MuJoCo 的软接触模型 vs Drake 的 Hydroelastic 模型
前沿连接: - 接触隐式轨迹优化(足式/150_优化驱动落脚与接触规划 核心) - 可微仿真中接触梯度的病态性处理
练习: 1. 手推 2D 点接触的 LCP 公式并用 Lemke 算法求解 2. 对比 4 面/8 面摩擦锥近似在四足站立 QP 中的力分配差异
预估时间:1.5 周
足式/90_WBC分层优化与TSID WBC 分层优化与 TSID(1534 行)⭐ [工业必修]¶
掌握全身控制器(WBC) 的分层 QP 架构与 TSID 框架,实现多任务优先级控制。
| 属性 | 值 |
|---|---|
| 周数 | 2 周 |
| 前置依赖 | 足式/50_空间向量与浮动基座动力学(浮动基座动力学), 足式/60_QP_NLP建模(QP), 足式/80_接触力学与约束优化(接触力学) |
| 标记 | [工业必修] |
科研脉络: - Sentis & Khatib (2005):分层任务框架 - Del Prete et al. (2015):浮动基座 TSID - Kim et al. (2019):MIT Cheetah WBIC
教学目标: - 能组装浮动基座 WBC 的完整 QP(决策变量: \(\ddot{q}, \tau, \lambda\)) - 理解严格优先级(null-space) vs 软优先级(weighted QP) 的数学区别 - 能用 TSID 框架配置任务栈
核心知识点: 1. WBC 标准 QP:\(\min \|J\ddot{q} + \dot{J}\dot{q} - \ddot{x}_d\|^2\) s.t. 动力学 + 接触 2. 决策变量选择:\((\ddot{q}, \tau, \lambda)\) 三元组 3. 等式约束:\(M\dot{v} + h = S^T\tau + J_c^T\lambda\)(浮动基座动力学) 4. 不等式约束:摩擦锥 + 关节限位 + CoP 约束 5. 严格优先级:零空间投影级联求解 6. 软优先级:加权代价 QP 一次求解 7. TSID 框架 API:任务定义、约束注册、求解器配置 8. MIT Cheetah WBIC 的简化版实现(legged_control HierarchicalWbc)
前沿连接: - WBC 是 MPC 的下游执行器:MPC 给出参考轨迹/力,WBC 映射到关节力矩 - RL 范式中 WBC 被神经网络替代——足式/210_RL与MPC混合范式 讨论这一取舍
练习: 1. 手动组装四足站立 WBC QP(躯体高度跟踪 + 摩擦锥 + 动力学约束),用 ProxQP 求解 2. 用 TSID 配置三优先级任务(平衡 > 躯体姿态 > 正则化),在仿真中验证
预估时间:2 周
足式/100_DDP家族与Crocoddyl DDP 家族与 Crocoddyl(1677 行)⭐⭐ [研究必修]¶
从 DDP/iLQR 理论到 Crocoddyl 3.2 实战,掌握基于射击法的轨迹优化。
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/60_QP_NLP建模(NLP), 足式/90_WBC分层优化与TSID(WBC 概念) |
| 标记 | [研究必修] |
科研脉络: - Mayne (1966):DDP 原始算法 - Tassa et al. (2012):iLQR(DDP 的 Gauss-Newton 近似) - Mastalli et al. (2020):Crocoddyl FDDP(可行性驱动 DDP) - Jallet et al. (2025):Aligator/ProxDDP(T-RO 2025)
教学目标: - 能推导 DDP 的 Bellman 递推与 Riccati 因式分解 - 能用 Crocoddyl 3.2 API 构建腿足轨迹优化问题 - 理解 FDDP 与经典 DDP 在可行性处理上的差异
核心知识点: 1. DDP 数学:值函数二阶展开 → 反向 Riccati → 前向 rollout 2. iLQR:忽略 \(f_{xx}\) 项 → Gauss-Newton 近似 → 更鲁棒 3. FDDP:放松初始轨迹可行性 → 收敛域更大 4. Crocoddyl 3.2 API:ActionModel / CostModel / ShootingProblem / Solver 5. 约束处理:增广拉格朗日法 vs 罚函数法 6. Aligator/ProxDDP:近端 DDP + 并行 Riccati → 新项目推荐 7. 与 MPC 的关系:DDP 作为 MPC 的求解内核 8. 计算效率:7-DOF 臂 ~2ms/iter, 浮动基座 ~5ms/iter
前沿连接: - OCS2 内部用 SQP(非 DDP)但数学思想类似 - 可微仿真 + DDP = 端到端可微 MPC
练习: 1. 手推 1D 双积分器的 DDP 反向传播,写出 \(K, k\) 增益矩阵 2. 用 Crocoddyl 3.2 构建四足跳跃轨迹优化(简化模型),可视化质心轨迹
预估时间:1.5 周
足式/110_OCS2完整栈与双线程MPC OCS2 完整栈与双线程 MPC(1963 行)⭐ [工业必修]¶
精读 OCS2 的 SQP-RTI + HPIPM 实时 MPC 架构,掌握双线程异步 MPC 的工程实现。
| 属性 | 值 |
|---|---|
| 周数 | 2 周 |
| 前置依赖 | 足式/100_DDP家族与Crocoddyl(DDP/轨迹优化), 足式/90_WBC分层优化与TSID(WBC) |
| 标记 | [工业必修] |
科研脉络: - Farshidian et al. (2017):OCS2 原始论文 - Sleiman et al. (2021):Unified MPC 四足+臂 - Grandia et al. (2023):Perceptive Locomotion 感知 MPC
教学目标: - 理解 SQP-RTI(实时迭代)的"一次 QP 近似"策略 - 能配置 OCS2 的腿足 MPC 完整管线 - 理解双线程 MPC 的 policy 插值机制
核心知识点: 1. SQP-RTI:将 NLP 分解为每步一个 QP → 实时可行 2. HPIPM:Riccati 递推求解结构化 QP → \(O(N \cdot n^3)\) 3. OCS2 架构:SystemDynamics / CostFunction / Constraint / RolloutBase 4. 双线程设计:后台线程求解 MPC → 前台线程插值执行 5. 代价函数设计:追踪代价 + 终端代价 + 正则化 6. 约束处理:摩擦锥 / 运动学极限 / 自碰撞 7. 步态调度接口:接触序列 → MPC 时域窗口 8. OCS2 legged_robot 示例配置详解
前沿连接: - Perceptive MPC(足式/230_Perceptive_MPC)在 OCS2 基础上加入地形约束 - OCS2 进入维护模式——新项目迁移 Aligator 的路径
练习: 1. 配置 OCS2 legged_robot 示例,在 MuJoCo 中跑 Go2 trot 步态 2. 修改 MPC 时域长度和 QP 迭代次数,分析对跟踪精度和计算延迟的影响
预估时间:2 周
足式/120_步态管理与接触序列 步态管理与接触序列(1592 行)⭐⭐ [进阶选修]¶
掌握步态图、接触序列调度与自动步态生成的理论与工程实现。
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | 足式/110_OCS2完整栈与双线程MPC(OCS2 MPC) |
| 标记 | [进阶选修] |
科研脉络: - Raibert (1986):经典步态分类(walk/trot/pace/bound/gallop) - Bellicoso et al. (2018):ANYmal 步态管理 - Villarreal et al. (2020):MPC 内自动接触序列优化
教学目标: - 理解步态图(gait graph) 的周期/占空比/相位偏移参数化 - 能实现 FSM 步态调度器 - 理解自动步态生成相对于手工步态的优劣
核心知识点:
1. 步态参数化:周期 \(T\)、占空比 \(D\)、相位偏移 \(\phi_i\)
2. 经典步态:walk(0.75) / trot(0.5) / pace(0.5) / bound(0.5) / gallop
3. 步态图(Gait Graph):时间-接触的矩阵表示
4. FSM 步态调度器:swing/stance 状态机 + 早触/晚触处理
5. OCS2 步态接口:ModeSchedule + TargetTrajectory
6. 自动步态生成:MIQP / GCS / RL 发现步态
7. 步态过渡:trot→walk 平滑切换策略
8. 人形步态的特殊性:单支撑/双支撑/重心偏移
前沿连接: - RL 可以完全绕过手工步态设计——足式/190_腿足RL训练栈/65 的替代路线 - 接触序列优化(足式/150_优化驱动落脚与接触规划)是自动步态生成的数学形式化
练习: 1. 实现一个四足步态管理器,支持 trot/walk/pace 三种步态切换 2. 在 OCS2 中修改步态周期和占空比,观察对 MPC 跟踪质量的影响
预估时间:1 周
Part III:状态估计与感知(第 60-64 周,~5 周)¶
完成本 Part 后你能做什么:实现腿足状态估计器(EKF/InEKF),掌握 Raibert 启发式落脚、优化驱动落脚与感知驱动落脚三种范式。这是连接控制与真实世界的桥梁。
足式/130_腿足状态估计 腿足状态估计(1446 行)⭐ [工业必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | v8 Ch25-26(VIO/滤波), 足式/50_空间向量与浮动基座动力学(浮动基座), 足式/80_接触力学与约束优化(接触力学) |
| 标记 | [工业必修] |
科研脉络: - Bloesch et al. (2013):四足 EKF 状态估计 - Hartley et al. (2020):InEKF 在腿足上的应用 - Wisth et al. (2021):VILENS 视觉-惯性-腿式因子图
教学目标: - 能实现基于运动学+IMU 的腿足 EKF - 理解 InEKF 相比 EKF 的优势(误差线性化在群上精确) - 理解接触状态对状态估计的影响
核心知识点: 1. 腿足状态估计的特殊性:浮动基座无绝对位置传感器 2. IMU + 腿部运动学融合:前向运动学提供"虚拟 GPS" 3. EKF 状态定义:\([p, v, R, b_a, b_g, p_{foot}]\) 4. InEKF:误差定义在 Lie 群上 → 误差传播精确线性化 5. 接触检测:力阈值 / 电流阈值 / 概率模型 6. 接触切换对滤波器的影响:协方差重置策略 7. 视觉-惯性-腿式融合(VILENS 架构) 8. legged_control 中 LinearKalmanFilter 的简化实现
前沿连接: - SLAM 背景学习者的独特优势:InEKF 与 VIO 方法同源 - 因子图状态估计是学术前沿方向
练习: 1. 在 legged_control 框架中跑 Go2 状态估计,分析漂移来源 2. 对比 EKF 和 InEKF 在快速步态下的估计精度
预估时间:1.5 周
足式/140_落脚点规划经典方法 落脚点规划经典方法(1585 行)⭐⭐ [进阶选修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | 足式/70_腿足简化模型理论(简化模型/DCM), 足式/120_步态管理与接触序列(步态管理) |
| 标记 | [进阶选修] |
科研脉络: - Raibert (1986):Raibert 启发式落脚公式 - Pratt et al. (2006):捕获点理论(DCM 驱动落脚) - Jenelten et al. (2020):基于 DCM 的鲁棒落脚
教学目标: - 能推导 Raibert 启发式公式及其物理直觉 - 理解捕获点/DCM 与落脚的关系 - 能实现基本的启发式落脚控制器
核心知识点: 1. Raibert 启发式:\(p_f = p_{hip} + \frac{v \cdot T_s}{2} + k(v - v_d)\) 2. 公式各项的物理意义:对称项 + 反馈修正项 3. 捕获点(Capture Point):使机器人能停下来的最小落脚位置 4. DCM 驱动落脚:\(\xi_{ref}\) → \(p_f\) 的映射 5. 地形约束:可行落脚区域的几何裁剪 6. 落脚时序:提前/延迟触地的处理策略 7. Raibert 的局限性:不考虑地形/不考虑多步前瞻
前沿连接: - 足式/150_优化驱动落脚与接触规划 用优化方法替代启发式 - 足式/160_感知驱动落脚规划 用感知方法学习落脚
练习: 1. 实现 Raibert 启发式落脚器,在平地 trot 步态中验证 2. 在有坡度地形上测试 Raibert 公式的失败模式
预估时间:1 周
足式/150_优化驱动落脚与接触规划 优化驱动的落脚与接触规划(1527 行)⭐⭐⭐ [研究必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/110_OCS2完整栈与双线程MPC(OCS2 MPC), 足式/140_落脚点规划经典方法(经典落脚), 足式/80_接触力学与约束优化(接触力学) |
| 标记 | [研究必修] |
科研脉络: - Winkler et al. (2018):TOWR 离线轨迹+落脚联合优化 - Deits & Tedrake (2014):GCS(Graph of Convex Sets) 混合规划 - Posa et al. (2014):Contact-Implicit Trajectory Optimization
教学目标: - 理解落脚与轨迹联合优化的数学建模 - 理解 MIQP/接触隐式/GCS 三种处理离散接触模式的方法 - 能用 TOWR 做离线轨迹+落脚规划
核心知识点: 1. 轨迹+落脚联合优化:\(\min J\) s.t. 动力学+接触+运动学+地形 2. MIQP:整数变量编码接触模式 → 分支定界求解 3. 接触隐式(Contact-Implicit):互补约束松弛 → 连续优化 4. GCS(Graph of Convex Sets):将混合问题转化为图搜索+凸优化 5. TOWR 框架:样条参数化 + Ifopt 求解器 6. 计算复杂度分析:指数(MIQP) vs 多项式(CI) vs 图搜索(GCS) 7. 在线 vs 离线:实时性约束下的降阶策略
前沿连接: - 接触隐式 MPC 是 2024-2025 最活跃的研究方向之一 - GCS 在 MIT Drake 生态中有完整实现
练习: 1. 用 TOWR 优化四足跨越台阶的轨迹,可视化落脚点序列 2. 对比固定步态(手工落脚) 和 TOWR(优化落脚) 在崎岖地形上的通过率
预估时间:1.5 周
足式/160_感知驱动落脚规划 感知驱动的落脚规划(1529 行)⭐⭐⭐ [研究必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | 足式/140_落脚点规划经典方法(经典落脚), 足式/150_优化驱动落脚与接触规划(优化落脚) |
| 标记 | [研究必修] |
科研脉络: - Magana et al. (2019):高程图驱动的落脚评分 - Miki et al. (2022):ANYmal 感知 locomotion(RL + 高程图) - Agarwal et al. (2023):Learning Perceptive Locomotion
教学目标: - 理解高程图/costmap 作为落脚评分输入的管线 - 理解 CNN/RL 学习落脚策略的优势与局限 - 理解感知延迟/噪声对落脚质量的影响
核心知识点: 1. 高程图(Elevation Map):2.5D 地形表示 → 落脚可行性评分 2. 落脚评分函数:平坦度 + 可达性 + 运动学约束 3. CNN 落脚网络:输入高程图 patch → 输出落脚评分图 4. RL 端到端落脚:观测包含高程图扫描 → 策略直接输出足端目标 5. Miki et al. (2022) 架构:teacher-student + 特权信息 6. 感知延迟补偿:预测当前地形 vs 延迟补偿 7. 不确定性处理:地形高度不确定性对落脚安全的影响
前沿连接: - Perceptive MPC(足式/230_Perceptive_MPC)将地形感知融入 MPC 约束 - 感知数据结构(足式/220_腿足感知数据结构)是本章的工程基础
练习: 1. 用 grid_map 库构建简单高程图,实现基于平坦度的落脚评分 2. 分析 Miki et al. (2022) 的 teacher-student 架构设计动机
预估时间:1 周
Part IV:实时工程与硬件(第 65-67 周,~3 周)¶
完成本 Part 后你能做什么:掌握 1kHz 硬实时 C++ 编程的完整禁区清单,理解四足硬件栈(电机/传感器/通信/驱动器)。这是从仿真到真机的必经之路。
足式/170_实时CPP工程 实时 C++ 工程(1876 行)⭐ [工业必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | v8 Ch17-20(并发), v8 Ch35(pmr 内存) |
| 标记 | [工业必修] |
科研脉络: - Linux 6.12 PREEMPT_RT 主线合并(2024.11) - ROS2 Real-time 设计文档
教学目标: - 掌握 RT 安全 C++ 禁区清单:禁堆分配/禁异常/禁 IO - 能配置 SCHED_FIFO + mlockall + EIGEN_RUNTIME_NO_MALLOC 三件套 - 能用 cyclictest 验证实时性
核心知识点: 1. PREEMPT_RT 主线化:Linux 6.12 正式合并 2. RT 安全禁区清单:禁 new/delete/malloc/throw/catch/cout/线程创建 3. 标准三件套:SCHED_FIFO + mlockall + EIGEN_RUNTIME_NO_MALLOC 4. realtime_tools:RealtimeBuffer / RealtimePublisher / LockFreeQueue 5. 无锁并发:std::atomic 内存序 / x86 TSO vs ARM 弱序 6. 优先级反转与 PTHREAD_PRIO_INHERIT 7. cyclictest 验证:RT 内核 <50us vs 非 RT >700us 8. 从 SLAM 10Hz 到控制 1kHz 的认知跨越
前沿连接: - OCS2 双线程 MPC(足式/110_OCS2完整栈与双线程MPC)的 RT 安全通信直接复用本章知识 - RL 部署(足式/200_RL的CPP部署)的推理热路径也需要 RT 安全
练习: 1. cyclictest 对比 RT vs 非 RT 内核延迟 2. 故意触发 EIGEN_RUNTIME_NO_MALLOC 审计,修复后验证
预估时间:1.5 周
足式/180_腿足硬件栈 腿足硬件栈(1733 行)⭐ [工业必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/170_实时CPP工程(实时 C++) |
| 标记 | [工业必修] |
科研脉络: - Seok et al. (2015):MIT Cheetah 准直驱电机设计 - Unitree Go2/G1 技术文档
教学目标: - 理解准直驱电机的高带宽/低惯量/可反驱优势 - 掌握 Unitree Go2 SDK 的通信与控制接口 - 理解 IMU/编码器/力传感器的数据融合管线
核心知识点: 1. 电机驱动方式演进:液压 → 高减速比 → 准直驱 2. 准直驱电机特性:低减速比(9:1) + 高力矩密度 + 可反驱 3. 电机控制模式:位置/速度/力矩/混合模式 4. Unitree Go2 SDK:UDP 通信 + 低层/高层控制接口 5. EtherCAT 通信:工业级实时总线协议 6. IMU 选型与标定:MEMS 特性/噪声模型/温度补偿 7. 关节编码器:绝对/增量编码器选型与校准 8. 安全机制:过流保护/过温保护/软件限位/硬件限位
前沿连接: - 人形机器人硬件栈(G1/H1)是四足的超集 - RL 部署(足式/200_RL的CPP部署)需要理解硬件延迟对 sim-to-real gap 的影响
练习: 1. 用 Unitree Go2 SDK(仿真模式)实现单腿 PD 站立 2. 分析 Go2 通信延迟:测量 UDP 往返时间的分布
预估时间:1.5 周
Part V:RL 与混合范式(第 68-72 周,~5 周)¶
完成本 Part 后你能做什么:在 IsaacLab/MuJoCo Playground 训练四足 RL locomotion policy,导出为 C++ 推理模块,理解 RL+MPC 混合范式的设计权衡。
足式/190_腿足RL训练栈 腿足 RL 训练栈(1473 行)⭐⭐ [进阶选修 / RL 方向必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 2 周 |
| 前置依赖 | PPO/SAC 基础(自学), v8 Ch45-46(CUDA/Docker) |
| 标记 | [进阶选修 / RL 方向必修] |
科研脉络: - Hwangbo et al. (2019):ANYmal RL locomotion 里程碑 - Rudin et al. (2022):legged_gym + rsl_rl 开源训练框架 - Miki et al. (2022):感知 RL locomotion
教学目标: - 能在 IsaacLab 中训练四足 locomotion policy - 理解 reward shaping / curriculum learning / domain randomization 的设计原则 - 能分析训练曲线并调试常见问题
核心知识点: 1. IsaacLab + legged_gym + rsl_rl 训练管线 2. 观测空间设计:本体感知(关节角/速度/IMU) + 特权信息(地形高度) 3. 动作空间设计:关节位置偏移 vs 力矩 vs PD 目标 4. Reward shaping:追踪奖励 + 正则化(能量/平滑度/空气时间) 5. Curriculum learning:地形难度渐进 + 速度命令渐进 6. Domain Randomization:质量/摩擦/延迟/电机强度 7. Teacher-Student / Privileged Learning:教师有特权信息,学生仅用本体感知 8. 训练调试:reward 不涨/策略抖动/sim-to-real gap 的排查
前沿连接: - MuJoCo Playground 提供了替代 IsaacLab 的 JAX 生态训练方案 - 足式/210_RL与MPC混合范式 的混合范式将 RL 与 MPC 结合
练习: 1. 在 IsaacLab 训练 Go2 trot locomotion,记录训练曲线并分析各 reward 分项 2. 对比有/无 domain randomization 的 sim-to-real 性能差异
预估时间:2 周
足式/200_RL的CPP部署 RL 的 C++ 部署(1315 行)⭐ [工业必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/190_腿足RL训练栈(RL 训练), 足式/170_实时CPP工程(实时 C++) |
| 标记 | [工业必修] |
科研脉络: - PyTorch TorchScript / LibTorch 部署管线 - ONNX Runtime 跨框架推理 - rl_sar 腿足 RL 部署框架
教学目标: - 能将 PyTorch 策略导出为 TorchScript 并用 LibTorch C++ 推理 - 能用 ONNX Runtime 实现跨平台部署 - 理解高频控制(1kHz) + 低频策略(50Hz) 的异步架构
核心知识点: 1. 导出管线:PyTorch → TorchScript (.pt) → LibTorch C++ 加载 2. 导出管线:PyTorch → ONNX (.onnx) → ONNX Runtime / TensorRT 3. 推理延迟:CPU vs GPU / 批量 vs 单步 / 量化 4. 高频-低频异步架构:1kHz PD 内环 + 50Hz RL 外环 5. 观测预处理:归一化/历史堆叠/特权信息剥离 6. 动作后处理:限幅/平滑滤波/安全约束 7. rl_sar 框架:ROS2 + LibTorch + 部署模板 8. Jetson Orin 部署:ARM 编译 + TensorRT 加速
前沿连接: - 足式/210_RL与MPC混合范式 混合范式中 RL policy 作为 residual controller - 足式/250_Mini-Legged综合实战 综合实战中 RL 部署是全栈的一部分
练习: 1. 将训练好的 Go2 policy 导出为 TorchScript,用 LibTorch 在 C++ 中推理并测量延迟 2. 用 ONNX Runtime 做同样的推理,对比 LibTorch 的延迟和便捷性
预估时间:1.5 周
足式/210_RL与MPC混合范式 RL 与 MPC 混合范式(1224 行)⭐⭐⭐ [研究必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/110_OCS2完整栈与双线程MPC(OCS2 MPC), 足式/190_腿足RL训练栈(RL 训练) |
| 标记 | [研究必修] |
科研脉络: - Silver et al. (2018):Residual Policy Learning - Lee et al. (2020):Teacher-Student for Locomotion - Gangapurwala et al. (2022):RL + MPC 协同
教学目标: - 理解纯 RL / 纯 MPC / 混合范式的优劣权衡 - 掌握 Teacher-Student / Residual Policy / RL 初始化 MPC 三种混合架构 - 能分析哪种范式适合哪种场景
核心知识点: 1. 纯 MPC 的优势与局限:物理保证 vs 模型精度 vs 计算量 2. 纯 RL 的优势与局限:泛化性 vs 安全性 vs 可解释性 3. Teacher-Student:教师用特权信息(MPC/全知) → 学生仅用本体感知 4. Residual Policy:\(u = u_{MPC} + \pi_{RL}(s)\),RL 补偿 MPC 的模型误差 5. RL 初始化 MPC:用 RL 提供 MPC 的初始猜测/参考轨迹 6. 安全约束:CBF(Control Barrier Function) + RL 的安全层 7. 混合范式选型决策树:安全性要求 × 模型精度 × 计算预算 × 泛化需求 8. 2024-2025 趋势:端到端 RL 在平地场景占优,混合范式在复杂地形/安全关键场景不可替代
前沿连接: - 足式/230_Perceptive_MPC Perceptive MPC 是混合范式的前沿实例 - 足式/260_研究方向与博士导引 博士导引中混合范式是核心研究方向之一
练习: 1. 在仿真中实现 Residual Policy:MPC baseline + RL 补偿,对比纯 MPC 在扰动下的鲁棒性 2. 分析一篇 2024-2025 的混合范式论文,总结其架构设计动机
预估时间:1.5 周
Part V 学习检查点¶
完成 Part V 后,用以下问题自测掌握程度:
| 检查项 | 合格标准 | 不合格则回顾 |
|---|---|---|
| 能说出 PPO 的核心更新公式 | 写出 clip 目标函数,解释为什么需要 clip | 足式/190_腿足RL训练栈 |
| 能区分 TorchScript trace vs script | 说出各自的适用场景和限制 | 足式/200_RL的CPP部署 |
| 能描述 4 级安全降级 | Hold → Stand → Damp → E-Stop,每级的触发条件 | 足式/200_RL的CPP部署 |
| 能描述 RL+MPC 混合的 3 种架构 | Residual / Hierarchical / DTC,各自的优劣 | 足式/210_RL与MPC混合范式 |
| 能解释 sim-to-real 的核心挑战 | 域随机化的原理和实践 | 足式/190_腿足RL训练栈 |
Part V 常见困难与应对¶
| 困难 | 原因 | 应对 |
|---|---|---|
| IsaacLab 安装失败 | CUDA/Python/PyTorch 版本三方冲突 | 使用官方 Docker 镜像;严格按照 IsaacLab 文档的版本矩阵安装 |
| RL 训练 reward 不涨 | 奖励权重不适合当前机器人 | 先用官方 anymal_c_flat 配置验证环境正确,再逐步修改 |
| C++ 部署时输出与 Python 不一致 | 观测归一化参数或关节顺序不匹配 | 用 64.5 节的逐项对齐清单排查 |
| Jetson 上推理慢 | 未使用 GPU 推理或未优化 | 使用 ONNX + TensorRT 组合;FP16 量化 |
Part VI:感知控制综合与实战(第 73-77 周,~5 周)¶
完成本 Part 后你能做什么:掌握高程图/costmap 感知数据结构,理解 Perceptive MPC 的地形约束融入,精读 legged_control 完整代码栈,从零搭建四足全栈控制器,定位博士研究方向。
足式/220_腿足感知数据结构 腿足感知数据结构(1271 行)⭐⭐ [进阶选修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | v8 Ch27-28(PCL/OpenCV), 足式/130_腿足状态估计(状态估计) |
| 标记 | [进阶选修] |
科研脉络: - Fankhauser et al. (2014):Robot-Centric Elevation Mapping - Miki et al. (2022):学习型高程图应用
教学目标: - 能用 grid_map 库维护机器人中心的高程图 - 理解点云 → 高程图 → costmap 的处理管线 - 理解感知数据在 MPC/RL 中的接口设计
核心知识点: 1. 高程图(Elevation Map):2.5D 网格 + 方差估计 2. grid_map 库:多层地图 + ROS2 集成 3. 点云到高程图:投影 + 滤波 + 插值 4. Costmap:从高程图派生(坡度/粗糙度/台阶检测) 5. 体素地图:3D 占据率表示(OctoMap/Voxblox) 6. GPU 加速感知:nvblox + CUDA ESDF 生成 7. 感知-控制接口:高程图如何输入 MPC/RL 的观测空间
前沿连接: - 足式/230_Perceptive_MPC Perceptive MPC 直接使用高程图作为约束 - 足式/160_感知驱动落脚规划 感知驱动落脚使用 costmap 评分
练习: 1. 用 grid_map 从点云构建高程图并可视化 2. 实现坡度 costmap 层,标注不可通行区域
预估时间:1 周
足式/230_Perceptive_MPC Perceptive MPC(1457 行)⭐⭐⭐ [研究必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1.5 周 |
| 前置依赖 | 足式/110_OCS2完整栈与双线程MPC(OCS2 MPC), 足式/160_感知驱动落脚规划(感知驱动落脚), 足式/220_腿足感知数据结构(感知数据结构) |
| 标记 | [研究必修] |
科研脉络: - Grandia et al. (2022):Perceptive Locomotion through Nonlinear MPC - Jenelten et al. (2024):DTC (Digital Twin Control) - Agarwal et al. (2023):Learning Perceptive Locomotion
教学目标: - 理解如何将地形信息融入 MPC 约束和代价函数 - 理解 Grandia 2022 的运动学可行性约束设计 - 能在 OCS2 中添加地形约束
核心知识点: 1. 地形约束的形式化:落脚点高度 = 高程图(x, y) 2. 运动学可行性约束:足端可达范围与地形的交集 3. 地形代价:引导落脚到平坦区域 4. 滚动地平线中地形预测的延迟处理 5. Signed Distance Field 在 MPC 碰撞约束中的应用 6. MPC + 高程图的计算管线:感知线程 → 地图更新 → MPC 线程读取 7. DTC(Digital Twin Control):仿真器内嵌 MPC 的新范式
前沿连接: - 与 RL 感知 locomotion 的竞争/互补关系 - 足式/260_研究方向与博士导引 博士导引中 Perceptive Control 是核心研究方向
练习: 1. 在 OCS2 legged_robot 中添加简化地形约束(台阶场景),验证 MPC 能自适应调整步高 2. 精读 Grandia 2022 论文,总结其运动学可行性约束的数学推导
预估时间:1.5 周
足式/240_legged_control精读 legged_control 精读(1713 行)⭐ [工业必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | 足式/110_OCS2完整栈与双线程MPC(OCS2), 足式/90_WBC分层优化与TSID(WBC), 足式/130_腿足状态估计(状态估计), 足式/170_实时CPP工程(实时 C++) |
| 标记 | [工业必修] |
科研脉络: - ETH RSL legged_control 开源栈 - OCS2 + HierarchicalWbc + LinearKalmanFilter 三模块集成
教学目标: - 精读 legged_control 的完整代码结构 - 理解 MPC → WBC → 硬件驱动 的数据流 - 能在此基础上修改/扩展控制器
核心知识点: 1. 代码架构:legged_controllers / legged_estimation / legged_wbc 2. MPC 模块:OCS2 legged_robot 封装 + ROS2 接口 3. WBC 模块:HierarchicalWbc(~300 行,教学友好) 4. 状态估计模块:LinearKalmanFilter 5. FSM(有限状态机):站立 / 行走 / 恢复 6. 参数管理:YAML 配置 + 动态参数 7. 实时安全:控制循环中的无堆分配实践 8. 调试技巧:PlotJuggler + ROS2 话题监控
前沿连接: - legged_control 是理解足式全栈的最佳入口 - 足式/250_Mini-Legged综合实战 Mini-Legged 在此基础上从零重建
练习: 1. 精读 HierarchicalWbc 源码,标注 QP 组装的每一行对应 足式/90_WBC分层优化与TSID 的哪个知识点 2. 修改 WBC 的任务权重,观察对 trot 步态质量的影响
预估时间:1 周
足式/250_Mini-Legged综合实战 Mini-Legged 综合实战(2049 行)⭐⭐ [进阶选修]¶
| 属性 | 值 |
|---|---|
| 周数 | 2 周 |
| 前置依赖 | 全部 足式/30_Pinocchio深度精读-68 |
| 标记 | [进阶选修] |
科研脉络: - 全栈集成工程实践
教学目标: - 从零搭建四足全栈控制器(不依赖 legged_control 的现成代码) - 能独立完成 Pinocchio → WBC → MPC → 状态估计 → 步态管理 → 硬件驱动 的全链路
核心知识点: 1. 系统架构设计:模块划分 + 接口定义 + 通信拓扑 2. Pinocchio 动力学后端:URDF 加载 + FK/ID/碰撞 3. WBC 模块:简化版 TSID QP 组装 4. MPC 模块:简化版 SRBD MPC(可选 OCS2 或自写凸 MPC) 5. 状态估计模块:IMU + 运动学 EKF 6. 步态管理模块:trot/walk FSM 7. 仿真环境:MuJoCo + ROS2 桥接 8. 性能度量:控制频率 / 跟踪精度 / 稳定裕度
前沿连接: - 这是博士研究的实验平台基础 - 可扩展为 RL+MPC 混合系统
练习: 1. 按模块顺序逐步搭建,每完成一个模块写单元测试 2. 最终交付:GitHub 仓库 + 技术报告 + 仿真视频
预估时间:2 周
足式/260_研究方向与博士导引 研究方向与博士导引(1301 行)⭐⭐⭐ [研究必修]¶
| 属性 | 值 |
|---|---|
| 周数 | 1 周 |
| 前置依赖 | 全部 足式/30_Pinocchio深度精读-69(至少完成 80%) |
| 标记 | [研究必修] |
科研脉络: - 2024-2026 腿足机器人研究前沿综述
教学目标: - 理解足式控制领域的开放问题 - 能定位自己的研究兴趣在知识图谱中的位置 - 能撰写博士研究计划的初步框架
核心知识点: 1. 开放问题一览:接触隐式 MPC 实时化 / sim-to-real gap / 安全保证 / 全身灵巧操作 2. 研究方向 A:Perceptive Control(感知+控制联合优化) 3. 研究方向 B:RL+MPC 混合范式(安全 + 泛化) 4. 研究方向 C:SLAM + Legged 紧耦合(你的独特赛道) 5. 研究方向 D:可微仿真 + 腿足(梯度穿透物理) 6. 研究方向 E:Foundation Models + Locomotion(VLA 延伸) 7. 顶会/期刊定位:ICRA / IROS / RSS / CoRL / T-RO / RA-L 8. 博士申请策略:导师选择 / 研究计划撰写 / 背景差异化
前沿连接: - 与 足式/20_序章下篇_前沿与学习路径 序章下篇的前沿讨论互补 - 复合方向(复合/10_复合机器人全景-100)是足式的自然延伸
练习: 1. 选择一个研究方向,精读 3 篇 2024-2025 年的代表论文,撰写 1 页研究构想 2. 画出你的知识图谱:标注已掌握/待补充/感兴趣的节点
预估时间:1 周
学习路径建议¶
按背景分¶
| 背景 | 建议路径 | 预估时间 | 重点章节 |
|---|---|---|---|
| 本科生(有 C++ 基础) | 先补 v8 Ch1-20 → 路径 A | 10+14 = 24 周 | 足式/30_Pinocchio深度精读/49/53/55/63/68 |
| SLAM 硕士/工程师 | 直接路径 B | 29 周 | 全部;足式/130_腿足状态估计 是你的独特优势 |
| RL 研究者 | 路径 C → 按需补 MPC | 12+6 = 18 周 | 足式/190_腿足RL训练栈/64/65 为起点,回补 足式/90_WBC分层优化与TSID/55 |
| 机械臂工程师 | 跳过 Part I(Pinocchio 已熟)→ 路径 A | 10 周 | 足式/70_腿足简化模型理论/53/55/61/68 |
| 博士生(足式方向) | 路径 B + 足式/260_研究方向与博士导引 深入 | 29+ 周 | 全部 + 论文精读 |
按目标分¶
| 目标 | 必修章节 | 可跳过 | 特别重视 |
|---|---|---|---|
| 工业部署 | 足式/30_Pinocchio深度精读/49/50/53/55/61/62/64/68 | 足式/40_CppAD与代码生成/52/54/59/60/67/70 | legged_control 精读(足式/240_legged_control精读) |
| 博士预备 | 全部 | 无 | 足式/210_RL与MPC混合范式/67/70 + 论文精读 |
| RL 专攻 | 足式/30_Pinocchio深度精读/51/53/63/64/65/69 | 足式/40_CppAD与代码生成/52/54/56/58/59 | IsaacLab 训练(足式/190_腿足RL训练栈) |
| 感知+控制 | 足式/30_Pinocchio深度精读/49/53/55/57/60/66/67 | 足式/40_CppAD与代码生成/56/63/64 | Perceptive MPC(足式/230_Perceptive_MPC) |
与其他子方向交叉引用地图¶
足式 <-> 机械臂¶
| 足式章节 | 机械臂章节 | 关联内容 |
|---|---|---|
| 足式/30_Pinocchio深度精读 Pinocchio 浮动基座 | M01 Pinocchio 固定基座 | 同一库,浮动基座是固定基座的超集 |
| 足式/50_空间向量与浮动基座动力学 空间向量代数 | M02 动力学库对比 | Featherstone 算法是两者共同的理论基础 |
| 足式/90_WBC分层优化与TSID WBC/TSID | M08 操作空间控制 | 零空间投影框架共享,WBC 是 OSC 在浮动基座的推广 |
| 足式/110_OCS2完整栈与双线程MPC OCS2 MPC | M05 轨迹优化 | OCS2 框架可跑机械臂也可跑腿足 |
| 足式/170_实时CPP工程 实时 C++ | M11 实时 C++ | 同一章节内容共享,应用场景不同 |
| 足式/200_RL的CPP部署 RL C++ 部署 | M12 ros2_control + RL | LibTorch/ONNX 部署管线共享 |
足式 <-> 复合¶
| 足式章节 | 复合章节 | 关联内容 |
|---|---|---|
| 足式/90_WBC分层优化与TSID WBC | 复合/170_qm_control精读-89 qm_control/Deep WBC/Visual WBC | WBC 扩展到腿+臂多接触 |
| 足式/110_OCS2完整栈与双线程MPC OCS2 MPC | 复合/30_多模态MPC 多模态 MPC / 复合/70_轮足混合MPC 轮足 MPC | OCS2 统一框架跨本体复用 |
| 足式/190_腿足RL训练栈 RL 训练 | 复合/40_RL全身控制基础 RL 全身控制 / 复合/80_Wheel_Legged_Gym_RL 轮足 RL | PPO/SAC 训练管线共享 |
| 足式/210_RL与MPC混合范式 RL+MPC 混合 | 复合/210_RAMBO混合MPC_RL RAMBO 混合 MPC/RL | 混合范式设计模式共享 |
足式 <-> SLAM¶
| 足式章节 | SLAM v8 章节 | 关联内容 |
|---|---|---|
| 足式/130_腿足状态估计 腿足状态估计 | Ch25-26 VIO/滤波 | InEKF 与 VIO 滤波方法同源 |
| 足式/220_腿足感知数据结构 感知数据结构 | Ch33 点云处理 | 高程图/costmap 与点云处理共享数据结构 |
| 足式/230_Perceptive_MPC Perceptive MPC | Ch38-40 建图 | 地形感知 MPC 需要局部地图输入 |
足式 <-> 数学¶
| 足式章节 | 数学章节 | 关联内容 |
|---|---|---|
| 足式/50_空间向量与浮动基座动力学 空间向量代数 | 李群/李代数 | SE(3) 运算是所有算法的数学基础 |
| 足式/60_QP_NLP建模 QP/NLP | 凸优化 | WBC/MPC 的 QP 求解依赖凸优化理论 |
| 足式/100_DDP家族与Crocoddyl DDP/Crocoddyl | 最优控制 | Bellman 方程/Pontryagin 原理是 DDP 理论根基 |
足式 <-> 仿真¶
| 足式章节 | 仿真章节 | 关联内容 |
|---|---|---|
| 足式/190_腿足RL训练栈 RL 训练栈 | S03 GPU 生态 | IsaacLab/MuJoCo Playground 是 RL 训练的仿真后端 |
| 足式/80_接触力学与约束优化 接触力学 | S01 MuJoCo 核心引擎 | MuJoCo 接触模型是 足式/80_接触力学与约束优化 理论的工程实现 |
| 足式/210_RL与MPC混合范式 RL+MPC 混合 | S05 可微分 MPC | 可微仿真 + MPC 是混合范式的前沿 |
附录¶
附录 A:已知缺失话题与未来扩展点¶
| 话题 | 缺失原因 | 扩展建议 |
|---|---|---|
| 人形 WBC 全身控制 | 属于复合方向(复合/220_经典人形全身控制-95) | 足式完成后进入复合方向 |
| 可微仿真 + 腿足 | 仿真方向(S04-S05) 覆盖 | 博士研究可深入 |
| VLA + Locomotion | 2025+ 新兴方向,尚不成熟 | 足式/260_研究方向与博士导引 中作为前沿方向讨论 |
| 多足协作 | 超出单体控制范围 | 复合方向 复合/280_多机协作LocoMani 覆盖 |
| 腿足 SLAM 紧耦合 | 需要 SLAM + 足式双背景 | 博士研究的独特赛道 |
| 液压驱动足式 | 工业小众 | 补充材料可扩展 |
| 柔性关节建模 | 足式/50_空间向量与浮动基座动力学 简略提及 | 可扩展为独立节 |
附录 B:推荐论文精读清单¶
经典必读(按时间排序)¶
| 序号 | 论文 | 年份 | 关联章节 | 难度 |
|---|---|---|---|---|
| 1 | Featherstone, "Rigid Body Dynamics Algorithms" | 2008 | 足式/50_空间向量与浮动基座动力学 | ⭐⭐ |
| 2 | Raibert, "Legged Robots That Balance" | 1986 | 足式/70_腿足简化模型理论/58 | ⭐ |
| 3 | Kajita et al., "LIPM + ZMP Biped Walking" | 2001 | 足式/70_腿足简化模型理论 | ⭐⭐ |
| 4 | Pratt et al., "Capture Point" | 2006 | 足式/70_腿足简化模型理论/58 | ⭐⭐ |
| 5 | Sentis & Khatib, "Whole-Body Behaviors" | 2005 | 足式/90_WBC分层优化与TSID | ⭐⭐⭐ |
| 6 | Carpentier et al., "The Pinocchio C++ Library" | 2019 | 足式/30_Pinocchio深度精读 | ⭐⭐ |
当代核心(2018-2023)¶
| 序号 | 论文 | 年份 | 关联章节 | 难度 |
|---|---|---|---|---|
| 7 | Di Carlo et al., "MIT Cheetah Convex MPC" | 2018 | 足式/70_腿足简化模型理论/55 | ⭐⭐ |
| 8 | Kim et al., "Highly Dynamic Quadruped via WBIC" | 2019 | 足式/90_WBC分层优化与TSID | ⭐⭐⭐ |
| 9 | Hwangbo et al., "ANYmal RL Locomotion" | 2019 | 足式/190_腿足RL训练栈 | ⭐⭐ |
| 10 | Mastalli et al., "Crocoddyl: DDP for Multi-Contact" | 2020 | 足式/100_DDP家族与Crocoddyl | ⭐⭐⭐ |
| 11 | Hartley et al., "InEKF for Legged Robots" | 2020 | 足式/130_腿足状态估计 | ⭐⭐⭐ |
| 12 | Rudin et al., "legged_gym + rsl_rl" | 2022 | 足式/190_腿足RL训练栈 | ⭐⭐ |
| 13 | Miki et al., "Perceptive RL Locomotion" | 2022 | 足式/160_感知驱动落脚规划/63 | ⭐⭐⭐ |
| 14 | Grandia et al., "Perceptive Locomotion NL-MPC" | 2022 | 足式/230_Perceptive_MPC | ⭐⭐⭐⭐ |
前沿追踪(2024-2026)¶
| 序号 | 论文 | 年份 | 关联章节 | 难度 |
|---|---|---|---|---|
| 15 | Jallet et al., "Aligator/ProxDDP" | T-RO 2025 | 足式/100_DDP家族与Crocoddyl | ⭐⭐⭐⭐ |
| 16 | Pang et al., "Contact Smoothing" | 2023 | 足式/80_接触力学与约束优化/59 | ⭐⭐⭐⭐ |
| 17 | Jenelten et al., "DTC Digital Twin Control" | 2024 | 足式/230_Perceptive_MPC | ⭐⭐⭐⭐ |
| 18 | MuJoCo Playground | RSS 2025 | 足式/190_腿足RL训练栈 | ⭐⭐ |
附录 C:开源项目索引¶
| 项目 | 组织 | 语言 | 主要用途 | 关联章节 |
|---|---|---|---|---|
| pinocchio | stack-of-tasks (INRIA) | C++/Python | 刚体动力学 | 足式/30_Pinocchio深度精读/49 全栈 |
| OCS2 | ETH RSL | C++ | MPC 框架 | 足式/110_OCS2完整栈与双线程MPC/67/68 |
| Crocoddyl | LAAS-CNRS | C++/Python | DDP/iLQR 轨迹优化 | 足式/100_DDP家族与Crocoddyl |
| Aligator | LAAS-CNRS | C++/Python | ProxDDP 新一代轨迹优化 | 足式/100_DDP家族与Crocoddyl |
| TSID | Pinocchio 生态 | C++/Python | 全身控制 | 足式/90_WBC分层优化与TSID |
| ProxQP/ProxSuite | Simple-Robotics | C++ | QP 求解器 | 足式/60_QP_NLP建模/53 |
| OSQP | -- | C | QP 求解器 | 足式/60_QP_NLP建模 |
| Ipopt | COIN-OR | C++ | NLP 求解器 | 足式/60_QP_NLP建模 |
| HPIPM | Gianluca Frison | C | 结构化 QP | 足式/110_OCS2完整栈与双线程MPC |
| CasADi | -- | C++/Python | 符号化 NLP 建模 | 足式/60_QP_NLP建模/54 |
| IsaacLab | NVIDIA | Python | GPU RL 训练平台 | 足式/190_腿足RL训练栈 |
| MuJoCo | Google DeepMind | C | 物理仿真器 | 足式/190_腿足RL训练栈 |
| MuJoCo Playground | Google DeepMind | Python(JAX) | GPU RL 训练 | 足式/190_腿足RL训练栈 |
| rsl_rl | ETH RSL | Python | RL 训练库 | 足式/190_腿足RL训练栈 |
| legged_gym | ETH RSL | Python | RL 训练环境 | 足式/190_腿足RL训练栈 |
| legged_control | ETH RSL | C++ | 四足全栈控制 | 足式/240_legged_control精读 |
| rl_sar | 社区 | C++/Python | RL sim-to-real 部署 | 足式/200_RL的CPP部署 |
| TOWR | ETH RSL | C++ | 离线轨迹+落脚优化 | 足式/150_优化驱动落脚与接触规划 |
| grid_map | ANYbotics | C++ | 高程图库 | 足式/220_腿足感知数据结构 |
| CppAD | -- | C++ | 自动微分 | 足式/40_CppAD与代码生成 |
累积项目:Mini-Legged 全栈控制器¶
贯穿 Part I-VI 的持续项目,每完成一个 Part 新增一个模块:
| Part | 新增模块 | 累积能力 |
|---|---|---|
| Part I | Pinocchio 后端 + QP 求解器 | 加载 URDF,计算动力学,组装/求解 QP |
| Part II | WBC + 简化模型 MPC + 步态 FSM | 仿真中四足站立→行走 |
| Part III | 状态估计器 + 落脚规划 | 闭环运行不依赖真值 |
| Part IV | 实时化 + 硬件接口 | 可部署到真机 |
| Part V | RL policy 集成 | 可选 RL 替代/辅助 MPC |
| Part VI | 感知管线 + 全栈调试 | 完整系统 + 可展示 |
最终交付:GitHub 仓库 + 技术报告 + 仿真/真机视频
累积项目的详细阶段规划¶
Phase 1:基础设施搭建(Part I 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| URDF 加载 | Go2 URDF 文件 | Pinocchio Model + Data | nq=19, nv=18, njoints=13 |
| 正向运动学 | 关节角 \(q\) | 足端位置 \(p_{\text{foot}}\) | 与 MATLAB 对比误差 < \(10^{-10}\) |
| 逆动力学 | \(q, \dot{q}, \ddot{q}\) | 关节扭矩 \(\tau\) | RNEA 结果与 ABA 交叉验证 |
| QP 求解 | 代价矩阵 \(H\), 约束 \(A, b\) | 最优解 \(x^*\) | ProxQP 和 OSQP 交叉验证 |
Phase 2:控制核心搭建(Part II 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| 简化模型 MPC | 参考速度 \((v_x, v_y, \omega)\) | 质心力/力矩参考 | 在平地仿真中稳定行走 10 秒 |
| WBC | MPC 参考 + 运动学约束 | 关节扭矩 \(\tau\) | 关节扭矩不超限,满足摩擦锥 |
| 步态 FSM | 步态类型参数 | 接触序列 | trot/walk/pace 三种步态可切换 |
| 集成测试 | 速度命令 | 稳定行走 | 平地 trot 1 m/s,持续 30 秒不倒 |
Phase 3:闭环感知(Part III 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| 状态估计 EKF | IMU + 关节编码器 | 基座位置/速度/姿态 | 10 米直线行走漂移 < 0.3 m |
| Raibert 落脚 | 当前速度 + 参考速度 | 落脚位置 | 在平地上与 Capture Point 对比 |
| 闭环行走 | 无真值依赖 | 稳定行走 | 仿真中闭环行走 60 秒不倒 |
Phase 4:真机就绪(Part IV 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| 实时框架 | SCHED_FIFO + mlockall | 1 kHz 控制循环 | cyclictest P99 < 50 \(\mu\)s |
| 硬件接口 | Unitree SDK | 关节角度/速度读写 | SDK 通信延迟 < 2 ms |
| 安全保护 | 关节限位 + 看门狗 | 异常停机 | 故意发送超限命令,验证保护生效 |
Phase 5:RL 集成(Part V 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| RL 训练 | IsaacLab 环境 | 策略 checkpoint | 训练 50M 步后 reward 收敛 |
| C++ 部署 | TorchScript / ONNX | 实时推理 | P99 延迟 < 500 \(\mu\)s |
| 安全降级 | SafetyGuard | 4 级降级机制 | NaN 注入测试通过 |
| 仿真验证 | Gazebo + ros2_control | 稳定行走 | 行走 60 秒,推扰恢复 |
Phase 6:全栈系统(Part VI 完成时)
| 子任务 | 输入 | 输出 | 验证标准 |
|---|---|---|---|
| 高程图 | 深度相机点云 | grid_map + traversability | 20 Hz 更新,覆盖率 > 80% |
| 感知落脚 | traversability 地图 | 优化落脚点 | 在不平地形上存活率 > 90% |
| 全栈集成 | 所有模块 | 端到端系统 | 在混合地形上自主行走 2 分钟 |
| 性能调优 | Profiling 数据 | 优化瓶颈 | CPU 利用率 < 70%,GPU 利用率 < 50% |
学习效果自评矩阵¶
学习者可以用以下矩阵评估自己在每个核心能力上的掌握程度:
能力等级定义¶
| 等级 | 含义 | 标志性行为 |
|---|---|---|
| L0 | 未接触 | 不知道这个概念存在 |
| L1 | 了解 | 能说出概念的定义和用途 |
| L2 | 理解 | 能从原理层面解释为什么这样设计 |
| L3 | 应用 | 能在已有框架中使用这个技术 |
| L4 | 创造 | 能独立实现或改进这个技术 |
核心能力自评表¶
| 能力领域 | L0 | L1 | L2 | L3 | L4 | 对应章节 |
|---|---|---|---|---|---|---|
| 刚体动力学 | ||||||
| 浮动基座动力学方程 | □ | □ | □ | □ | □ | 足式/50_空间向量与浮动基座动力学 |
| RNEA/ABA 算法 | □ | □ | □ | □ | □ | 足式/50_空间向量与浮动基座动力学 |
| 接触力学与摩擦锥 | □ | □ | □ | □ | □ | 足式/80_接触力学与约束优化 |
| 控制核心 | ||||||
| 简化模型 MPC | □ | □ | □ | □ | □ | 足式/70_腿足简化模型理论 |
| WBC / TSID | □ | □ | □ | □ | □ | 足式/90_WBC分层优化与TSID |
| DDP / Crocoddyl | □ | □ | □ | □ | □ | 足式/100_DDP家族与Crocoddyl |
| OCS2 MPC 架构 | □ | □ | □ | □ | □ | 足式/110_OCS2完整栈与双线程MPC |
| 步态管理 | □ | □ | □ | □ | □ | 足式/120_步态管理与接触序列 |
| 感知与状态估计 | ||||||
| IMU + 运动学融合 | □ | □ | □ | □ | □ | 足式/130_腿足状态估计 |
| 高程图构建 | □ | □ | □ | □ | □ | 足式/220_腿足感知数据结构 |
| 感知落脚规划 | □ | □ | □ | □ | □ | 足式/160_感知驱动落脚规划 |
| RL 与部署 | ||||||
| PPO 训练管线 | □ | □ | □ | □ | □ | 足式/190_腿足RL训练栈 |
| C++ 模型部署 | □ | □ | □ | □ | □ | 足式/200_RL的CPP部署 |
| RL + MPC 混合 | □ | □ | □ | □ | □ | 足式/210_RL与MPC混合范式 |
| 工程能力 | ||||||
| 实时 C++ 编程 | □ | □ | □ | □ | □ | 足式/170_实时CPP工程 |
| 硬件栈集成 | □ | □ | □ | □ | □ | 足式/180_腿足硬件栈 |
| 全栈系统调试 | □ | □ | □ | □ | □ | 足式/250_Mini-Legged综合实战 |
各路径的目标等级¶
| 能力 | 路径 A(工业工程师) | 路径 B(全栈博士) | 路径 C(RL 特化) |
|---|---|---|---|
| 浮动基座动力学 | L3 | L4 | L2 |
| MPC | L3 | L4 | L2 |
| WBC | L3 | L3 | L1 |
| RL 训练 | L2 | L3 | L4 |
| C++ 部署 | L4 | L3 | L4 |
| 高程图 | L2 | L3 | L3 |
| 研究方法论 | L1 | L3 | L2 |
常见学习障碍与应对策略¶
障碍 1:"数学太多,看不下去"¶
症状:在 足式/50_空间向量与浮动基座动力学 或 足式/80_接触力学与约束优化 时感到挫败,想跳过推导直接用库。
诊断:这通常是因为数学基础不够扎实(线性代数、优化、李群),而不是"不需要数学"。
应对:
| 方法 | 操作 | 预期效果 |
|---|---|---|
| 回补前置 | 花 2 周回看 01_数学 的线代和李群章节 | 建立数学直觉,推导不再是天书 |
| 手推核心 | 选 3-5 个关键公式(如 RNEA、Kalman 增益、Raibert 公式),在纸上手推一遍 | 理解公式的"骨架",不再畏惧 |
| 代码验证 | 每推导一步,用 Python 数值验证 | 建立信心:我推的是对的 |
障碍 2:"代码跑不起来"¶
症状:花了两天配环境(Pinocchio + OCS2 + IsaacLab),各种依赖冲突。
诊断:腿足生态的依赖链极长(Pinocchio → Crocoddyl → OCS2 → ros2_control → 硬件 SDK),版本冲突是常态,不是你的问题。
应对:
| 方法 | 操作 | 预期效果 |
|---|---|---|
| Docker 环境 | 用项目提供的 Docker 镜像 | 跳过 90% 的环境配置 |
| 分步验证 | 每装一个库就跑一次 hello world | 定位到具体是哪个库出问题 |
| 求助社区 | 在 GitHub issue 中贴完整的报错信息 | 开源社区通常 24-48 小时内回复 |
障碍 3:"理论和工程感觉是两回事"¶
症状:推导推得很开心,但写代码时不知道怎么把公式变成代码。
诊断:理论-工程的鸿沟是正常的。公式是连续域的,代码是离散的;公式是无限精度的,代码是有限精度的;公式不考虑时间约束,代码必须在 1 ms 内完成。
应对:
| 方法 | 操作 | 预期效果 |
|---|---|---|
| 精读开源代码 | 选一个小项目(如 rl_sar),逐行对照论文公式和代码 | 建立"公式→代码"的映射能力 |
| 先简化后完整 | 先用 Python 实现简化版(不管效率),再用 C++ 重写 | 先确保逻辑对,再优化性能 |
| 累积项目 | 按 Part 进度做累积项目 | 每周的代码产出让理论变得具体 |
障碍 4:"不知道研究方向怎么选"¶
症状:读了很多论文,每个方向都觉得有意思,但选不出一个。
诊断:这是"选择过载"——选项太多时反而无法行动。
应对:
| 方法 | 操作 | 预期效果 |
|---|---|---|
| 排除法 | 先排除你确定不想做的方向 | 从 6 个变成 3 个 |
| 复现法 | 选 2-3 个方向各复现 1 篇论文(每个 1-2 周) | 亲身体验哪个方向做起来最有激情 |
| 聊天法 | 找在读博士生聊——"你每天在做什么?" | 了解真实的日常,而非论文的光鲜面 |
推荐仿真/实验环境配置¶
仿真环境选型¶
| 仿真器 | 主要用途 | 物理引擎 | GPU 加速 | 推荐场景 |
|---|---|---|---|---|
| Gazebo Fortress | ROS2 集成验证 | ODE/Bullet | 不支持 | 单机器人控制验证 |
| MuJoCo | 高精度仿真 | MuJoCo | MJX (JAX) | 接触动力学研究 |
| Isaac Sim | 大规模 RL 训练 | PhysX / MuJoCo Warp | 原生 GPU | GPU 并行训练 |
| Webots | 快速原型 | ODE | 不支持 | 教学和入门 |
| Drake | 优化 + 仿真 | Hydroelastic | 不支持 | 接触优化研究 |
推荐组合: - 学习阶段:MuJoCo(免费、高精度、API 简洁) - RL 训练:IsaacLab 3.0(GPU 并行,训练速度快 1000 倍) - ROS2 集成:Gazebo Fortress(ros2_control 原生支持) - 真机部署前:Gazebo + ros2_control(最接近真机架构)
推荐硬件配置¶
| 用途 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| 理论学习 + 单机仿真 | 8GB RAM, 4 核 CPU | 16GB RAM, 8 核 | Pinocchio + MuJoCo |
| RL 训练 | RTX 3060 12GB | RTX 4090 24GB | IsaacLab 吞吐量线性增长 |
| 真机控制端 | Jetson Orin NX 8GB | Jetson Orin NX 16GB | 1 kHz 控制 + RL 推理 |
| 多任务(感知 + 控制) | RTX 4060 + 32GB RAM | RTX 4090 + 64GB RAM | elevation_mapping + RL |
Docker 环境策略¶
推荐使用 Docker 管理不同章节的环境依赖:
| Docker 镜像 | 包含内容 | 用于章节 |
|---|---|---|
legged-base |
Ubuntu 22.04 + ROS2 Humble + Pinocchio + Eigen | 足式/30_Pinocchio深度精读 - 足式/60_QP_NLP建模 |
legged-control |
base + OCS2 + Crocoddyl + ProxQP | 足式/70_腿足简化模型理论 - 足式/120_步态管理与接触序列 |
legged-rt |
control + PREEMPT_RT 内核 | 足式/170_实时CPP工程, 足式/180_腿足硬件栈 |
legged-rl |
NVIDIA NGC + IsaacLab + rsl_rl | 足式/190_腿足RL训练栈, 足式/200_RL的CPP部署 |
legged-perception |
base + CuPy + grid_map + PCL | 足式/220_腿足感知数据结构, 足式/230_Perceptive_MPC |
知识点跨章引用索引¶
本索引列出核心概念在不同章节中的出现位置,帮助学习者在复习时快速定位:
| 核心概念 | 首次引入 | 深入讲解 | 应用场景 |
|---|---|---|---|
| 浮动基座动力学 \(M\dot{v}+h=S^T\tau+J_c^T\lambda\) | 足式/50_空间向量与浮动基座动力学 | 足式/80_接触力学与约束优化, 足式/90_WBC分层优化与TSID | 足式/110_OCS2完整栈与双线程MPC(MPC 等式约束) |
| 摩擦锥 \(\|\lambda_t\| \leq \mu \lambda_n\) | 足式/80_接触力学与约束优化 | 足式/90_WBC分层优化与TSID(线性化) | 足式/110_OCS2完整栈与双线程MPC(MPC 不等式约束) |
| Raibert 启发式 | 足式/70_腿足简化模型理论 | 足式/140_落脚点规划经典方法 | 足式/160_感知驱动落脚规划(评分函数中心点) |
| Capture Point / DCM | 足式/70_腿足简化模型理论 | 足式/140_落脚点规划经典方法 | 足式/160_感知驱动落脚规划(稳定裕度评分) |
| Kalman 滤波 | 足式/130_腿足状态估计 | 足式/220_腿足感知数据结构(高程图融合) | 足式/160_感知驱动落脚规划(地形估计) |
| 域随机化 | 足式/190_腿足RL训练栈 | 足式/210_RL与MPC混合范式 | 足式/200_RL的CPP部署(sim-to-real) |
| SCHED_FIFO + mlockall | 足式/170_实时CPP工程 | - | 足式/200_RL的CPP部署(推理线程),足式/110_OCS2完整栈与双线程MPC(MPC 线程) |
| 高程图 | 足式/160_感知驱动落脚规划 | 足式/220_腿足感知数据结构 | 足式/230_Perceptive_MPC(MPC 消费) |
| Traversability | 足式/160_感知驱动落脚规划 | 足式/220_腿足感知数据结构 | 足式/230_Perceptive_MPC(代价函数),足式/260_研究方向与博士导引(研究方向) |
| Teacher-Student 训练 | 足式/190_腿足RL训练栈 | 足式/160_感知驱动落脚规划(Miki 2022) | 足式/210_RL与MPC混合范式(DTC) |
术语速查表¶
| 术语 | 英文全称 | 首次出现 | 定义 |
|---|---|---|---|
| WBC | Whole-Body Control | 足式/90_WBC分层优化与TSID | 考虑全身动力学约束的关节级控制 |
| TSID | Task-Space Inverse Dynamics | 足式/90_WBC分层优化与TSID | 在任务空间定义目标的逆动力学框架 |
| DDP | Differential Dynamic Programming | 足式/100_DDP家族与Crocoddyl | 基于动态规划的轨迹优化算法 |
| SQP | Sequential Quadratic Programming | 足式/110_OCS2完整栈与双线程MPC | 将 NLP 转化为 QP 序列求解 |
| EKF | Extended Kalman Filter | 足式/130_腿足状态估计 | 非线性系统的 Kalman 滤波推广 |
| InEKF | Invariant Extended Kalman Filter | 足式/130_腿足状态估计 | 误差定义在李群上的 EKF |
| LIPM | Linear Inverted Pendulum Model | 足式/70_腿足简化模型理论 | 最简化的步行模型 |
| SRB | Single Rigid Body | 足式/70_腿足简化模型理论 | 单刚体质心动力学模型 |
| DCM | Divergent Component of Motion | 足式/70_腿足简化模型理论 | LIPM 的不稳定模态 |
| TAMOLS | Terrain-Aware Motion Optimization for Legged Systems | 足式/160_感知驱动落脚规划 | 地形感知的运动优化框架 |
| PPO | Proximal Policy Optimization | 足式/190_腿足RL训练栈 | 策略梯度 RL 算法 |
| AMP | Adversarial Motion Priors | 足式/210_RL与MPC混合范式 | 基于判别器的运动风格学习 |
| VLA | Vision-Language-Action | 足式/260_研究方向与博士导引 | 视觉-语言-动作统一模型 |
| CI-MPC | Contact-Implicit MPC | 足式/260_研究方向与博士导引 | 不预定义接触模式的 MPC |
常见误解汇总(大纲级别)¶
| 误解 | 正确理解 |
|---|---|
| "学完大纲就能找到工作" | 大纲提供知识体系和动手能力,但求职还需要项目经验、团队协作、面试技巧 |
| "必须按顺序学完全部 24 章" | 三条快速路径(工业/博士/RL)只需 12-14 章 |
| "只要学 RL 不用学传统方法" | RL 的 reward 设计、调试诊断、混合架构都依赖对传统方法的理解 |
| "仿真做好了真机就能跑" | Sim-to-real gap 是系统性问题,需要域随机化、系统辨识和真机调参 |
| "用最新的论文方法就好" | 最新 ≠ 最好。很多 2018-2019 的方法(如 MIT Cheetah MPC)至今仍是工业标准 |
| "代码能跑就够了" | 工程级部署还需要实时性保证、安全降级、版本管理和长期维护 |
| "数学推导可以跳过" | 不理解推导就无法调参、调试和改进算法。跳过推导 = 放弃理解 |
| "先做硬件再做软件" | 先在仿真中验证算法正确性,再部署到硬件。反过来做会浪费大量时间在硬件调试上 |
🔧 全局故障排查索引¶
本节汇总各章常见故障场景,按症状分类,帮助学习者在遇到问题时快速定位到对应章节:
仿真类故障¶
| 症状 | 可能原因 | 首先查阅 |
|---|---|---|
| 机器人飞天 / 爆炸 | 仿真时间步过大 或 初始姿态穿模 | 足式/50_空间向量与浮动基座动力学(动力学方程),足式/70_腿足简化模型理论(仿真参数) |
| MPC 不收敛 | 初始猜测不可行 或 约束矛盾 | 足式/110_OCS2完整栈与双线程MPC |
| RL 训练 reward 不涨 | 奖励缩放失衡 或 观测空间设计不当 | 足式/190_腿足RL训练栈 |
| 步态不稳 / 脚拖地 | 摆动高度不够 或 步态相位错误 | 足式/120_步态管理与接触序列 |
部署类故障¶
| 症状 | 可能原因 | 首先查阅 |
|---|---|---|
| 控制循环抖动 / 偶尔超时 | 内存分配 或 I/O 在实时线程 | 足式/170_实时CPP工程 |
| RL 真机行为与仿真不同 | 观测归一化不一致 或 关节顺序错误 | 足式/200_RL的CPP部署(64.5 节) |
| 电机异响 / 过热 | PD 增益过大 或 目标位置跳变 | 足式/180_腿足硬件栈 |
| 状态估计漂移 | 接触检测误判 或 IMU 偏置未校准 | 足式/130_腿足状态估计 |
感知类故障¶
| 症状 | 可能原因 | 首先查阅 |
|---|---|---|
| 高程图模糊 / 重影 | 里程计漂移 或 TF 时间戳不同步 | 足式/220_腿足感知数据结构(66.3 节) |
| Traversability 全红 / 全绿 | 阈值参数未标定 | 足式/220_腿足感知数据结构(66.7 节) |
| 深度相机盲区 | 安装角度不当 或 最小距离限制 | 足式/160_感知驱动落脚规划(60.9 节) |
| GPU 内存溢出 | 多 GPU 任务竞争 | 足式/220_腿足感知数据结构(66.5 节) |
如果跳过本大纲会怎样¶
- 你可能在错误的顺序上浪费时间——比如先学 RL(足式/190_腿足RL训练栈)再学动力学(足式/50_空间向量与浮动基座动力学),结果发现 RL 的 reward 设计需要动力学知识
- 你可能学了不需要的章节——工业工程师路径只需 14 周(8 章),但如果没有路径指引,可能花 29 周学完所有章节
- 你遇到问题时不知道去哪里找答案——故障排查索引是本大纲最实用的部分之一
- 你无法评估自己的学习进度——没有检查点和能力自评矩阵,很难知道自己掌握到什么程度
- 你可能重复学习——不知道某个概念在多个章节中出现(如 Kalman 滤波在 足式/130_腿足状态估计 和 足式/220_腿足感知数据结构 中各出现一次但角度不同),导致重复投入
常见问答(FAQ)¶
Q:我没有四足机器人,能完成本大纲吗?
A:可以完成 90% 的内容。Part I-III 和 Part V 的所有内容都可以在仿真中完成。Part IV(实时工程 + 硬件栈)的概念可以在仿真中学习,但实时性验证(cyclictest)和硬件接口(Unitree SDK)需要真机。建议:至少在学完 Part V 后购入一台 Unitree Go2 EDU(约 3000 美元)做 Part IV 和 Part VI 的真机验证。
Q:我是 SLAM 方向转过来的,哪些章节可以跳过?
A:你的 VIO/滤波背景让 足式/130_腿足状态估计 可以速读(1 天而非 1.5 周),因为 EKF/InEKF/因子图都是你熟悉的。足式/220_腿足感知数据结构 的点云处理和 GPU 编程如果你有经验也可以加速。但 足式/90_WBC分层优化与TSID 和 足式/110_OCS2完整栈与双线程MPC 不能跳——这些是腿足特有的,SLAM 背景不覆盖。
Q:我只想做 RL,不想学传统控制,行吗?
A:短期可以(路径 C 只需 12 周),但长期受限。RL 的 reward 设计需要理解动力学和控制目标;RL 策略失败时的诊断需要传统方法的知识;工业部署中 RL+MPC 混合方案是主流。建议至少学完 足式/70_腿足简化模型理论 和 足式/90_WBC分层优化与TSID 的核心概念。
Q:本大纲的内容会过时吗?
A:基础内容(动力学、MPC、WBC)在 10 年尺度上不会过时——物理定律不变。工具和框架(IsaacLab、OCS2、Pinocchio)的 API 可能变化,但设计思想是稳定的。前沿内容(VLA、Contact-Implicit MPC)变化最快,需要持续更新。大纲中的"生态速览"部分会定期维护。
Q:学完本大纲能达到什么水平?
A:完成路径 A(14 周)→ 腿足规控工程师,能在工业项目中独立部署 MPC+WBC+RL 控制器。完成路径 B(29 周)→ 博士预备,具备在顶级实验室做博士研究的入门能力。完成路径 C(12 周)→ RL locomotion 专家,能训练并部署 RL 行走策略。
Q:我英语阅读论文很慢,怎么办?
A:这是正常的——英文论文阅读是一个需要训练的技能。建议:(1) 先读中文综述建立框架;(2) 用 Semantic Scholar 的论文摘要快速筛选;(3) 精读时用翻译工具辅助但不依赖——关键术语必须用英文理解;(4) 每天读 1 篇摘要 + 每周精读 1 篇方法部分。6 个月后阅读速度会显著提升。
致谢与贡献说明¶
本大纲汇总了 27 个教学文件的结构和逻辑关系,旨在为学习者提供最高效的导航。大纲本身不包含教学内容——所有技术深度、数学推导、代码示例和练习题都在各章节文件中。
如果你在学习过程中发现了错误、有更好的学习路径建议、或想贡献新的练习题和故障排查场景,欢迎通过 GitHub Issue 或 Pull Request 参与贡献。
大纲版本记录¶
| 版本 | 日期 | 主要变更 |
|---|---|---|
| v1.0 | 2026-05-07 | 初始版本,27 个教学文件的结构化导航 |
快速索引¶
按关键词查找¶
| 关键词 | 对应章节 | 页面位置 |
|---|---|---|
| Pinocchio | 足式/30_Pinocchio深度精读 | Part I |
| MPC | 足式/70_腿足简化模型理论, 足式/110_OCS2完整栈与双线程MPC | Part II |
| WBC | 足式/90_WBC分层优化与TSID | Part II |
| DDP | 足式/100_DDP家族与Crocoddyl | Part II |
| EKF | 足式/130_腿足状态估计 | Part III |
| Raibert | 足式/140_落脚点规划经典方法 | Part III |
| Elevation Map | 足式/160_感知驱动落脚规划, 足式/220_腿足感知数据结构 | Part III, VI |
| SCHED_FIFO | 足式/170_实时CPP工程 | Part IV |
| PPO | 足式/190_腿足RL训练栈 | Part V |
| TorchScript | 足式/200_RL的CPP部署 | Part V |
| ONNX | 足式/200_RL的CPP部署 | Part V |
| Traversability | 足式/160_感知驱动落脚规划, 足式/220_腿足感知数据结构 | Part III, VI |
| VLA | 足式/260_研究方向与博士导引 | Part VI |
| SafetyGuard | 足式/200_RL的CPP部署 | Part V |
| Sim-to-Real | 足式/190_腿足RL训练栈, 足式/200_RL的CPP部署 | Part V |
| Contact-Implicit | 足式/150_优化驱动落脚与接触规划, 足式/260_研究方向与博士导引 | Part III, VI |
按任务查找¶
| 我想做什么 | 从哪章开始 |
|---|---|
| 在仿真中让四足站起来 | 足式/90_WBC分层优化与TSID |
| 在仿真中让四足走路 | 足式/110_OCS2完整栈与双线程MPC |
| 训练 RL 行走策略 | 足式/190_腿足RL训练栈 |
| 把 RL 策略部署到真机 | 足式/200_RL的CPP部署 |
| 让机器人看路走 | 足式/160_感知驱动落脚规划 |
| 选择博士方向 | 足式/260_研究方向与博士导引 |
| 理解 OCS2 源码 | 足式/110_OCS2完整栈与双线程MPC, 足式/240_legged_control精读 |
| 配置 PREEMPT_RT 内核 | 足式/170_实时CPP工程 |
| 理解 Sim-to-Real gap | 足式/190_腿足RL训练栈, 足式/200_RL的CPP部署 |
| 建高程图 | 足式/220_腿足感知数据结构 |
| 做可通行性分析 | 足式/160_感知驱动落脚规划, 足式/220_腿足感知数据结构 |
| 申请博士 | 足式/260_研究方向与博士导引 |
| 选传感器 | 足式/160_感知驱动落脚规划 (60.9), 足式/180_腿足硬件栈 |
| 调 RL reward | 足式/190_腿足RL训练栈 |
| 做安全降级 | 足式/200_RL的CPP部署 (64.7) |
| 理解 Kalman 滤波 | 足式/130_腿足状态估计, 足式/220_腿足感知数据结构 (66.3) |
| 精读 legged_control | 足式/240_legged_control精读 |
| 做全栈集成 | 足式/250_Mini-Legged综合实战 |
| 理解接触力学 | 足式/80_接触力学与约束优化 |
| 用 CppAD 做自动微分 | 足式/40_CppAD与代码生成 |
| 理解空间向量代数 | 足式/50_空间向量与浮动基座动力学 |
| 实现步态管理器 | 足式/120_步态管理与接触序列 |
| 理解 CITO / GCS | 足式/150_优化驱动落脚与接触规划 |
| 理解 RL+MPC 混合 | 足式/210_RL与MPC混合范式 |
| 精读 Perceptive MPC | 足式/230_Perceptive_MPC |
| 理解 DDP / iLQR | 足式/100_DDP家族与Crocoddyl |
| 了解 Go2 硬件 | 足式/180_腿足硬件栈 |
| 理解研究方法论 | 足式/260_研究方向与博士导引 |
| 写 Research Statement | 足式/260_研究方向与博士导引 (70.10) |
本大纲是导航工具,不是教学内容。 每章的完整教学内容在对应的
ChXX_*.md文件中。大纲的价值在于:(1) 帮你看到全局——知道学什么、为什么学、学完能做什么;(2) 帮你选择路径——根据你的目标选最高效的学习路线;(3) 帮你排障——遇到问题时知道去哪里找答案。 足式/10_序章上篇_全景与四分法/足式/20_序章下篇_前沿与学习路径 提供"为什么学足式",本大纲提供"怎么学、学什么、依赖什么"。