4. 碰撞检测基本判据

在 XPlanar 系统中,动子(Mover)沿平面自由运动,其碰撞检测的核心任务不是“判断两个物体是否相交”这么简单,而是要在每个控制周期内,对多动子、多静态障碍的复杂场景快速给出“是否安全”的结论。要做到这一点,必须先建立统一的几何判据体系:用什么形状近似动子与障碍、如何计算最小距离、如何区分静态与动态冲突,以及在实时性约束下如何选择检测粒度。

一、包围盒:用简单几何近似复杂轮廓

XPlanar 动子本身是矩形托盘结构,但实际负载可能是不规则工件。直接对任意多边形做精确距离计算代价很高,因此工程上通常先用包围盒(Bounding Volume)做粗筛,再对少量候选对做精确检测。常用的三种包围盒各有适用场景:

  • 圆形包围盒:以动子中心为圆心、以最大外伸半径为半径。优点是距离计算极快——两圆最小距离就是圆心距减去两半径;旋转不变,动子转向不影响结果。缺点是对于长条形动子,包围圆会明显大于实际轮廓,导致“虚警”偏多,适合作为第一层快速排除。
  • 矩形包围盒(AABB/OBB):AABB 是轴对齐矩形,OBB 是随动子朝向旋转的矩形。XPlanar 动子本身近似矩形,OBB 贴合度好,且矩形间最小距离可通过分离轴定理(SAT)高效计算。工程中常以 OBB 作为主判据。
  • 多边形包围盒:用凸多边形(或凸包)逼近实际负载轮廓,贴合度最高,但距离计算需要做边-边、点-边最近距离遍历,计算量随顶点数增长。适合负载形状特殊、安全间隙要求极严的场合。

选择原则可以概括为:粗筛用圆、主判用矩形、精判用多边形。三层级联可以在保证安全的前提下把计算量压到最低。

XPlanar 动子包围盒层级与最小距离判据 ① 圆形包围盒(粗筛) 动子 R d = |C₁C₂| − R₁ − R₂ 旋转不变 · 计算最快 · 虚警多 ② 矩形包围盒 OBB(主判) 动子 SAT 分离轴 → 最小间隙 贴合好 · 随朝向旋转 · 主判据 ③ 凸多边形(精判) 负载 边-边 / 点-边最近距离 贴合最高 · 计算最重 · 精判 级联检测:圆 → 矩形 → 多边形,逐层收紧,兼顾安全与实时性

二、动子间最小距离计算

设两个动子 A、B 的 OBB 分别为矩形 RA、RB,其最小距离 dmin 的工程计算流程如下:

  1. 取 RA 的四条边法线方向与 RB 的四条边法线方向,共 4 个候选分离轴(矩形只需 4 轴,因为对边法线相同)。
  2. 对每个轴 n,计算 RA 在 n 上的投影区间 [amin, amax] 与 RB 的投影区间 [bmin, bmax]。
  3. 若存在某轴使两区间不重叠,则两矩形分离,该轴上的间隙 g = max(amin−bmax, bmin−amax)。
  4. 所有分离轴中取最小间隙,即为两 OBB 的最小距离 dmin = min(gi)。若所有轴都重叠,则 dmin ≤ 0,表示已相交。

对于圆形包围盒,计算更直接:dmin = |CACB| − RA − RB。其中 C 为圆心,R 为半径。当 dmin < 0 时两圆相交。

实际工程中,安全判据通常不是 dmin > 0,而是 dmin ≥ dsafe,其中 dsafe 是预留安全间隙。例如某示例场景中动子尺寸 240 mm × 180 mm,安全间隙设为 30 mm,则当两动子 OBB 最小距离小于 30 mm 时即触发减速或避让。该数值为教学示例,实际应根据负载尺寸、定位误差和控制周期动态确定。

三、静态障碍与动态动子冲突判定

静态障碍(如工位立柱、传感器支架、固定挡块)在调度周期内位置不变,其包围盒可预先计算并缓存。动态动子每个周期位置更新,因此冲突判定分为两类:

  • 动子–静态障碍:只需计算动子 OBB 与障碍 OBB 的最小距离。由于障碍固定,可预先建立空间索引(如网格或 R 树),只对动子所在网格及邻域内的障碍做检测,避免全场景遍历。
  • 动子–动子:需要两两检测。若有 N 个动子,朴素做法是 O(N²)。工程上先用圆形包围盒做粗筛,只对圆心距小于 RA+RB+dsafe 的动子对做 OBB 精判,可将候选对数量大幅压缩。

冲突判定结果通常分为三档:安全(dmin ≥ dsafe)、预警(0 ≤ dmin < dsafe,需减速或重新规划)、碰撞(dmin < 0,必须立即停止或紧急避让)。三档对应不同的调度响应,而不是简单的“碰/不碰”二值判断。

四、实时性约束下的检测粒度选择

XPlanar 控制周期通常在毫秒级,碰撞检测必须在该周期内完成。检测粒度越细,安全性越高,但计算量越大。工程上需要在两者之间做权衡,常用策略如下:

检测粒度 几何对象 单对计算量 适用场景
粗粒度 圆形包围盒 极低(几次乘加) 全场景快速排除,动子数量多时首选
中粒度 OBB 矩形 中等(4 轴投影) 主判据,兼顾贴合度与速度
细粒度 凸多边形 较高(顶点数×边数) 仅对预警对做精判,确认是否真正危险

一个可落地的工程做法是“分级触发”:每个周期先对所有动子做圆形粗筛,得到少量候选对;对候选对做 OBB 精算,得到 dmin;仅当 dmin 落入预警区间时,才调用多边形精判确认实际轮廓是否真的接近。这样既保证了安全,又把最重的计算限制在极少数动子对上。

粒度选择经验:动子数量少、负载规则时,可直接用 OBB 作为唯一判据;动子密集、负载异形时,建议保留“圆→矩形→多边形”三级级联。安全间隙 dsafe 不宜设得过小,否则会频繁触发预警导致调度抖动;也不宜过大,否则会浪费平面空间、降低吞吐。
注意:包围盒只是近似,不能完全替代真实轮廓。对于有凹形、镂空或突出尖角的负载,包围盒可能低估实际占用区域。此时应使用凸包或直接以多边形轮廓参与精判,并在安全间隙中额外补偿近似误差。

综上,XPlanar 碰撞检测的基本判据可以归纳为:以圆形包围盒做快速粗筛,以 OBB 矩形做主判并计算最小距离,以凸多边形做精判确认;静态障碍预缓存、动态动子分级检测;最终根据 dmin 与 dsafe 的关系输出安全、预警、碰撞三档结果,并在实时性约束下动态选择检测粒度。这套判据体系是后续避让调度与路径重规划的基础。