3. 碰撞检测概述
在双臂机器人系统中,碰撞检测并不是一个孤立的算法模块,而是连接感知、规划、控制与安全策略的“判断中枢”。它要回答的核心问题非常具体:在给定的时刻或未来的某段时间内,机器人本体、末端执行器、工件、环境障碍以及两个机械臂之间,是否发生了或将会发生几何侵入?如果发生,侵入发生在哪里、深度多大、涉及哪些连杆或物体,以及需要以多快的速度响应。只有把这些问题定义清楚,后续的避障规划、轨迹修正和急停策略才有可靠的输入。
一、碰撞检测的定义与基本要素
从形式化角度看,碰撞检测是判断两个或多个几何体在空间中的交集是否为空的过程。对双臂机器人而言,参与检测的对象通常包括:左臂连杆集合、右臂连杆集合、末端夹爪或工具、被抓取工件、工作台、围栏、人类操作员以及其他动态障碍物。每个对象都需要一个几何表示,例如包围盒、凸包、网格或带安全距离的膨胀体。
碰撞检测的输出不只是“是/否”的布尔值。在工程实现中,它通常包含以下要素:
- 碰撞对:哪两个对象或哪两个连杆之间发生了干涉,例如
left_link4与right_link2。 - 碰撞位置:接触点或最近点在世界坐标系或关节坐标系中的位置。
- 穿透深度:两个几何体相互侵入的距离,用于评估严重程度。
- 最近距离:未发生碰撞时,两个对象之间的最小距离,用于安全裕度判断。
- 时间信息:碰撞发生在当前时刻,还是在未来轨迹的某个时间点。
二、碰撞检测的分类
根据不同的维度,碰撞检测可以分为多种类型。理解这些分类,有助于在双臂机器人系统中选择合适的算法和部署位置。
| 分类维度 | 类型 | 典型含义 | 双臂机器人示例 |
|---|---|---|---|
| 按时间 | 静态检测 | 固定位姿下判断是否相交 | 装配前检查两臂当前姿态是否干涉 |
| 按时间 | 动态/连续检测 | 沿轨迹或时间步判断未来碰撞 | 双臂协同搬运时预测轨迹交叉 |
| 按几何 | 离散检测 | 在离散采样点上做相交测试 | 每个控制周期检查一次 |
| 按几何 | 连续检测 | 考虑扫掠体,避免漏检 | 高速运动薄壁工件防穿透 |
| 按对象 | 自碰撞 | 机器人自身连杆间碰撞 | 左臂与右臂、臂与本体 |
| 按对象 | 环境碰撞 | 机器人与外部物体碰撞 | 与工作台、围栏、人 |
| 按精度 | 粗略检测 | 包围盒/球体快速筛选 | 实时性要求高的预筛选 |
| 按精度 | 精确检测 | 网格/凸包精确求交 | 关键装配段精细校验 |
在双臂系统中,自碰撞检测尤为关键。由于两个机械臂共享同一个基座和工作空间,它们之间的干涉概率远高于单臂机器人。常见的做法是先用包围球或 AABB 做快速排除,再对可能相交的连杆对进行精确检测。
三、性能指标:不只是“快”
评价碰撞检测算法时,不能只看单次查询耗时。对机器人系统而言,以下指标共同决定它是否可用:
- 检测精度:是否漏检、误检。漏检会导致真实碰撞,误检会频繁触发急停或规划失败。
- 查询速度:单次检测耗时,通常要求满足控制周期,例如 1 kHz 控制下需在 1 ms 内完成。
- 可扩展性:对象数量增加时性能是否稳定,例如从 2 个臂扩展到 4 个协作臂。
- 内存占用:几何模型和层次包围盒的存储开销,嵌入式控制器上尤其敏感。
- 数值稳定性:在临界接触、薄壁、共面等情况下是否稳定。
- 安全裕度支持:能否方便地设置安全距离和膨胀量。
四、碰撞检测在机器人系统中的位置
碰撞检测位于感知与执行之间,是规划器和控制器共同依赖的基础服务。可以用下面的信号与数据流关系来理解它在系统中的位置。
从图中可以看出,碰撞检测向上承接感知与状态估计,向下服务规划、控制与安全监控。它既不是单纯的“避障算法”,也不是只属于规划器的内部功能,而是一个跨层的基础服务。在双臂系统中,由于两个臂的运动相互耦合,碰撞检测还需要与协调规划器紧密配合,实时更新双臂之间的相对位姿关系。
五、典型场景与常见误区
以一个双臂协同装配场景为例:左臂持工件,右臂持拧紧工具,两者需要在狭小空间内完成对准。此时碰撞检测需要同时处理三类关系:左臂与右臂之间的自碰撞、工具与工件之间的接触检测、以及双臂与环境之间的安全距离检测。如果只做静态检测,可能在轨迹中间段漏掉瞬时干涉;如果只做粗略包围盒检测,又可能把正常接触误判为碰撞。
因此,在系统设计时,应明确碰撞检测的输入输出接口、更新频率、几何精度等级和安全阈值,并将其作为独立模块进行测试与验证。只有这样,双臂机器人在复杂环境中的运动才能既高效又安全。