轨迹优化
✅ 本章定位:理解如何通过优化方法生成物理可行的目标轨迹,供 PD 控制器跟踪。
在控制系统中的位置
flowchart TD
subgraph "高层:任务规划"
A["做什么动作?<br/>有限状态机、行为树"]
end
subgraph "中层:轨迹生成/策略学习 (本章)"
B["如何生成目标动作?<br/>轨迹优化、DeepMimic、AMP"]
end
subgraph "底层:执行控制"
C["如何计算关节力矩?<br/>PD 控制"]
end
subgraph "仿真器"
D["物理仿真<br/>Mv̇ + C = f + Jᵀλ"]
end
A -->|动作指令 | B
B -->|目标状态 q*, q̇* | C
C -->|关节力矩 τ | D
D -->|当前状态 q, q̇ | C
轨迹优化的输入输出:
- 输入:参考动作(如动捕数据)+ 当前状态
- 输出:修正后的目标轨迹 \(q^, \dot{q}^\) → 送入 PD 控制器
与 PD 控制的关系:
- 轨迹优化输出"修正后的目标轨迹" \(q^*\)
- PD 控制跟踪这个目标轨迹
与 RL 方法的关系:
| 方法 | 输出 | 优点 | 缺点 |
|---|---|---|---|
| 轨迹优化 | 单一轨迹 | 精确 | 无法泛化、计算量大 |
| RL (DeepMimic) | 策略 | 可泛化、实时 | 训练慢 |
为什么需要轨迹优化
直接用 PD 控制跟踪动捕数据会有很大问题:
| 问题 | 原因 | 表现 |
|---|---|---|
| 稳态误差 | PD 控制需要误差才能产生力矩 | 动作滞后于参考轨迹 |
| 相位漂移 | 运动轨迹与原轨迹之间存在相位差 | 动作节奏不匹配 |
| 欠驱动问题 | 人形角色缺少对根节点的直接控制 | 质心位置无法直接控制 |
✅ 深入学习:欠驱动系统问题 - 详细讲解欠驱动系统的挑战和解决方案。
轨迹优化的作用:
- 在 mocap 基础上添加修正量,使其物理可行
- 引入轨迹优化之后,控制本质上变成了设计 target state

P30
轨迹优化的问题描述
🔎 [Witkin and Kass 1988 – Spacetime constraints]
✅ 轨迹优化的问题描述:
Find the trajectories:
$$ \begin{align*} \text{Simulation trajectory } & : S_0,S_1,\dots ,S_T \\ \text{Control trajectory } & : a_0,a_1,\dots ,a_{T-1} \end{align*} $$
✅ \(S\):每一个时刻,角色的状态,包括位置、速度、朝向等。
✅ \(a\):目标轨迹。
✅ 优化出 \(S\) 和 \(a\),根据 \(S\) 和 \(a\) 得到关节力矩,关节力矩再控制角色。
that minimize the objective function
$$ \min_{(S_t,a_t)} f(S_T)+\sum_{t=0}^{T-1} f(S_t,a_t) $$
✅ 目标函数第一项:关于轨迹结束时刻的状态。
✅ 第二项:关于每一时刻的状态。
and satisfy the constraints:
$$ \begin{align*} M\dot{v}+C(x,v) & =f+J^T\lambda & \text{Equations of motion} \\ g(x,v) & \ge 0 & \text{constraints } \quad \quad\quad \end{align*} $$
✅ 约束第一项:运动学方程。
✅ 第二项:根据场景特殊定义的约束。