简要介绍动态窗口算法,具体不加个人评价和理解。可看原文
1. 定义
dynamic window approach算法的定义,根据wiki的定义:
在机器人运动规划领域,动态窗方法为三位大佬Dieter Fox, Wolfram Burgard, and Sebastian Thrun 于1997发表的论文,被引用高达2800次。应用于实时碰撞避免策略,和其余碰撞避免算法不同,动态窗口直接考虑到机器人的动力学,特别是设计来用于受到速度和加速度约束的机器人。
其主要包含两部分:首先是生成一个有效的搜索区域,其次在搜索区域中选择一个最优解。其论文中讲到,搜索空间限制在短时间内可到达且无碰撞的安全圆周轨迹。优化目标是选择一个方向和速度,使机器人以最大的距离远离障碍物且能到达目标位置。
2. 伪代码
DWA的主要创新点是使用(v,w)(速度,角速度)空间来表示车辆在平面内的运动;
论文优化目标如下:
伪码如下:
//http://adrianboeing.blogspot.com/2012/05/dynamic-window-algorithm-motion.html
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) //计算朝向cost(注意要归一化)
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