020-88888686

bat365DWA动态窗口法的原理及应用:The Dynamic Window Approach to Collision Avoidance2024-03-23 07:11:26

  bat365DWA动态窗口法的原理及应用:The Dynamic Window Approach to Collision Avoidance的整理解析,也是从DWA动态窗口法的原理及应用_gophae的博客-CSDN博客_动态窗口法搬过来的,之所以记录这篇文章,是因为我们在分析State space sampling of feasible motions for high-performance mobile robot navigation in complex environments的时候,会谈到状态采样以及动作采样,动作采样的一个十分经典的方法就是动态窗口法(DWA),所以这里强调一下,让感兴趣的同学进一步了解,在使用DWA中一个很重要的问题是这个方法容易落到局部最优,所以有一个比较经典的方法叫navigationfunction, 这个东西类似于建立地图的势场(potential field)来指引搜索方向,但是通常我们如果要用DWA不容易提前获得势场,也就不容易让他避免落入局部最优,现在使用DWA的场景已经越来越少了bat365。

  DWA的核心在于所谓的动态窗口,这个东西在sampling based method 中就是sampling. 对于sampling可以是去sample state,也可以sample action. 百度的lattice planner其实就是在sample state, 把未来的轨迹candidate一个个sample出来做cost minimization. 而state lattice method其实是在sample action, 对于机器人来说就是sample 不同的角度速度和直线速度,预测出未来轨迹,然后做cost function minimization. 但是这两者区别是,虽然最后都变成了轨迹,但上一个方法时直接生成轨迹,而第二种方案是用动作生成轨迹,所以第二种方法的控制器输出会是直接角速度和直线加速度,而对于第一个方法先生成轨迹的,控制器要做的工作是轨迹跟踪bat365。 DWA这个方案就是第二种方法中的典型。

  动态窗口就是在当前的状态下,在本状态周围进行采样,获得下一时刻的合理的动作变化,这个动作仅包括角速度和线速度。在这个方法中,我们把轨迹认为是一系列不同动作组合而产生的在delta_t内生成的轨迹。我们要做的就是设定一个评价标准,选出我们认为的最合理的动作(也就意味着最合理的轨迹)。

  那么什么是合理的速度?有三个限制。第一:按这个速度行驶,最大减速度停车都不能撞到最近的障碍物:、

  第二个:加速度限制,当前状态下,加减速变化都是有上下限的,因此下一时刻的状态也是有上下限的:

  最后:任何情况下都要遵守车辆本身的动力学限制bat365,意思就是不管怎么变化,角速度和线速度是有上下限标准的。就如图下面框出来的Vs区域。

  1,希望我的前进方向对准终点2,希望不发生任何碰撞3,希望速度尽量快除此之外,还要加上一个:4,保证上文提到的最短刹车距离是安全的。原文还特地解释了说第一个因素是效率问题,如果太大可能就落到局部最优解了,如果太小,虽然可以让你更好的在障碍物之间游走,但是可能效率有点低。

  这里,我们介绍的时候还是按照最简单的来做,代码实现也仅包含上述的三项基础部分。具体的计算一看代码就知道了:

  对于这几个单位不同的因素,我们必须进行正则化,把这些量变成无量纲量(百分比),这样才会让比较变得有意义:

  在这种情况下,我们需要穿过door, 但如果当前速度过高,最后的最优轨迹将会是向前方直行,而不是右转,因为角速度最高限制的原因,无法规划出一条右转通过door的曲线。由下图的expectation function 就可直观看出:

  所以,为了应对这种情况,比较好的一种办法就是修正最高的速度限制,保证在这附近机器人速度不会太高。

  由于小加速度,导致我们右转的行为expectation不高,结果车子也不会向右转。而是选择expectation更高的直行行为。

  最后贴出我修改过的matlab 代码,代码网上都能找到,是开源代码,我尝试修改了参数进行对比以及增加了些许注释,我在某个实际项目中尝试过DWA,这个方法很依赖tuning, 由于场景可变,不同情况下参数对最终的效果有显著影响,所以后面我们也没再继续使用这个方法了: