1. 避障基础概念

大家好,我是你们的老朋友。今天咱们聊聊避障规划的基础。说实话,我刚入行那会儿,觉得避障不就是「绕开障碍物」嘛,有啥好学的?直到第一次在真机上跑规划,机械臂直接怼到工件上……嗯,从那以后我再也不敢小看避障了。

什么是避障规划?

避障规划,说白了就是让机器人在有障碍物的环境中,找到一条从起点到终点的安全路径。这条路径不仅要无碰撞,还得满足运动学约束、动力学约束,甚至要考虑路径的平滑度。

我习惯把避障规划拆成两个层面:

  • 全局规划:在已知环境中,提前算出一条无碰撞路径。比如用RRT、PRM这些算法。
  • 局部规划:在运动过程中,实时检测并避开动态障碍物。比如DWA、TEB这些方法。

在MoveIt里,这两者是配合使用的。全局规划给出一个「大方向」,局部规划负责「微调」。你想想看,如果只有全局规划,遇到突然出现的障碍物怎么办?如果只有局部规划,又容易陷入局部最优。所以,两者缺一不可。

核心要点:避障规划的本质是「在约束条件下求解可行路径」。约束包括:几何约束(不碰撞)、运动学约束(关节限位)、动力学约束(速度/加速度限制)。

碰撞检测原理

碰撞检测是避障规划的「眼睛」。没有准确的碰撞检测,规划出来的路径就是纸上谈兵。

碰撞检测的核心问题很简单:两个物体是否相交? 但实际做起来,远比想象中复杂。我记得有一次,我的机器人明明离障碍物还有5厘米,碰撞检测却报错了。排查了半天,发现是模型精度问题——STL网格太粗糙了。

常见的碰撞检测方法有:

  1. 离散碰撞检测:在路径上采样一些点,检查每个点是否碰撞。优点是快,缺点是可能漏掉两个采样点之间的碰撞。
  2. 连续碰撞检测:考虑物体在时间上的运动轨迹,检测整个运动过程中是否发生碰撞。更准确,但计算量也更大。

在MoveIt里,默认用的是离散碰撞检测。我个人建议,如果你的机器人运动速度不快,或者障碍物比较稀疏,离散检测完全够用。但如果场景很拥挤,或者机器人运动很快,最好开启连续碰撞检测。

小技巧:在MoveIt的规划请求适配器中,可以设置check_collisions参数为true,并调整collision_checks的数量。我一般设成10~20,既能保证精度,又不会太慢。

AABB与OBB包围盒

做碰撞检测,总不能拿两个复杂的网格模型直接算吧?那太慢了。所以,我们通常用「包围盒」来近似表示物体的形状。

包围盒有两种主流方案:

类型 全称 特点 适用场景
AABB Axis-Aligned Bounding Box 轴对齐,计算简单,但包裹不紧密 静态场景、快速粗检测
OBB Oriented Bounding Box 方向可旋转,包裹更紧密,计算稍复杂 动态物体、需要高精度检测

说白了,AABB就是「不管物体怎么转,包围盒始终和世界坐标系对齐」。而OBB是「包围盒跟着物体一起转」。你想想看,如果一个长条形机械臂斜着放,AABB会留下大量空白区域,导致「假碰撞」;而OBB就能更贴合实际形状。

我在项目中遇到过一个问题:用AABB做碰撞检测,明明机械臂离障碍物还有一段距离,却总是报碰撞。后来换成OBB,问题就解决了。所以,如果你的机器人经常处于非水平姿态,我建议优先考虑OBB。

注意:OBB虽然更精确,但计算量也更大。在实时性要求高的场景下,可以先用AABB做粗检测,过滤掉明显不碰撞的物体,再用OBB做精细检测。这叫「两级碰撞检测」,效率很高。

FCL库简介

FCL(Flexible Collision Library)是MoveIt底层用的碰撞检测库。它支持多种碰撞检测算法,包括上面提到的AABB和OBB。

FCL的核心功能有:

  • 碰撞查询:判断两个物体是否相交
  • 距离查询:计算两个物体之间的最近距离
  • 连续碰撞检测:检测物体在运动过程中是否发生碰撞

在MoveIt里,FCL是默认的碰撞检测引擎。你不需要直接调用FCL的API,MoveIt已经帮你封装好了。但了解它的工作原理,对调参很有帮助。

举个例子,FCL的碰撞检测流程大致是这样的:

1. 构建场景:把机器人和障碍物都转换成FCL支持的几何体(如球体、立方体、网格)
2. 构建BVH树:对每个几何体构建包围盒层次结构(BVH),加速碰撞检测
3. 执行检测:遍历BVH树,判断是否有节点相交
4. 返回结果:如果有碰撞,返回碰撞点、法向量等信息

我曾经踩过一个坑:FCL默认的碰撞检测精度是1e-6,但我的模型单位是毫米,导致一些微小间隙被忽略。后来我把精度调到了1e-3,问题就解决了。所以,记得根据你的实际场景调整检测精度。

总结一下:FCL是MoveIt避障的「心脏」。虽然平时我们不需要直接操作它,但理解它的工作原理,能帮你更好地诊断避障问题。比如,如果规划出来的路径明明没碰撞,但MoveIt却报错,很可能是FCL的检测精度设置不合理。

本章知识体系

下面这张图,是我自己梳理的避障基础概念关系图。你可以把它当作一个「知识地图」,方便后续深入学习。

避障规划 碰撞检测原理 AABB / OBB 包围盒 FCL 碰撞检测库 离散碰撞检测 连续检测 AABB OBB 碰撞查询 距离查询 避障基础概念知识体系

这张图把本章的核心内容串起来了。你可以看到,避障规划是「树干」,碰撞检测、包围盒、FCL是「三大分支」。每个分支下面还有更细的子概念。建议你把这个图保存下来,后续学习时随时对照。

可可精品资料库