天天看点

2016年7月28日学习笔记(DWA)

DWA算法分析

DWA Local Planner这部分是属于Local planner,在Navigation中有两个包:

dwa_local_planner

base_local_planner

查看了

dwa_local_planner

,发现其实际是调用的

base_local_planner

中的函数,而

base_local_planner

中包含了两种planner :

DWA

或者

Trajectory Rollout approach

。所以结论就是,只需要搞清楚

base_local_planner

的执行就OK。

base_local_planner

package 实际是继承于

BaseLocalPlanner

DWA算法实现分为四个部分

1.运动模型的建立

2.速度采样

3.评价函数

具体步骤如下

1.首先建立机器人的运动模型,退到出运动模型的航迹推演公式。

2.运动模型建立完毕后,接下来要进行速度采样。

采样速度的重点是要将机器人的速度限制在一定的范围内(v,w)

dist(vw)为机器人里障碍物最近的距离(并不是一开始就可以得到的,而是根据机器人遇到障碍物时这组速度可不可以停下来,如果可以停下来,那么这组数据就是可以接受的。如果停不下来,那就接受不了)

3.评价函数:

heading(v ,w)达到模拟轨迹末端时的朝向和目标之间的角度差距。dist(v,w)表示当前轨迹上和障碍物的差距。velocity(v w)用来评价当前轨迹速度的大小。

三个部分在归一化后进行相加。

demo:

  1. EGIN DWA(robotPose,robotGoal,robotModel)  
  2.    laserscan = readScanner()  
  3.    allowable_v = generateWindow(robotV, robotModel)  
  4.    allowable_w  = generateWindow(robotW, robotModel)  
  5.    for each v in allowable_v  
  6.       for each w in allowable_w  
  7.       dist = find_dist(v,w,laserscan,robotModel)  
  8.       breakDist = calculateBreakingDistance(v)  
  9.       if (dist > breakDist)  //can stop in time  
  10.          heading = hDiff(robotPose,goalPose, v,w)   
  11.           //clearance与原论文稍不一样  
  12.          clearance = (dist-breakDist)/(dmax - breakDist)   
  13.          cost = costFunction(heading,clearance, abs(desired_v - v))  
  14.          if (cost > optimal)  
  15.             best_v = v  
  16.             best_w = w  
  17.             optimal = cost  
  18.     set robot trajectory to best_v, best_w  
  19. END 

参考:白巧克力亦唯心的博客。