# 动态窗口算法运动规划
2019-03-06 本文已影响2人
8416ac9040d9
动态窗口算法运动规划
image引自 http://adrianboeing.blogspot.com/2012/05/dynamic-window-algorithm-motion.html
动态窗口方法是一种基于速度的局部规划器,可计算达到目标所需的机器人的最佳无碰撞(“允许”)速度。它将笛卡尔目标(x,y)转换为移动机器人的速度(v,w)命令。
该算法有两个主要的步骤,计算有效的速度 搜索空间,并选择 最佳速度。搜索空间由一组能够产生安全的运动轨迹(即允许机器人在碰撞前停止)的速度构成,这些速度是机器人在其动态(“动态窗口”)的下一个时间片中可以实现的速度集。选择最佳速度以最大化机器人与障碍物的间隙,最大化速度并获得最接近目标的航向。
下面是DWA算法的伪代码:
BEGIN DWA(robotPose,robotGoal,robotModel)
desiredV = calculateV(robotPose,robotGoal)
laserscan = readScanner()
allowable_v = generateWindow(robotV, robotModel)
allowable_w = generateWindow(robotW, robotModel)
for each v in allowable_v
for each w in allowable_w
dist = find_dist(v,w,laserscan,robotModel)
breakDist = calculateBreakingDistance(v)
if (dist > breakDist) //can stop in time
heading = hDiff(robotPose,goalPose, v,w)
clearance = (dist-breakDist)/(dmax - breakDist)
cost = costFunction(heading,clearance, abs(desired_v - v))
if (cost > optimal)
best_v = v
best_w = w
optimal = cost
set robot trajectory to best_v, best_w
END
代码解释
- 首先,我们可以根据当前位置(robotPose)和目的地(robotGoal)计算到目标的所需速度。(例如,如果我们离得很远就走得快,如果我们离得很近就慢。)
- 给定小车底盘再运动学上允许的速度(v,w)那么当前速度的allowable_v的范围受到加速度的制约应该为[v-at, v+at],其中a为加速度,t为时间片。角速度w也同样适用。
- 搜索所有允许的速度(v, w)。
- 对每一个速度进行碰撞检测。
- 确定到最近障碍物的距离是否在机器人停止距离内。如果机器人无法及时停止,则忽略此建议的机器人速度。
- 否则,速度是“可接受的”,因此我们现在可以计算目标函数所需的值。在我们的例子中,机器人前进和清除。
- 计算建议速度的“cost”。如果cost优于其他任何目标,请将此设置为我们的最佳选择。
- 最后,将机器人所需的轨迹设置为最佳建议速度。
总结
通过这篇简短的伪代码,我们大致了解了ROS中常用的一种局部避障规划算法DWA,如果你觉得这篇文章帮助到了你,请分享给其他人,或者扫码关注公众号 : )。
参考链接
- Adrian Boeing: Blog http://adrianboeing.blogspot.com/2012/05/dynamic-window-algorithm-motion.html
- 白巧克力亦唯心 https://blog.csdn.net/heyijia0327/article/details/44983551
- Github ROS代码实现: https://github.com/ros-planning/navigation/blob/b52e0ea9362131dc81326da471792ab8698c9564/dwa_local_planner/src/dwa_planner.cpp#L293