P3

PD Control for Characters

✅ 前面是 PD 的例子,这里是 PD 在物理仿真角色上的应用,计算在每个关节上施加多少力矩。

控制系统层次:PD 控制属于底层执行控制,输入是目标关节位置 $q^$ 和速度 $\dot{q}^$,输出是关节力矩 $\tau$。

中层策略:轨迹优化或 DeepMimic/AMP/ASE 等学习方法输出 PD 的目标 $q^*$。

深入学习: DeepMimic | AMP | ASE


✅ 通常目标的速度 \(\dot{\bar{q}} = 0\).

因此:

P63

PD Control for Characters 的参数和效果

✅ \(K_p\) 太小:可能无法达到目标状态。 ✅ \(K_p\) 太大:人体很僵硬。 ✅ \(k_d\) 太小:动作有明显振荡。 ✅ \(k_d\) 太大,要花更多时间到达目标资态。

  • Determining gain and damping coefficients can be difficult…

    • A typical setting \(k_p\) = 200, \(k_d\) = 20 for a 50kg character
    • Light body requires smaller gains
    • Dynamic motions need larger gains
  • High-gain/high-damping control can be unstable, so small times is necessary

    • \(h\) = 0.5~1ms is often used, or 1000~2000Hz
    • \(h\) = 1/120s~1/60s, or 120Hz/60Hz with Stable PD
    • Higher gain/damping requires smaller time step

P66

P72

欠驱动系统问题

详细说明:参见 欠驱动系统问题

由于是欠驱动系统,Tracking Mocap with Joint Torques 会遇到问题,因为:

  • \(\tau _j\): joint torques
  • Apply \(\tau _j\) to "child" body
  • Apply \(-\tau _j\) to "parent" body
  • All forces/torques sum up to zero

✅ 合力为零,无法控制整体的位置和朝向。 ✅ 解决方法:增加净外力(Root Force/Torque),详见 欠驱动系统问题


稳态误差问题

PD control computes torques based on errors

Steady state error

This arm never reaches the target angle under gravity

在角色上的表现就是 Motion falls behind the reference

P7

问题原因

✅ 前面两个问题的根本原因是相同的,因为需要有误差才能计算 force,有了 force 才能控制。

High-gain \((k_p)\) control is more precise but less stable…

解决方法

✅ 增大 \(k_p\)能缓解以上问题,但大的 \(k_p\) 会带来肢体僵硬和计算不稳定。

P25

相关工作

🔎

$$ \tau _{\mathrm{int} }=-K_p(q^n+\dot{q}^n \Delta t-\bar{q} ^{n+1})-K_d(\dot{q} ^n+\ddot{q} ^n \Delta t) $$

P71

feedforward?feedback

Is PD control a feedforward control? a feedback control?

✅ 是反馈控制,因为计算 \(\tau \) 时使用了当前状态 \(q\). ✅ 是前馈控制,因为在 PD 系统里,状态是位置不是 \(q\).


本文出自 CaterpillarStudyGroup,转载请注明出处。

https://caterpillarstudygroup.github.io/GAMES105_mdbook/