天天看點

規劃器之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來提高效率,因為其樣本空間更少。

規劃器之base_local_planner算法彙總

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.當場旋轉到目标方向。

規劃器之base_local_planner算法彙總

優點

  • 快速駕駛:機器人盡可能快地達到最大速度。
  • 參數很少:隻能設定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比較 學習筆記(一)