轨迹优化

本章定位:理解如何通过优化方法生成物理可行的目标轨迹,供 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*} $$

✅ 约束第一项:运动学方程。
✅ 第二项:根据场景特殊定义的约束。