4、局部路径规划器调参(DWA):DWA算法核心、速度采样空间、轨迹评价函数权重调优
各位同学,今天我们来啃一块硬骨头——DWA局部路径规划器的调参。说实话,我在刚入行那会儿,觉得DWA就是个黑盒子,参数调来调去,机器人要么原地转圈,要么一头撞墙。后来踩的坑多了,才慢慢摸清里面的门道。
DWA,全称是Dynamic Window Approach,动态窗口法。说白了,它就是在每一时刻,根据机器人当前的速度和加速度限制,算出一堆可能的速度组合(线速度+角速度),然后模拟出这些速度对应的轨迹,最后挑一条最好的去执行。
核心思想: 只考虑短时间内能到达的速度,形成一个“动态窗口”。在这个窗口里采样,评估,选最优。
4.1 DWA算法核心:三步走
DWA的流程其实很清晰,我习惯把它拆成三步:
- 速度采样:根据当前速度、加速度限制、制动距离,生成一个速度空间。
- 轨迹预测:对每个采样速度,模拟未来一段时间的运动轨迹。
- 轨迹评价:用评价函数给每条轨迹打分,选分数最高的。
你想想看,这三步每步都有参数要调。调不好,机器人就像喝醉了酒。我在项目里见过最夸张的一次,DWA的采样时间设得太短,机器人每次刚起步就重新规划,结果在原地抖得像筛糠一样。
4.2 速度采样空间:到底能跑多快?
速度采样空间,就是机器人“理论上能选的所有速度”的集合。但实际中,我们得加几把锁:
- 运动学锁:速度不能超过机器人自身的最大限速(比如最大线速度0.5m/s,最大角速度1.0rad/s)。
- 动力学锁:加速度有限制,不能瞬间从0加速到最大速度。我一般设线加速度0.2m/s²,角加速度0.5rad/s²。
- 安全锁:必须能在撞到障碍物之前刹住车。这个靠制动距离来算。
这三把锁一加,剩下的速度组合就不多了。这就是“动态窗口”的由来——它随着机器人当前状态动态变化。
我的调参习惯: 先调最大速度,让机器人能跑起来。再调加速度,别太猛,否则轨迹预测会失真。最后调采样分辨率,线速度步长0.01m/s,角速度步长0.1rad/s,够用了。
4.3 轨迹评价函数:权重就是命根子
评价函数是DWA的灵魂。ROS里DWA的评价函数通常包含三项:
| 评价项 | 含义 | 权重参数 |
|---|---|---|
| 方位角代价 | 轨迹终点朝向与目标方向的偏差 | xy_goal_tolerance, yaw_goal_tolerance |
| 障碍物代价 | 轨迹与最近障碍物的距离 | max_vel_x, min_vel_x, 障碍物膨胀半径 |
| 速度代价 | 鼓励机器人跑得快一点 | max_trans_vel, max_rot_vel |
这三项的权重怎么配?嗯,这里要注意:
- 障碍物代价权重太高:机器人会离障碍物远远的,甚至绕大圈。我遇到过,机器人为了躲一个柱子,直接绕到隔壁房间去了。
- 方位角代价权重太高:机器人会死盯着目标方向,哪怕前面有墙也直直冲过去。说白了就是“一根筋”。
- 速度代价权重太高:机器人会猛跑,但容易刹不住车。
我曾经踩过的坑: 有一次我把障碍物代价权重设得特别低,想着让机器人贴边走路。结果它直接贴着墙走,但墙角有个凸起,机器人没检测到,哐当一声撞上了。后来我学乖了,障碍物代价权重至少是方位角代价的2倍。
4.4 权重调优实战:从玄学到科学
调权重这事儿,一开始确实像玄学。我后来总结了一套方法:
- 先固定障碍物代价:设为1.0,其他权重先设为0。让机器人只考虑避障,看看它能不能安全走起来。
- 加入方位角代价:从0.5开始调。如果机器人老是在原地转圈找方向,说明权重太高;如果它漫无目的乱走,说明权重太低。
- 最后加速度代价:从0.1开始。速度代价是锦上添花,别让它喧宾夺主。
我习惯用仿真环境先调一轮。在Gazebo里放几个障碍物,让机器人跑几圈,看轨迹平滑度。如果轨迹像锯齿一样,说明采样分辨率太低或者评价函数权重不对。
一个实用的经验值: 障碍物代价:方位角代价:速度代价 = 2.0:1.0:0.2。这个比例在大多数室内场景下都管用。当然,具体还得看你的机器人底盘和传感器。
4.5 其他关键参数
除了权重,DWA还有几个参数直接影响表现:
- sim_time:轨迹预测的时间长度。我一般设1.5~2.0秒。太短了机器人看不到远处的障碍物,太长了计算量太大。
- sim_granularity:轨迹模拟的步长。0.025米就够细了。
- vx_samples / vtheta_samples:速度采样数量。我一般线速度采6个,角速度采20个。多了没必要,少了路径太粗糙。
一个小技巧: 如果你发现机器人老是走“之”字形,试试把vtheta_samples调大一点,让角速度选择更丰富。同时把sim_time稍微加长,让轨迹预测更远一些。
4.6 知识体系总览
下面这张图,是我自己整理的DWA调参知识体系。你可以把它当成一张地图,调参时对照着看,不容易迷路。
调DWA参数,说白了就是平衡这三项代价。没有万能参数,只有适合你场景的参数。我建议你准备一个调参记录表,每次改了什么参数、机器人表现如何,都记下来。时间长了,你就会有感觉——哪个参数调大一点,机器人会往左偏;哪个参数调小一点,机器人会更激进。
好了,这一章的内容就到这里。记住,DWA调参没有捷径,多试、多记、多总结。你也能成为调参高手。
可可精品资料库