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 问题。

接触碰撞在动力学框架中的定位与时间推进 单边约束 g_N(q) ≥ 0 λ_N ≥ 0 g_N · λ_N = 0 互补条件 · 可行域为半空间 非光滑动力学 M(v⁺ − v⁻) = Jᵀ Λ J v⁺ ≥ 0 ⊥ Λ ≥ 0 v_N⁺ = −e · v_N⁻ 速度跳变 · 冲量 · 恢复系数 时间推进策略 事件驱动:定位 t_c,分段积分 时间步进:每步解互补方程 Moreau 中点 / 半隐式欧拉 精度 vs 鲁棒性 时间轴上的接触状态切换 t 自由运动 碰撞事件 持续接触 分离事件 自由运动 碰撞事件 持续接触 事件驱动:步长被事件切分 时间步进:固定步长内隐式处理接触

四、两种策略的工程取舍

在实际仿真中,选择哪种策略取决于问题特征。若碰撞次数少、碰撞点明确、需要精确的碰撞后速度,事件驱动更合适,例如航天器对接、机构死点冲击。若接触区域大、接触点频繁变化、存在大量持续接触,时间步进更稳健,例如颗粒流、履带与地面、齿轮啮合。

一个实用的判断依据是接触事件密度:单位时间内事件数远小于步数时,事件驱动效率高;事件数与步数同量级时,时间步进更划算。此外,恢复系数 e 的选取也影响策略:e 接近 1 时碰撞后速度对事件定位敏感,宜用事件驱动;e 接近 0 时能量耗散强,时间步进的“抹平”误差可接受。

工程提示:无论采用哪种策略,都建议先做一次“无接触”仿真,确认自由运动轨迹和能量守恒正常,再开启接触检测。接触参数(刚度、阻尼、恢复系数、摩擦系数)应逐步标定,不要一次性全部打开。

五、与连续力模型的对比

连续力模型把接触力写成穿透深度的函数,例如:

F_N = k · δ + c · δ̇

其中 δ 为穿透深度。它把单边约束“软化”为双边力,优点是容易嵌入常规 ODE 求解器,缺点是 k 必须足够大才能近似不可穿透,而 k 过大会导致数值刚性,步长被迫减小。非光滑模型则直接处理互补条件,不引入人为刚度,但需要专门的互补求解器。两者并非对立:在接触刚度明确、穿透可接受的场合,连续力模型更简单;在需要严格非穿透、碰撞速度跳变明显的场合,非光滑模型更准确。

理解接触在动力学框架中的定位,核心就是抓住三点:单边约束带来互补条件,互补条件导致非光滑,非光滑要求事件驱动或时间步进。这三步决定了后续接触检测、冲量求解和积分器选择的全部逻辑。