4. 接触碰撞问题在动力学框架中的定位
在多体动力学中,接触碰撞问题之所以特殊,根本原因在于它并不是普通的“力—位移”关系,而是一种单边约束:物体之间可以自由分离,却不能相互穿透。这个看似简单的条件,直接改变了动力学方程的性质,也决定了求解器必须采用与连续力模型不同的时间推进策略。
一、接触作为单边约束:从等式约束到不等式约束
在经典多体动力学中,铰链、滑移副等运动副通常写成等式约束:
Φ(q, t) = 0
其对应的约束力由拉格朗日乘子 λ 给出,方向可正可负,约束始终“拉得住、也推得动”。而接触约束的本质是:
g_N(q) ≥ 0 法向间隙非负
λ_N ≥ 0 接触力只能推、不能拉
g_N · λ_N = 0 互补条件
这三条合起来就是著名的Signorini 互补条件。它说明:当间隙 g_N > 0 时,接触力必须为零;当接触力 λ_N > 0 时,间隙必须为零。两者不能同时为正,也不能同时为零后还保持“接触”状态。正是这个“非此即彼”的互补关系,使接触问题从等式约束系统变成了互补问题,也即非光滑动力学的核心来源。
从几何上看,单边约束的可行域是一个半空间,而不是等式约束的超曲面。系统状态在“自由运动”和“接触约束”两个子空间之间切换,切换点就是碰撞事件。这种切换不是连续的,速度在碰撞瞬间可能发生跳变,因此经典 ODE 求解器无法直接处理。
二、非光滑动力学:速度跳变与冲量
当两个物体发生碰撞时,接触力在极短时间内趋于无穷大,但冲量有限。若用连续力模型描述,需要引入刚度 k 和阻尼 c,把接触力写成穿透深度的函数;而用非光滑模型描述,则直接处理速度跳变:
M (v⁺ − v⁻) = Jᵀ Λ
J v⁺ ≥ 0 ⊥ Λ ≥ 0
其中 v⁻ 和 v⁺ 分别是碰撞前、后的广义速度,J 是接触法向雅可比矩阵,Λ 是冲量。这个式子说明:碰撞后的速度必须满足非穿透条件,而冲量只沿法向“推”开物体。恢复系数 e 则通过法向相对速度关系引入:
v_N⁺ = −e · v_N⁻
当 e = 0 时为完全非弹性碰撞,e = 1 时为完全弹性碰撞。实际工程中,e 通常取 0.1~0.6,需要根据材料、形状和撞击速度标定。非光滑动力学的优势在于:它不需要人为设定刚度,也不会因为刚度太大导致数值刚性;但代价是必须处理互补条件和事件检测。
三、事件驱动与时间步进策略
接触碰撞的时间推进通常分为两类策略:事件驱动和时间步进。
事件驱动方法把仿真时间分成若干“光滑段”,在每段内系统没有接触状态变化,可以用常规积分器推进;当检测到间隙函数过零时,暂停积分,求解碰撞冲量,更新速度,再继续下一段。其关键是事件函数:
g_N(q(t)) = 0
通过符号变化或插值定位碰撞时刻。事件驱动的优点是精度高,能准确捕捉碰撞瞬间;缺点是当接触频繁、多点同时碰撞时,事件数量爆炸,步长被切得很碎,效率下降。
时间步进方法则不显式定位碰撞时刻,而是在每个时间步内直接求解包含互补条件的离散方程:
M (v_{n+1} − v_n) = h f_ext + Jᵀ Λ
0 ≤ g_{n+1} ⊥ Λ ≥ 0
这类方法把接触约束“隐式”地嵌入时间离散中,允许一个步长内发生多次碰撞或持续接触。常见实现包括 Moreau 中点格式、半隐式欧拉加互补求解等。其优点是鲁棒、适合大量接触;缺点是碰撞时刻被“抹平”在一个步长内,精度依赖步长,且需要求解 LCP 或 NCP 问题。
四、两种策略的工程取舍
在实际仿真中,选择哪种策略取决于问题特征。若碰撞次数少、碰撞点明确、需要精确的碰撞后速度,事件驱动更合适,例如航天器对接、机构死点冲击。若接触区域大、接触点频繁变化、存在大量持续接触,时间步进更稳健,例如颗粒流、履带与地面、齿轮啮合。
一个实用的判断依据是接触事件密度:单位时间内事件数远小于步数时,事件驱动效率高;事件数与步数同量级时,时间步进更划算。此外,恢复系数 e 的选取也影响策略:e 接近 1 时碰撞后速度对事件定位敏感,宜用事件驱动;e 接近 0 时能量耗散强,时间步进的“抹平”误差可接受。
五、与连续力模型的对比
连续力模型把接触力写成穿透深度的函数,例如:
F_N = k · δ + c · δ̇
其中 δ 为穿透深度。它把单边约束“软化”为双边力,优点是容易嵌入常规 ODE 求解器,缺点是 k 必须足够大才能近似不可穿透,而 k 过大会导致数值刚性,步长被迫减小。非光滑模型则直接处理互补条件,不引入人为刚度,但需要专门的互补求解器。两者并非对立:在接触刚度明确、穿透可接受的场合,连续力模型更简单;在需要严格非穿透、碰撞速度跳变明显的场合,非光滑模型更准确。
理解接触在动力学框架中的定位,核心就是抓住三点:单边约束带来互补条件,互补条件导致非光滑,非光滑要求事件驱动或时间步进。这三步决定了后续接触检测、冲量求解和积分器选择的全部逻辑。