天天看點

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 

參考:白巧克力亦唯心的部落格。