規劃器之base_local_planner算法彙總

global_planner:

A*、Dijstra、prm、人工勢場、單元分解、快速搜索樹(RRT)等

local_planner:

base_local_planner、dwa_local_planner、teb_local_planner、eband_local_planner、asr_ftc_local_planner、dwb_local_planner

---------------------------------------------------------------------------------------------------------------------------------------

1.base_local_planner(或者TrajectoryPlannerROS)

base_local_planner::TrajectoryPlannerROS對象是base_local_planner::TrajectoryPlanner對象的ROS封裝,在初始化時指定的ROS命名空間使用,繼承了nav_core::BaseLocalPlanner接口。它是move_base默認的局部規劃包。該軟件包提供了對平面上本地機器人導航的軌跡展開和動態窗口方法的實現。根據計劃遵循和成本圖,控制器生成速度命令以發送到移動基站。該軟件包支持完整和非完整機器人,可以表示爲凸多邊形或圓形的任何機器人足跡,並將其配置公開爲可在啓動文件中設置的ROS參數。此包的ROS包裝器遵循nav_core包中指定的BaseLocalPlanner接口。與dwa_local_planner思路接近。

唯一區別是DWA與“TrajectoryPlanner”的不同之處在於如何對機器人的控制空間進行採樣。在給定機器人的加速度極限的情況下,TrajectoryPlanner在整個前向模擬週期內從可實現的速度集合中進行採樣,而DWA在給定機器人的加速度極限的情況下僅針對一個模擬步驟從可實現的速度集合中進行採樣。在實踐中,我們發現DWA和軌跡展示在我們的所有測試中都具有相同的性能,並建議使用DWA來提高效率,因爲其樣本空間更少。

2.dwa_local_planner

dwa_local_planner::DWAPlannerROS對象是dwa_local_planner::DWAPlanner對象的ROS封裝,在初始化時指定的ROS命名空間使用,繼承了nav_core::BaseLocalPlanner接口。

dwa_local_planner包提供了一個控制器,用於驅動在所述平面上的移動基座。該控制器用於將路徑規劃器連接到機器人。使用地圖,規劃器爲機器人創建從一個起點到目標位置的運動軌跡。在此過程中,計劃員至少在機器人周圍創建一個值函數,表示爲網格圖。該值函數編碼遍歷網格單元的成本。控制器的工作是使用此值函數來確定要發送給機器人的dx,dy,dtheta速度。

動態窗口方法(DWA)算法的基本思想如下:

在機器人的控制空間(dx,dy,dtheta)中進行離散採樣

對於每個採樣速度,從機器人的當前狀態執行正向模擬,以預測如果採樣速度在某個(短)時間段內應用會發生什麼。

評估(得分)由前向模擬產生的每個軌跡,使用包含以下特徵的度量:接近障礙物,接近目標,接近全局路徑和速度。丟棄非法軌跡(與障礙物碰撞的軌跡)。

選擇得分最高的軌跡並將相關的速度發送到移動底盤。

沖洗並重復。

 

3.teb_local_planner(本質是插件)

teb_local_planner則是2D導航堆棧的base_local_planner的插件。實現了一個在線優化的本地軌跡規劃器,用於導航和控制移動機器人,作爲ROS 導航包的插件。全局規劃器生成的初始軌跡在運行時期間進行優化,最小化軌跡執行時間(時間最優目標), 與障礙物分離並符合動力學約束,例如滿足最大速度和加速度。當前的實施符合非完整機器人(差動驅動和類似汽車的機器人)的運動學。自Kinetic以來,包括對完整機器人的支持。

通過求解稀疏的標量化多目標優化問題,可以有效地獲得最優軌跡。用戶可以爲優化問題提供權重,以便在目標衝突的情況下指定行爲。

 

4.eband_local_planner(本質是插件)

 eband_local_planner實現了base_local_planner的插件。它在SE2流形上實現了彈性帶方法。

      此ROS move_base本地規劃器的原始實現僅支持全向(完整)機器人

      修改了當前版本以與差分驅動器一起使用。將differential_drive設置爲false以啓用橫向/完整運動,但該模式已經過很長時間的測試,應該被認爲是實驗性的。

     在到達目標位置和目標之前計算速度時,差動驅動機器人可以處於三種動作之一:

    1:機器人在目標位置的橫向公差(xy_goal_tolerance)內,並且在適當位置旋轉以達到目標方向。

    2:機器人在目標位置的橫向公差之外,則必須朝向目標移動。給定機器人的方向以及彈性帶中下一個點的方向,機器人首先計算這兩個位置之間的差異。如果該差值小於參數rotation_threshold_multiplier,則機器人執行線性和角速度分量以朝向頻帶中的下一個點弧。一旦機器人靠近目標位置,使得到目標的x和y距離小於0.6 * xy_goal_tolerance,然後進入步驟1.這裏選擇0.6,因爲機器人在開始之前接近目標而不是公差要求最後一個轉彎,因爲最後一個轉彎可能會導致機器人稍微偏離位置。

     3:如果在前一步驟中計算的差值大於參數rotation_threshold_multiplier,則機器人就位,直到差值變小,並且機器人可以執行動作2。

 

5.asr_ftc_local_planner

該軟件包提供了 "Follow the Carrot算法的實現,以便在平面上進行本地機器人導航。根據全局規劃器和成本圖,局部規劃生成速度命令以發送到移動平臺。此規劃器的參數也可動態重新配置。此包實現本地計劃程序的asr_nav_core接口(而不是nav_core)。爲此,必須調整標準的move_base和nav_core(查看kapitel 3.1 Needed Packages)。

“追隨胡蘿蔔”刨牀試圖儘可能準確地遵循全球計劃。根據全球計劃,它計算速度命令以達到該計劃中的某個點。因爲它使用全球計劃來繞過計劃需要不斷更新的障礙。

相位分解,在設定新目標後,規劃器將其分解爲三個相位:

1.當場旋轉到全局規劃方向。

2.駛向目標。

3.當場旋轉到目標方向。

優點

  • 快速駕駛:機器人儘可能快地達到最大速度。
  • 參數很少:只能設置11個參數。
  • 幾個混蛋:機器人試圖以最大速度不斷開車。
  • 對於小房間:機器人密切關注全局計劃,沒有循環(如dwa_local_planner)。因此它可以在小房間內無碰撞地行駛。
  • 通過全球計劃驅動障礙:保證找到解決障礙的方法。
  • 處理時間短

限制

  • 僅適用於圓形機器人。
  • 只有差動驅動機器人。
  • 僅向前驅動(而不是向後)。

 

6.dwb_local_planner

     這個本地規劃器實現重寫並擴展了dwa_local_planner它的功能,因此它在邏輯上被稱爲dwb_local_planner。目標是通過pluginlib或直接擴展實現類,使儘可能多的部分功能可自定義。

    當地規劃人員的目標是採用全球計劃和本地成本圖,併產生命令速度,這可能會使機器人移動到目標。dwa和dwb都通過採樣來做到這一點,即生成合理的速度命令並在各種度量上評估它們並選擇具有最佳得分的命令,直到機器人達到其目標。

    評估的形式至關重要。假設我們正在評估給定的命令,看它是否與costmap中的任何障礙物發生碰撞。關鍵問題是機器人將使用命令驅動的位置。爲此,您需要知道機器人的位置和速度,此外還需要考慮機器人的運動學。爲此,我們不是單獨評估速度,而是評估不僅包含速度的軌跡,而且包含一些我們預期機器人可以驅動的樣本姿勢的數組。

    導航堆棧僅能夠在2.5尺寸導航(即X,Y和θ),因此大多數的接口處理的geometry_msgs/Pose2D和nav_2d_msgs/Twist2D,而不是更普通的Pose和Twist。

 

參考文獻:

1.base_local_planner(或者TrajectoryPlannerROS)

2.dwa_local_planner

3.teb_local_planner

4.eband_local_planner

5.asr_ftc_local_planner

6.dwb_local_planner

7.路徑規劃算法 總結

8.local_planner比較 學習筆記(一)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章