接触动力学(Contact Dynamics)研究的是两个物体"碰上"的那一刻以及之后,力与运动如何相互决定。它的核心特征是非光滑(non-smooth):力可以在一瞬间从零跳到很大,速度可以在碰撞中突变,中间没有平滑过渡。
它为什么特殊
想象你用手指推桌上的一本书。手没碰书之前,书一动不动;手指一碰上去,力立刻出现。关键在于:这个力不是某个公式提前算好的,而是由"书不能穿过桌面"这个约束反推出来的——你使多大劲,桌面就回多大劲,永远刚好卡住。
这更像一个开关,而不是旋钮。接触要么成立、要么分离;表面要么粘住、要么滑动,切换是瞬时的。经典力学的大部分内容讲究力和运动平滑连续,接触动力学偏偏在连续世界的正中间插进一堆跳变。
摩擦让事情更麻烦。静摩擦转向滑动摩擦是突变;而且同样一本书放在桌上,四个角各受多少力,往往有无穷多组合法答案——数学上叫多解。仿真器只能从中挑一个,挑法不同,后续行为就分叉。
和相邻概念的区别
| 概念 | 负责什么 | 典型难题 |
|---|---|---|
| 碰撞检测(collision detection) | 判断有没有碰上 | 找接触点、避免漏检 |
| 刚体动力学(rigid body dynamics) | 没接触时的运动 | 平滑地积分下去 |
| 接触动力学 | 接触期间力与运动怎么定 | 非光滑、多解、瞬态 |
简单说:碰撞检测回答"碰没碰",接触动力学回答"碰了之后力多大、接下来怎么动"。它通常被写成线性互补问题(linear complementarity problem,LCP)一类的形式,再用迭代方法求解。
为什么仿真到现实(sim-to-real)这么难
1. 时间步会漏掉瞬间。 真实的撞击几乎发生在零时间里,而仿真只能按固定时间步推进。步长太大就穿模或弹得离谱,步长太小又算不动。
2. 非光滑意味着没有梯度。 强化学习和可微仿真都依赖"稍微改一点输入,输出会怎么变",但在开关式的跳变点上,这个导数根本不存在。
3. 参数测不准。 摩擦系数、恢复系数(coefficient of restitution)随材料、表面、速度、湿度变化,实验室里测出的值搬到现场未必成立。
4. 现实比模型软。 刚体假设忽略了真实手指和地面的微小形变、微滑、传感器延迟,这些恰是抓稳与抓飞的分界线。
对从业者和普通人的意义
做机器人的人会反复撞上它:抓取、装配、足式行走、灵巧手,成败几乎都卡在接触那几毫秒。真机试验又贵又慢,于是大家寄希望于仿真,但仿真里练会的技能,常常一上真机就打滑。
普通人的体感则来自别处:机器人捏鸡蛋容易捏碎、走路姿态显得"硬"、游戏和电影里偶尔出现穿模或诡异弹飞——背后都是同一个问题。它不难在公式不够多,而难在世界在这里是"不连续"的。硬件和控制器的具体参数请以官方页面为准。
