碰撞检测(物理引擎)
Collision Detection常用物理引擎每一步找出哪些物体碰上了、碰在哪、穿进去多深。
碰撞检测是物理引擎每个仿真步都要做的一环,输出一份接触列表(接触点、法向、穿透深度),再交给求解器算接触力。场景里 n 个物体两两配对有 n(n−1)/2 种,逐对精算太慢,所以一般分两级:粗检测(broad phase)用包围盒排序等廉价方法,如扫掠剪枝(sweep-and-prune),快速排除明显碰不到的物体对;细检测(narrow phase)再对剩下的对按形状精确计算,凸体之间常用 GJK/EPA 算法。MuJoCo 在两级之间还加了一层基于包围盒层次树的中间检测,并用 contype/conaffinity 位掩码跳过不需要检测的对。注意它和机器人本体安全里检测真实撞击的「碰撞检测」不是一回事。
例子MuJoCo 里一台机器人和桌面、方块的所有几何体,先经扫掠剪枝筛出可能相碰的物体对,再做包围球测试过滤;最后,球、盒子这类基本形状之间用解析公式直接算,涉及网格的物体对(网格先换成凸包)交给 GJK/EPA,算出接触点和穿透深度。
- 也叫
- broad phase / narrow phase、粗检测/细检测、宽相/窄相检测
- 相关
- 碰撞体、宽相 / 窄相碰撞检测、GJK 算法、包围盒、碰撞过滤(碰撞组)、连续碰撞检测(隧穿问题)
- 来源
- MuJoCo Documentation: Computation - Collision detection
NVIDIA PhysX 5 Documentation: Rigid Body Collision