P55
Proportional-Derivative Control
这是一种常用的控制器。
✅ 有反馈,但还是算是前向控制,因为反馈的部分和想控制的部分不完全一致。
简化问题分析
问题描述
Compute force \(f\) to move the object to the target height
✅ 例子:物体只能沿竿上下移动,且受到重力。
✅ 控制目的:设计控制器,使物体在控制力的作用下达到目标高度。

使用比例控制

实际上:会产生上下振荡,不会停在目标位置。

P56
比例控制+Damping

✅ 改进:如果物体已有同方向速度,则力加得小一点。
P57
比例微分控制

✅ 第一项:比例控制;第二项:微分控制
P59
✅ 存在的问题:为了抵抗重力,一定会存在这样的误差。

P60
Increase stiffness \(k_p\) reduces the steady-state error, but can make the system too stiff and numerically unstable
✅ 增加 \(k_p\) 可以减小误差,但会让人看起来很僵硬。
P61
比例积分微分控制 Proportional-Integral-Derivative controller


✅ 解决误差方法:积分项。
✅ 但角色动画通常不用积分项。
✅ 积分项跟历史相关,会带来实现的麻烦和控制的不稳定。
P62
PD Control for Characters
✅ 前面是 PD 的例子,这里是 PD 在物理仿真角色上的应用,计算在每个关节上施加多少力矩。


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

P63
PD Control for Characters的参数和效果
✅ \(K_p\) 太小:可能无法达到目标状态。
✅ \(K_p\) 太大:人体很僵硬。
✅ \(k_d\) 太小:动作有明显振荡。
✅ \(k_d\) 太大,要花更多时间到达目标资态。
P66
Tracking Controllers
✅ 引入PD Control之后,控制本质上变成了设计 targer state.

P67
Full-body Tracking Controllers

✅ 设计角色的目标轨迹。
✅ 直接用 PD 控制跟踪动捕数据会有很大的问题,原因:
(1)稳态误差。
(2)运动轨迹跟原轨迹之间会相差一点点相位
(3)欠驱动系统,有一点点误差,后面无法修复。
P71
feedforward ? feedback
Is PD control a feedforward control?
a feedback control?
✅ 是反馈控制,因为计算 \(\tau \) 时使用了当前状态 \(q\).
✅ 是前馈控制,因为在 PD 系统里,状态是位置不是 \(q\).
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
✅ 合力为零,无法控制整体的位置和朝向。
P73
解决方法:增加净外力
\(f_0,\tau _0\): root force / torque
\(\quad\quad\)Apply \(f_0\) to the root body
\(\quad\quad\)Apply \(\tau _0\) to the root body
\(\quad\quad\)Non-zero net force/torque on the character!
✅ 净外力,无施力者,用于帮助角色保持平衡。
✅ 缺点:让角色看起来像提线木偶。
P75
Mixture Simulation and Mocap

✅ 关键帧与仿真的混合。
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES105_mdbook/