一、动态避障概述
1.1 什么是动态避障
动态避障,说白了就是让机器人在移动过程中,躲开那些会动的东西。
你想想看,一个扫地机器人在客厅里工作。沙发是静止的,这叫静态障碍。但你家猫突然跑过来,或者小孩把玩具车踢过来——这些会移动的物体,就是动态障碍。
我做了这么多年机器人控制,最深的体会是:静态避障是几何问题,动态避障是时空问题。
为什么这么说?因为动态障碍物不仅占位置,还占时间。你得预测它下一秒在哪,然后提前规划路径。这不是简单的「看到障碍就绕开」,而是「看到障碍,算它轨迹,再决定怎么躲」。
核心定义:动态避障是指机器人在未知或部分已知的动态环境中,通过实时感知、预测和规划,安全避开移动障碍物并到达目标点的控制技术。
1.2 动态避障 vs 静态避障
这两者的区别,我习惯用一个比喻来解释:
- 静态避障——就像你走在一个摆满家具的房间里。家具不动,你慢慢绕就行。
- 动态避障——就像你在早高峰的地铁站里穿行。每个人都在动,你得不断调整步伐。
具体差异,我整理了一张表:
| 对比维度 | 静态避障 | 动态避障 |
|---|---|---|
| 障碍物状态 | 位置固定不变 | 位置随时间变化 |
| 规划方式 | 一次规划,执行即可 | 需要反复重规划 |
| 感知要求 | 单帧点云/图像即可 | 需要连续帧+速度估计 |
| 核心难点 | 路径最优性 | 实时性与安全性 |
| 典型算法 | A*、Dijkstra、RRT | DWA、TEB、MPC |
嗯,这里要注意:很多初学者以为动态避障就是「跑得快一点的静态避障」。这是大错特错的。我在项目中遇到过一位同事,直接把A*的规划频率从1Hz提到10Hz,结果机器人还是撞上了行人。为什么?因为A*根本不知道行人会往哪走,它只是反复重新规划而已。
1.3 动态避障的核心挑战
做动态避障这么多年,我觉得真正的难点就三个:实时性、不确定性、环境动态变化。一个一个说。
1.3.1 实时性
机器人不能「想太久」。你想想看,一个行人朝你走来,你只有零点几秒做出反应。
我个人的经验是:动态避障的规划周期通常需要控制在50ms以内。超过100ms,基本就危险了。
但问题来了——传感器数据要处理、障碍物要检测、轨迹要预测、路径要规划、控制指令要下发。这一套流程下来,计算量非常大。
我的建议:不要试图在单个线程里做完所有事。把感知、预测、规划拆成独立模块,用流水线方式并行跑。我在AGV项目里就是这么干的,规划周期从120ms降到了35ms。
1.3.2 不确定性
这是最让人头疼的部分。
障碍物会怎么动?你不知道。传感器测到的位置准不准?你不知道。甚至机器人的自身定位都有误差。
我曾经在一个仓储机器人项目里踩过坑。激光雷达检测到一个叉车,位置误差大概10cm。我心想10cm嘛,绕一下就行。结果叉车实际速度比估计的快了20%,机器人绕到一半,叉车已经贴脸了。还好有急停,不然就撞上了。
避坑指南:永远不要相信「单一传感器」的测量值。我曾经因为只依赖激光雷达,结果在玻璃墙前面吃了大亏。后来我强制要求:动态障碍物的位置必须经过至少两种传感器的交叉验证。
处理不确定性,我常用的方法有:
- 概率占用地图——不是「有/没有」障碍物,而是「有障碍物的概率是多少」
- 卡尔曼滤波——融合多帧数据,平滑轨迹估计
- 保守膨胀——把障碍物半径人为扩大20%,留出安全余量
1.3.3 环境动态变化
环境不是一成不变的。行人可能突然转身、车辆可能突然加速、门可能突然打开。
你想想看,如果环境变化的速度超过了机器人的反应速度,那任何算法都救不了你。
所以这里有个关键指标:环境变化率 vs 机器人反应率。我一般要求机器人的反应速度至少是环境变化速度的3倍以上。达不到?那就降速运行。
举个具体例子。我在做服务机器人时,设定了一个规则:
# 动态避障安全策略示例
if 障碍物速度 > 机器人最大速度 * 0.7:
机器人速度 = 机器人最大速度 * 0.5 # 降速
重新规划周期 = 30ms # 提高规划频率
else:
机器人速度 = 机器人最大速度 * 0.8
重新规划周期 = 50ms
这个规则看起来很粗糙,但实际效果很好。说白了,就是环境越乱,机器人越要「慢下来、多看看」。
知识体系总览
下面这张图,是我自己梳理的动态避障知识体系。每次带新人,我都会先让他们看这张图:
这张图把动态避障的核心脉络理清楚了。从三大挑战出发,到应对方法,再到典型算法,最后落到核心目标上。后面的章节,我们会逐一深入每个算法和实现细节。
好了,第一章就到这里。记住一句话:动态避障不是「躲」,而是「预判」。把这个观念刻在脑子里,后面的内容你会学得更轻松。
公众号:蓝海资料掘金营,微信deep3321