跳转至

运动控制公共基础层建设计划

版本: v0.1 草案 | 日期: 2026-05-11 定位: 为 05_运动控制 下机械臂、足式、复合、仿真四个子方向建立统一的公共知识层 状态: 规划文档。本文件只定义重构原则、目录草案、迁移顺序和质量门禁,不替代现有章节正文


0. 为什么需要公共基础层

05_运动控制 目前已经形成四个相对独立的子方向:

子方向 当前目录 核心问题
机械臂 机械臂/ 固定基座、全驱动关节、末端操作、工业集成、力控与双臂
足式 足式/ 浮动基座、离散接触、步态、MPC/WBC、RL locomotion
复合 复合/ 底盘-机械臂耦合、轮足、人形、移动操作、全身控制
仿真 仿真/ MuJoCo/Isaac/MJX/Genesis、可微仿真、GPU 并行、Sim-to-Real

这四个方向的机器人本体不同,但底层工具和数学结构高度重叠。例如:

  • 机械臂和足式都需要 Pinocchio、RNEA/ABA/CRBA、Jacobian、碰撞几何。
  • 机械臂 IK-QP、足式 WBC-QP、复合全身 QP 都共享同一套约束优化语言。
  • 自动微分、代码生成、CasADi、CppAD 在轨迹优化、MPC、系统辨识中反复出现。
  • 实时 C++、无堆分配、ros2_control、硬件抽象是所有真机部署共同的底层能力。
  • URDF/Xacro/MJCF、惯量检查、碰撞体、域随机化和系统辨识贯穿机械臂、足式和仿真。

如果这些公共内容长期散落在各个子方向中,会带来三个问题:

  1. 维护成本高:同一个公式或 API 需要在多处修复,容易出现一处正确、一处过期。
  2. 学习路径重复:读者切换方向时会反复学习同一套基础,但符号约定和版本信息可能不同。
  3. 知识边界模糊:公共理论、方向特化和工程案例混在一起,不利于后续扩展轮足、人形、灵巧手等内容。

因此,建议在 05_运动控制/ 下新增 00_公共基础/,把跨方向共享的基础知识统一收口。

本质判断:公共基础层不是把各方向文档“抽空”,而是建立一个稳定的知识地基。方向文档仍然负责讲清本方向的物理问题、工程取舍和实战案例;公共基础负责统一符号、公式、API、工具链和跨方向复用逻辑。


1. 建设目标与非目标

1.1 建设目标

公共基础层要解决下面五类问题:

目标 具体含义 预期效果
统一符号 对空间速度、Jacobian、接触力、QP 变量、阻抗误差等给出全局约定 后续公式复核只需要检查一套基准
统一工具 把 Pinocchio、CasADi、CppAD、OSQP、MuJoCo、ros2_control 等公共工具集中讲解 各方向不再重复基础 API
统一工程陷阱 汇总惯量错误、关节索引、实时内存、符号约定、仿真资产等失败经验 经验从“章节局部”变成“全局资产”
支撑四方向阅读 为机械臂、足式、复合、仿真提供共同前置 读者能先补公共基础,再进入任一方向
降低后续维护成本 版本信息、公式推导、API 约定集中维护 减少重复修复和交叉引用错位

1.2 非目标

公共基础层不应该做下面几件事:

非目标 原因
不替代机械臂、足式、复合、仿真正文 每个方向仍有自己的物理场景和工程叙事
不把所有重复文字机械搬运到公共层 机械搬运会破坏章节连续性,也会制造新的冗余
不删除方向文档中的必要回顾桥 单章阅读仍然需要 2-3 段前置激活
不把版本敏感内容写成永久结论 MoveIt2、Isaac Lab、Pinocchio、cuRobo 等生态变化快,需要注明查询日期和版本锚点
不一次性大规模移动文件 大规模改路径会破坏引用、导航和读者习惯,应采用渐进迁移

2. 推荐目录结构

建议公共基础层采用 Bxx 编号,表示 Base / Common Foundation,避免和机械臂 Mxx、足式 Chxx、仿真 Sxx 冲突。

05_运动控制/
  00_公共基础/
    B00_导读_公共基础与四方向复用地图.md
    B01_机器人描述与资产管道_URDF_Xacro_MJCF.md
    B02_刚体动力学库与Pinocchio基础.md
    B03_空间向量_浮动基座_统一动力学基础.md
    B04_约束优化_QP_NLP_求解器基础.md
    B05_自动微分_符号计算_代码生成基础.md
    B06_碰撞几何_SDF_距离梯度基础.md
    B07_接触力学_摩擦锥_互补约束基础.md
    B08_实时C++_PREEMPT_RT_无堆分配基础.md
    B09_ros2_control_硬件抽象_通信基础.md
    B10_仿真接口_MuJoCo_MJCF_SimToReal基础.md
    B11_RL部署与SimToReal公共方法.md
    B99_公共基础索引_术语_API速查.md

2.1 各章节定位

章节 定位 不应纳入的内容
B00 公共基础层导读、四方向依赖图、学习路径 具体库 API 长篇教学
B01 URDF/Xacro/MJCF、mesh、惯量、坐标系、资产检查 Panda/Go2/H1 的完整项目配置
B02 Pinocchio Model/Data、RNEA/ABA/CRBA、Jacobian、约束动力学基础 方向专用的完整控制器实现
B03 空间向量、自由浮动基、选择矩阵、质心动力学统一语言 足式步态、复合移动操作任务细节
B04 QP/NLP 标准形、KKT、求解器、warm start、数值尺度 机械臂 IK-QP 或足式 WBC-QP 的完整章节
B05 自动微分、符号验证、CppAD/CasADi/CodeGen、公式复核流程 某个方向的完整 MPC 代码生成工程
B06 几何碰撞、GJK/EPA、SDF、距离梯度、Coal/FCL 接触力优化和摩擦锥动力学
B07 接触 Jacobian、摩擦锥、互补约束、接触冲量、软接触 纯几何碰撞检测细节
B08 实时 Linux、调度、内存、lock-free、实时日志、性能追踪 具体机器人项目的所有线程代码
B09 ros2_control 架构、HardwareInterface、控制器链、通信抽象 Franka/Unitree/UR 的完整硬件教程
B10 MuJoCo/MJCF、仿真 step、传感器、执行器、sysid、DR Isaac/MuJoCo 每个环境的完整训练脚本
B11 RL policy 部署、观测归一化、延迟、动作接口、sim-to-real 共性 足式 gait policy 或机械臂 force policy 的完整训练章节
B99 术语表、符号表、API 速查、常见错配清单 新概念的长篇推导

3. 与现有文档的融合关系

3.1 Pinocchio 与动力学

公共层目标 主要来源 方向层保留内容
B02 刚体动力学库与 Pinocchio 基础 机械臂/M01_Pinocchio深度精读.md足式/30_Pinocchio深度精读.md机械臂/M02_动力学库对比.md 机械臂保留 Panda/UR 固定基示例;足式保留 FreeFlyer、接触约束、四足状态定义
B03 空间向量与统一动力学 足式/50_空间向量与浮动基座动力学.md复合/20_浮动基座臂统一动力学.md 足式保留腿足浮动基推导;复合保留底盘-臂耦合和全身坐标定义

迁移原则:

  1. 公共层讲统一符号和算法接口。
  2. 方向层讲“这个接口在本方向里怎么用”。
  3. 固定基、浮动基、移动基的差异必须在公共层给出对照表,而不是散落在三处。

3.2 优化、自动微分与代码生成

公共层目标 主要来源 方向层保留内容
B04 约束优化 机械臂/M05_QP_NLP建模工程.md足式/60_QP_NLP建模.md足式/100_DDP家族与Crocoddyl.md 机械臂保留 IK/轨迹/力控 QP 模板;足式保留 WBC/MPC 接触力 QP 和 DDP/ProxDDP
B05 自动微分与符号验证 机械臂/M06_自动微分与代码生成.md足式/40_CppAD与代码生成.md00_项目导航/符号计算工具指南.md OCS2、acados、Crocoddyl、Aligator 的方向化用法继续留在原章节

B05 和 00_项目导航/符号计算工具指南.md 的关系应明确区分:

文档 职责
B05_自动微分_符号计算_代码生成基础.md 面向运动控制,解释为什么 AD/符号验证/CodeGen 是控制器工程的基础
00_项目导航/符号计算工具指南.md 面向全项目,提供 SymPy、PyDy、Sage、Lean 等工具使用方法和验证模板

3.3 碰撞、接触与仿真

公共层目标 主要来源 方向层保留内容
B06 碰撞几何 机械臂/M04_碰撞检测.md仿真/S01_MuJoCo核心引擎_教学版.md仿真/S04_可微分仿真理论.md 机械臂保留 MoveIt collision scene、抓取避障、轨迹碰撞检查
B07 接触力学 足式/80_接触力学与约束优化.md机械臂/F07_浮动基座WBC理论.md复合/180_Deep_WBC精读.md 足式保留步态接触序列;复合保留全身接触切换
B10 仿真接口 机械臂/P02_sim-to-real资产管道.md仿真/S01_MuJoCo核心引擎_教学版.md仿真/S03_GPU生态.md 仿真方向继续保留引擎深度、GPU 后端和可微仿真专题

注意:B06B07 必须分开。碰撞几何回答“有没有碰到、距离多少、梯度方向是什么”;接触力学回答“碰到之后力怎么传、摩擦锥怎么约束、互补条件怎么建模”。二者相关,但不是同一层问题。

3.4 实时、硬件与 Sim-to-Real

公共层目标 主要来源 方向层保留内容
B08 实时 C++ 机械臂/M11_实时CPP工程.md足式/170_实时CPP工程.md、复合stub已删(见足式/170) 方向层保留各自控制线程、MPC 双线程、硬件接口案例
B09 ros2_control 与通信 机械臂/M12_ros2_control与硬件驱动.md足式/180_腿足硬件栈.md复合/110_轮足SimToReal与硬件.md 机械臂保留 Franka/UR;足式保留 Unitree/CAN/EtherCAT/QDD;复合保留底盘-臂同步
B11 RL 部署与 Sim-to-Real 足式/190_腿足RL训练栈.md足式/200_RL的CPP部署.md复合/270_SimToReal统一方法论.md仿真/MJLab与IsaacLab_RL运控教学文档.md 足式、复合、机械臂学习力控继续保留任务特化奖励和环境设计

4. 迁移策略

4.1 总体策略:先建立公共层,再瘦身方向文档

不建议直接把原章节移动或拆碎。推荐采用五步迁移:

Step 1: 新建公共基础层骨架
Step 2: 写公共基础的第一版独立章节
Step 3: 在方向文档中增加“公共基础回顾桥”
Step 4: 删除或压缩方向文档中明显重复的长篇基础段落
Step 5: 全局检查交叉引用、符号约定、公式一致性和阅读连续性

这种方式有两个好处:

  1. 原有章节路径稳定,不会一次性打断现有学习路线。
  2. 公共层可以先作为“上游权威版本”存在,等内容稳定后再逐步压缩方向文档。

4.2 方向文档改写模板

当某个方向章节引用公共基础时,不应只写“见 Bxx”。建议使用固定结构:

### 公共基础回顾:这里需要哪些前置

回顾 Bxx:这里已经建立了 [核心概念]。它解决的是 [公共问题]。
在本章中,我们不再重复完整推导,而是把它特化到 [本方向场景]。

| 公共概念 | 本章中的具体化 |
|----------|----------------|
| QP 标准形 | IK / WBC / 接触力分配 |
| Jacobian | 末端速度 / 足端接触 / 质心动量 |

接下来真正新增的是:[本方向特有问题]。

这样可以满足教学规范中的“跨章回顾桥”,同时避免重复铺开 500 行公共理论。

4.3 保留方向章节自洽性

方向文档不能变成纯索引。每章至少应保留:

必留内容 原因
2-3 段公共基础回顾 读者不翻回去也能跟上
本方向符号映射表 防止公共符号和方向符号断裂
一个完整工程案例 教学价值主要来自场景化应用
常见失败经验 方向差异往往体现在失败模式上
到公共层的精确链接 便于查公式和 API

5. 分阶段执行计划

Phase 0:盘点与标注

目标:建立完整的“公共知识点重复矩阵”,不修改正文。

任务:

  1. 扫描 05_运动控制 全部 Markdown 文件。
  2. 提取标题、公式块、代码块、版本信息、API 名称和交叉引用。
  3. 建立如下矩阵:
公共知识点 当前出现位置 重复类型 建议归属 方向层保留方式
Pinocchio Model/Data M01, 足式/30_Pinocchio深度精读 高重复 B02 保留方向化案例
QP 标准形/KKT M05, 足式/60_QP_NLP建模, F07 高重复 B04 保留任务模板
CppAD tape M06, 足式/40_CppAD与代码生成 高重复 B05 保留 OCS2/轨迹优化用法
PREEMPT_RT M11, 足式/170_实时CPP工程, 足式/90_WBC分层优化与TSID 高重复 B08 保留控制线程案例
ros2_control SystemInterface M12, F10, 足式/180_腿足硬件栈 高重复 B09 保留具体硬件

输出物:

  • 公共基础层_重复矩阵.md
  • 公共基础层_交叉引用清单.md
  • 公共基础层_公式与符号约定清单.md

Phase 1:公共层骨架

目标:创建可导航的公共基础层,但暂不大规模搬运内容。

优先新增:

  1. B00_导读_公共基础与四方向复用地图.md
  2. B99_公共基础索引_术语_API速查.md
  3. 运动控制方向_总大纲.md 中加入公共基础层说明。

B00 必须回答:

  • 为什么公共基础放在四个方向之前?
  • 哪些章节是机械臂/足式/复合/仿真的共同前置?
  • 哪些内容必须回到方向章节学习?
  • 初学者、工程落地者、博士预备者应如何选读?

Phase 2:低风险公共章节优先落地

优先顺序:

优先级 章节 原因
1 B04 约束优化 M05/足式/60_QP_NLP建模 重复度高,边界清晰
2 B05 自动微分与符号验证 已有工具指南支撑,适合统一公式复核流程
3 B08 实时 C++ 方向差异较小,工程规则可统一
4 B09 ros2_control 版本敏感,但抽象层可统一

这些章节完成后,方向文档先不删大段内容,只在开头加入公共基础引用和符号映射。

Phase 3:高耦合公共章节谨慎融合

第二批处理:

章节 风险 处理原则
B02 Pinocchio 固定基/浮动基混用容易引发符号错位 先统一 API 与数据结构,再讲系统类型差异
B03 空间向量 空间速度顺序、参考点、坐标系约定容易混乱 必须建立全局符号表和小算例验证
B06 碰撞几何 MoveIt/Coal/MuJoCo 语义不同 以概念和接口层为主,避免伪统一
B07 接触力学 足式、双臂接触、仿真接触模型层级不同 分清刚性约束、软接触、互补约束
B10 仿真接口 引擎差异大 公共层只讲共性模型,不替代仿真方向

Phase 4:方向文档瘦身与重写

当公共层稳定后,再对方向文档做渐进瘦身。

每个被瘦身的章节都按三类处理:

内容类型 处理方式
公共理论长篇重复 移到公共层,方向层保留回顾桥
本方向特化推导 保留并加强
失败经验/工程陷阱 若跨方向通用则迁入公共层;若方向特有则保留

示例:

  • 机械臂/M05_QP_NLP建模工程.md 中的 QP 标准形、KKT、求解器选型可压缩,机械臂 IK-QP、力控 QP 保留。
  • 足式/60_QP_NLP建模.md 中的通用求解器介绍可压缩,WBC、TOWR、OCS2 相关建模保留。
  • 机械臂/M06_自动微分与代码生成.md足式/40_CppAD与代码生成.md 的 CppAD 基础统一到 B05,方向层保留代码生成部署链。
  • 机械臂/M11_实时CPP工程.md足式/170_实时CPP工程.md 的 PREEMPT_RT、无堆分配、lock-free 原则统一到 B08,方向层保留控制循环案例。

Phase 5:全局质量门禁

每轮迁移后必须做检查:

检查项 方法
断链检查 rg "B[0-9]{2}|M[0-9]{2}|Ch[0-9]{2}|S[0-9]{2}" 后人工核对
旧编号残留 搜索 M1, F1, D1, P0, Ch5 等非标准编号
公式一致性 对关键公式用 00_项目导航/符号计算工具指南.md 中的 SymPy/PyDy 流程复核
符号约定 检查 linear/angular 顺序、误差定义、Jacobian 坐标系、接触力方向
版本信息 所有“最新”表述必须带查询日期或版本锚点
阅读连续性 每个方向章节必须仍能独立读懂本章新增内容
补丁感 检查新增段落前后语义是否自然衔接

6. 推荐第一批具体产出

第一批不要贪多,建议只完成以下文件:

05_运动控制/00_公共基础/
  B00_导读_公共基础与四方向复用地图.md
  B04_约束优化_QP_NLP_求解器基础.md
  B05_自动微分_符号计算_代码生成基础.md
  B08_实时C++_PREEMPT_RT_无堆分配基础.md
  B99_公共基础索引_术语_API速查.md

选择这五个文件的原因:

文件 为什么优先
B00 没有导读,公共层会变成孤立目录
B04 QP/NLP 在机械臂、足式、复合中重复度最高
B05 能承接符号计算工具指南,也能服务后续公式巡检
B08 实时工程原则跨方向最稳定,适合先统一
B99 术语和 API 索引能立刻降低交叉引用混乱

暂缓:

  • B02/B03:动力学符号约定复杂,适合第二批。
  • B06/B07:碰撞和接触容易混淆,必须先确定边界。
  • B10/B11:仿真和 RL 生态变化快,适合在公共层框架稳定后处理。

7. 风险与应对

风险 表现 应对
过度抽象 公共层写得像手册,失去教学叙事 每章必须保留动机、反例、推导、工程案例
过度瘦身 方向文档变成到处跳转的索引 方向章节保留回顾桥和完整案例
符号冲突 固定基/浮动基、空间速度顺序、接触力方向混乱 B99 建全局符号表,每章局部符号必须映射到全局符号
版本漂移 MoveIt2、Pinocchio、Isaac Lab 等描述过期 统一使用“截至 YYYY-MM-DD 查询”的表述
交叉引用错位 章节编号调整后旧引用残留 每轮迁移后执行引用审计
内容割裂 公共层和方向层衔接生硬 使用固定“公共基础回顾桥”模板
重复没有减少 新增公共层后方向文档仍全文重复 第二阶段开始有计划地压缩方向章节中的公共理论

8. 验收标准

公共基础层建设到一个阶段时,应满足以下标准:

  1. 05_运动控制/运动控制方向_总大纲.md 能清楚解释公共基础层和四个子方向的关系。
  2. 每个公共章节都能回答“这个知识为什么跨方向复用”。
  3. 每个公共章节都有至少一个机械臂例子、一个足式或复合例子,避免偏向单方向。
  4. 每个方向章节引用公共基础时,都有 2-3 段回顾桥,不只是裸链接。
  5. 常见符号有唯一主约定,例如:
  6. 空间速度排列顺序;
  7. Jacobian 表达坐标系;
  8. 阻抗误差 \(x - x_d\)\(x_d - x\) 的区别;
  9. 接触力方向;
  10. QP 标准形;
  11. 动量观测器中的 \(C\)\(C^T\) 约定。
  12. 原来重复出现的基础内容至少有一个“权威出处”,其他章节只做方向化回顾。
  13. 新增公共层不破坏机械臂、足式、复合、仿真原有学习路径。
  14. 公式、代码、版本信息经过一次全局复核。

9. 初步时间安排

阶段 工作量估计 产出
Phase 0 盘点 0.5-1 天 重复矩阵、引用清单、符号清单
Phase 1 骨架 0.5 天 B00、B99 初稿,总大纲入口
Phase 2 第一批公共章节 2-4 天 B04、B05、B08
Phase 3 第二批公共章节 3-5 天 B02、B03、B06、B07
Phase 4 方向文档瘦身 3-6 天 M/Ch/S/复合章节局部重写
Phase 5 全局审计 1-2 天 断链、公式、符号、版本、补丁感检查

总计建议按 2 周左右 做第一轮完整迁移;如果只做第一批公共层,可控制在 3-5 天


10. 下一步建议

下一步最稳妥的执行顺序是:

  1. 先完成 Phase 0,生成重复矩阵,明确哪些段落应迁入公共层。
  2. 新增 B00B99,让公共基础层先可导航。
  3. 优先撰写 B04B05B08,因为这三类内容重复度高、边界清晰、迁移风险低。
  4. 对机械臂和足式中对应章节只添加公共基础回顾桥,暂不大删。
  5. 等公共章节经过公式和符号复核后,再逐步压缩方向文档中的重复基础段落。

这个顺序能在不破坏现有学习体验的前提下,逐步把 05_运动控制 从“多个方向并列堆叠”整理成“公共基础 + 四方向特化”的结构。