3. 环境感知与障碍物建模

各位同学,大家好。我是你们的老朋友,一个在无人机航迹规划领域摸爬滚打了十几年的工程师。今天咱们来聊聊一个非常核心,也特别有意思的话题——环境感知与障碍物建模。

说白了,无人机要飞得好,首先得「看得见」周围的世界。你想想看,一个盲人开车,技术再好也白搭。无人机也是一样。它得知道自己身处何方,周围有什么东西,哪些是能碰的,哪些是碰不得的。这就是环境感知要做的事。

我个人习惯把这一章拆成三个部分来讲:传感器、障碍物类型,还有碰撞检测模型。咱们一个一个来。

3.1 传感器:无人机的「眼睛」

无人机用什么来看世界?靠传感器。目前主流的就三种:激光雷达、视觉传感器、超声波传感器。它们各有各的脾气,也各有各的擅长。

3.1.1 激光雷达(LiDAR)

激光雷达,我愿称之为「硬核选手」。它通过发射激光束,测量反射回来的时间,来精确计算距离。精度高,抗干扰能力强,晚上也能用。

优点:

  • 精度极高,毫米级误差
  • 不受光照影响,白天黑夜通吃
  • 能直接获取三维点云数据

缺点:

  • 贵!真的贵。一个工业级的LiDAR能顶半架无人机
  • 体积大,重量重,小飞机背不动
  • 在雨雪、雾霾天气下性能会下降
我的经验: 我在做大型巡检无人机项目时,首选就是激光雷达。虽然贵,但数据干净,后期处理省心。不过,如果你做的是消费级产品,比如航拍机,那还是老老实实用视觉吧。

3.1.2 视觉传感器(摄像头)

视觉传感器,说白了就是摄像头。它模仿人眼,通过图像来理解世界。成本低,信息丰富,还能识别颜色、纹理、文字。

优点:

  • 便宜,一个普通摄像头几十块钱
  • 轻便,几乎不增加负载
  • 信息量大,能识别物体类别

缺点:

  • 依赖光照,暗光环境下基本抓瞎
  • 计算量大,需要强大的处理器
  • 深度估计精度不如激光雷达
注意: 我曾经在一个项目中,只用了视觉传感器做避障。结果傍晚光线变暗,无人机直接撞上了电线杆。嗯,从那以后,我再也不敢在弱光环境下完全依赖视觉了。

3.1.3 超声波传感器

超声波传感器,靠发射声波并接收回波来测距。原理简单,成本极低。但它有个致命弱点——精度差,而且容易受干扰。

优点:

  • 便宜到可以当消耗品
  • 对透明物体(如玻璃)有效
  • 功耗极低

缺点:

  • 精度低,只能做粗略测距
  • 受温度、湿度、气流影响大
  • 测量范围窄,一般不超过10米

我建议,超声波传感器只用来做近距辅助,比如降落时的地面高度检测。别指望它做主要避障。

3.2 障碍物类型:静态与动态

传感器拿到数据后,我们得知道这些数据代表什么。障碍物,按运动状态分两类:静态和动态。

3.2.1 静态障碍物

静态障碍物,就是那些不会动的东西。比如建筑物、树木、电线杆、山体。它们的位置是固定的,我们可以提前建图,或者通过一次扫描就确定下来。

处理静态障碍物,相对简单。你只需要在航迹规划时,把它们当成「禁区」绕过去就行。

3.2.2 动态障碍物

动态障碍物就麻烦多了。飞鸟、其他无人机、行人、车辆……它们随时在动,位置不确定。

处理动态障碍物,需要实时跟踪和预测。我常用的方法是:

  1. 用卡尔曼滤波或粒子滤波跟踪目标
  2. 预测其未来几秒的运动轨迹
  3. 动态调整自己的航迹
核心要点: 静态障碍物靠「躲」,动态障碍物靠「猜」。猜得准不准,直接决定了你的无人机能不能安全通过。

3.3 碰撞检测模型:数学上的「安全距离」

有了障碍物的位置和形状,我们怎么判断无人机和它有没有撞上?这就需要碰撞检测模型。说白了,就是用数学方法,把无人机和障碍物抽象成简单的几何体,然后算它们有没有重叠。

常用的有三种模型:AABB、OBB、球体。

3.3.1 AABB(轴对齐包围盒)

AABB,全称Axis-Aligned Bounding Box。它的特点是:盒子的边永远和坐标轴平行。

优点:

  • 计算简单,只需要比较坐标值
  • 内存占用小

缺点:

  • 对旋转物体不友好,包围盒会变大
  • 精度较低

代码实现也很简单:

// AABB碰撞检测
bool checkAABB(AABB a, AABB b) {
    return (a.minX <= b.maxX && a.maxX >= b.minX) &&
           (a.minY <= b.maxY && a.maxY >= b.minY) &&
           (a.minZ <= b.maxZ && a.maxZ >= b.minZ);
}

3.3.2 OBB(有向包围盒)

OBB,全称Oriented Bounding Box。它可以根据物体的实际方向旋转,包围得更紧。

优点:

  • 精度高,能紧密贴合物体
  • 适合旋转物体

缺点:

  • 计算复杂,需要分离轴定理
  • 更新旋转时开销大
我的建议: 如果你的无人机经常做翻滚、旋转动作,或者障碍物形状不规则,用OBB更合适。但如果你只是做简单的水平飞行,AABB就够用了。

3.3.3 球体包围盒

球体包围盒,就是用球体来包裹物体。计算最简单,但精度也最低。

优点:

  • 计算极快,只需比较球心距离和半径和
  • 无方向性,旋转不影响

缺点:

  • 精度差,对细长物体浪费空间

代码示例:

// 球体碰撞检测
bool checkSphere(Sphere a, Sphere b) {
    float dist = sqrt(pow(a.x - b.x, 2) + 
                      pow(a.y - b.y, 2) + 
                      pow(a.z - b.z, 2));
    return dist < (a.radius + b.radius);
}

3.4 知识体系总览

为了让大家更直观地理解这一章的内容,我画了一张图。它把传感器、障碍物类型、碰撞检测模型串在了一起。

环境感知与障碍物建模知识体系 环境感知与建模 传感器 障碍物类型 碰撞检测模型 激光雷达 视觉传感器 超声波 静态障碍物 动态障碍物 AABB OBB 球体 核心思路 传感器获取数据 → 识别障碍物类型 → 选择碰撞检测模型 → 规划安全航迹

这张图把整个流程串起来了。从传感器获取原始数据,到识别障碍物是静态还是动态,再到选择合适的碰撞检测模型,最后输出安全航迹。每一步都环环相扣。

总结一下: 环境感知是航迹规划的基础。传感器选对了,数据才可靠;障碍物分清了,策略才有效;碰撞检测模型选好了,计算才高效。这三者缺一不可。

好了,这一章的内容就到这里。记住,做航迹规划,别光盯着算法。先把「眼睛」擦亮,把「世界」看清楚。后面的路,才好走。


专注资料整理