3. 环境感知与障碍物建模
各位同学,大家好。我是你们的老朋友,一个在无人机航迹规划领域摸爬滚打了十几年的工程师。今天咱们来聊聊一个非常核心,也特别有意思的话题——环境感知与障碍物建模。
说白了,无人机要飞得好,首先得「看得见」周围的世界。你想想看,一个盲人开车,技术再好也白搭。无人机也是一样。它得知道自己身处何方,周围有什么东西,哪些是能碰的,哪些是碰不得的。这就是环境感知要做的事。
我个人习惯把这一章拆成三个部分来讲:传感器、障碍物类型,还有碰撞检测模型。咱们一个一个来。
3.1 传感器:无人机的「眼睛」
无人机用什么来看世界?靠传感器。目前主流的就三种:激光雷达、视觉传感器、超声波传感器。它们各有各的脾气,也各有各的擅长。
3.1.1 激光雷达(LiDAR)
激光雷达,我愿称之为「硬核选手」。它通过发射激光束,测量反射回来的时间,来精确计算距离。精度高,抗干扰能力强,晚上也能用。
优点:
- 精度极高,毫米级误差
- 不受光照影响,白天黑夜通吃
- 能直接获取三维点云数据
缺点:
- 贵!真的贵。一个工业级的LiDAR能顶半架无人机
- 体积大,重量重,小飞机背不动
- 在雨雪、雾霾天气下性能会下降
3.1.2 视觉传感器(摄像头)
视觉传感器,说白了就是摄像头。它模仿人眼,通过图像来理解世界。成本低,信息丰富,还能识别颜色、纹理、文字。
优点:
- 便宜,一个普通摄像头几十块钱
- 轻便,几乎不增加负载
- 信息量大,能识别物体类别
缺点:
- 依赖光照,暗光环境下基本抓瞎
- 计算量大,需要强大的处理器
- 深度估计精度不如激光雷达
3.1.3 超声波传感器
超声波传感器,靠发射声波并接收回波来测距。原理简单,成本极低。但它有个致命弱点——精度差,而且容易受干扰。
优点:
- 便宜到可以当消耗品
- 对透明物体(如玻璃)有效
- 功耗极低
缺点:
- 精度低,只能做粗略测距
- 受温度、湿度、气流影响大
- 测量范围窄,一般不超过10米
我建议,超声波传感器只用来做近距辅助,比如降落时的地面高度检测。别指望它做主要避障。
3.2 障碍物类型:静态与动态
传感器拿到数据后,我们得知道这些数据代表什么。障碍物,按运动状态分两类:静态和动态。
3.2.1 静态障碍物
静态障碍物,就是那些不会动的东西。比如建筑物、树木、电线杆、山体。它们的位置是固定的,我们可以提前建图,或者通过一次扫描就确定下来。
处理静态障碍物,相对简单。你只需要在航迹规划时,把它们当成「禁区」绕过去就行。
3.2.2 动态障碍物
动态障碍物就麻烦多了。飞鸟、其他无人机、行人、车辆……它们随时在动,位置不确定。
处理动态障碍物,需要实时跟踪和预测。我常用的方法是:
- 用卡尔曼滤波或粒子滤波跟踪目标
- 预测其未来几秒的运动轨迹
- 动态调整自己的航迹
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。它可以根据物体的实际方向旋转,包围得更紧。
优点:
- 精度高,能紧密贴合物体
- 适合旋转物体
缺点:
- 计算复杂,需要分离轴定理
- 更新旋转时开销大
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 知识体系总览
为了让大家更直观地理解这一章的内容,我画了一张图。它把传感器、障碍物类型、碰撞检测模型串在了一起。
这张图把整个流程串起来了。从传感器获取原始数据,到识别障碍物是静态还是动态,再到选择合适的碰撞检测模型,最后输出安全航迹。每一步都环环相扣。
好了,这一章的内容就到这里。记住,做航迹规划,别光盯着算法。先把「眼睛」擦亮,把「世界」看清楚。后面的路,才好走。