086、路径规划:动态窗口法(DWA)
从一次炸机事故说起
去年夏天,我在测试一款四旋翼的室内自主导航时,遇到了一个让人抓狂的问题。飞机明明已经规划好了全局路径,却在走廊拐角处一头撞上了墙壁。回传的日志显示,局部路径规划器一直在输出“无有效轨迹”的警告。当时我盯着屏幕上那个不断旋转的搜索窗口,突然意识到——动态窗口法(DWA)的采样空间出了问题。
那次事故让我花了整整一周时间重新审视DWA的每一个参数。今天这篇笔记,就是当时调试过程的复盘,希望能帮你少踩几个坑。
DWA到底在干什么
动态窗口法这个名字听起来玄乎,其实核心思想很简单:在速度空间里划出一个“当前可达”的窗口,然后在这个窗口里找一条最好的轨迹。
注意我用了“当前可达”这个词。这是DWA区别于其他规划方法的关键——它不关心你三秒后能飞多快,只关心接下来一个控制周期内,你的电机响应、加速度限制、刹车距离这些硬约束下,你能跑出什么花样来。
实际代码里,这个“窗口”通常由三组参数决定:
- 当前速度加上最大加速度限制,得到速度边界
- 当前角速度加上最大角加速度限制,得到角速度边界
- 电机响应延迟和刹车距离,得到安全边界
这三组参数的交叉区域,就是你的动态窗口。窗口之外的速度组合,要么你加速不到,要么你刹不住车。
采样空间:别把窗口开太大
我第一次写DWA时犯过一个低级错误——把采样窗口设得太大。当时觉得“多采样一些速度组合总能找到