Baumgarte 稳定性方法(Baumgarte Stabilization Method) 是一种常用于刚体动力学中处理约束系统稳定性的数值方法,特别是在使用Lagrange 乘子法求解带有约束的系统时。它的主要目标是防止数值积分过程中因误差累积导致的约束漂移(constraint drift)问题。
如果不使用 Baumgarte 稳定性方法 直接应用碰撞约束求解出来的冲量可能会导致在数值积分中由于舍入误差或逼近误差,约束无法完全维持。最后导致系统状态随时间逐渐“漂移”出满足约束的区域。
Baumgarte 稳定性方法核心思想
Baumgarte 方法通过引入一个微分项来“惩罚”偏离约束的行为,从而稳定系统。
在碰撞约束中我们一般使用
$$ \dot C = JV = 0 $$
表示一个速度约束方程
利用 Baumgarte 修正,构造一个新的方程:
$$ \dot C = JV + b = 0 $$
其中
$$ b = \frac{\beta}{\Delta t}C $$
- $\Delta t为时间步长$
- $\beta$是一个系数,可以跟据你需要的修正速度调整,大小在0到1之间,越大修正的越快
这一项我们通常叫做bias系数
引入bias系数后我们约束求解的冲量结果为
$$ \vec {\lambda}_{imp} = (JM^{-1}J^T)^{-1}-(JV_0+b) $$
优点
- 简单易实现,只需对加速度约束项做改写。
- 适用于显式或半隐式积分方法。
- 可用于任意类型的约束系统(位置、速度等)。
缺点
- 参数选择敏感。若 $\beta$ 选得不合适,可能导致系统刚性太强或振荡。
- 并不是完全消除漂移,而是“压制”它;如果时间步过大仍可能不稳定。