ROS MoveBase與路徑規划


一、MoveBase框架

   上圖中move_base節點提供用於配置,運行和與交互的ROS界面。上面顯示了move_base節點及其與其他組件的交互的高級視圖。主要包含了global_panner與local_panner,分別用於總體路徑規划與局部路徑規划。

   預期的機器人行為:

  base_local_planner這個包通過地圖數據,通過算法搜索到達目標的多條路經,利用一些評價標准(是否會撞擊障礙物,所需要的時間等等)選取最優的路徑,並且計算所需要的實時速度和角度。
  其中,Trajectory Rollout 和Dynamic Window approaches算法的主要思路如下:
  (1) 采樣機器人當前的狀態(dx,dy,dtheta);
  (2) 針對每個采樣的速度,計算機器人以該速度行駛一段時間后的狀態,得出一條行駛的路線。
  (3) 利用一些評價標准為多條路線打分。
  (4) 根據打分,選擇最優路徑。
  (5) 重復上面過程。

二、全局規划器

  1. Dijkstra與A*對比

  1) Dijkstra算法計算源點到其他所有點的最短路徑長度,A*關注點到點的最短路徑(包括具體路徑)。

  2) Dijkstra算法建立在較為抽象的圖論層面,A*算法可以更輕松地用在諸如游戲地圖尋路中。

  3) Dijkstra算法的實質是廣度優先搜索,是一種發散式的搜索,所以空間復雜度和時間復雜度都比較高。對路徑上的當前點,A*算法不但記錄其到源點的代價,還計算當前點到目標點的期望代價,是一種啟發式算法,也可以認為是一種深度優先的算法。

  4) 由第一點,當目標點很多時,A*算法會帶入大量重復數據和復雜的估價函數,所以如果不要求獲得具體路徑而只比較路徑長度時,Dijkstra算法會成為更好的選擇。

  2. Dijkstra

     Dijkstra 算法是典型最短路算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。Dijkstra算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。
計算過程:
創建兩個表,OPEN, CLOSE。 OPEN表保存所有已生成而未考察的節點,CLOSED表中記錄已訪問過的節點。
1. 訪問路網中離起始點最近且沒有被檢查過的點,把這個點放入OPEN表中等待檢查。 2. 從OPEN表中找出距起始點最近的點,找出這個點的所有子節點,把這個點放到CLOSE表中。 3. 遍歷考察這個點的子節點。求出這些子節點距起始點的距離值,放子節點到OPEN表中。 4. 重復2,3,步。直到OPEN表為空,或找到目標點。

 

  3. A Star

  A*(A-Star)算法是一種靜態路網中求解最短路最有效的方法。

  公式表示為:        f(n)=g(n)+h(n), 
  其中f(n) 是節點n從初始點到目標點的估價函數,
  g(n) 是在狀態空間中從初始節點到n節點的實際代價,即起始節點到當前節點的實際代價.
  h(n)是從n到目標節點最佳路徑的估計代價。即當前節點到目標節點的估計代價.

       g(n):對g*(n)的一個估計,是當前的搜索圖G中s到n的最優路徑費用 g(n)≥g*(n)

  h(n):對h*(n)的估計,是從n到目標節點的估計代價,稱為啟發函數。

  例如:當h(n) = 0, g(n) = d, 則f(n) = g(n)就變為了寬度優先搜索,也就是如果不需要啟發,那就是寬度優先搜索的算法了。

 

  保證找到最短路徑(最優解的)條件,關鍵在於估價函數h(n)的選取:
  估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜索的點數多,搜索范圍大,效率低。但能得到最優解。
  如果 估價值>實際值, 搜索的點數少,搜索范圍小,效率高,但不能保證得到最優解。
  估價值與實際值越接近,估價函數取得就越好。
  例如對於幾何路網來說,可以取兩節點間歐幾理德距離(直線距離)做為估價值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));

  這樣估價函數f在g值一定的情況下,會或多或少的受估價值h的制約,節點距目標點近,h值小,f值相對就小,能保證最短路的搜索向終點的方向進行。明顯優於Dijstra算法的毫無方向。

#計算過程
創建兩個表,OPEN表保存所有已生成而未考察的節點,CLOSED表中記錄已訪問過的節點。
遍歷當前節點的各個節點,將n節點放入CLOSE中,取n節點的子節點X,->算X的估價值->

 

  4. DWA與TEB

  DWA和TEB的總體思想都是預測/規划機器人沿給定視界的運動,同時最小化給定目標函數,同時遵守機器人的動力約束。

  只命令機器人執行第一個控制動作后,重復整個預測/優化過程。這一原理在控制理論中被稱為退地平線控制或模型預測控制。但由於計算最優解的計算量較大,因此兩種方法的近似最優解的方式不同,實際的優化策略也不同。

  動態窗口法(DWA)

  DWA執行基於樣本的優化。它在可行速度空間(通常是平移/角速度對)中采樣一個控制動作,並為這些特定的采樣動作推出軌跡。鋪展是指基於機器人運動模型,根據指定的水平長度對軌跡進行模擬。

  一個重要的細節是:整個預測階段行動是保持不變的因此它不能預測運動逆轉等。在對所有樣本進行預測之后,根據指定的成本函數和約束條件(包括到全局路徑的距離、平滑度、障礙清除度等)選擇最佳候選樣本。

  因此,DWA包括兩個簡化,以保持低的計算時間,同時達到一定數量的控制性能。不詳細討論由於固有次最優性而產生的穩定性和遞歸可行性,但是這種方法對於差分驅動和全向機器人非常有效。

  一個好處是,成本函數可以是非光滑的,因此它非常適合基於網格的評估。例如,軌跡可以柵格化到成本圖中,以評估成本(考慮到致命網格單元和膨脹成本)。

  此外,DWA不會陷入基於初始化的局部極小值(當然,機器人仍然會因為有限的視界長度和較少的控制自由度而陷入困境)。由於DWA假定在預測范圍內的控制行為是恆定的,因此類車機器人的控制是相當有限的。

  有一些基本的擴展將速度搜索空間限制為與汽車類似的兼容動作。但運動逆轉仍然沒有優化,因此在有限的空間停車、機動是棘手的。注意,當然,運動逆轉可以在閉環控制期間進行,但它們不是開環解決方案/預測的一部分。

  總結:

  不需要運動反轉的次優解(控制動作在預測范圍內保持不變)

  非常適合於擴散驅動/全向機器人,但不適合類車機器人

  支持非平滑成本函數

  Timed-Elastic-Band (TEB)

  TEB主要嘗試尋找時間最優的解決方案,但是您也可以為全局參考路徑保真度配置它。該方法根據時間離散軌跡,並采用連續的數值優化方案因此,根據離散化分辨率,沿預測水平的自由度可以非常高,並支持運動逆轉。

  將約束優化問題轉化為無約束優化問題,縮短了計算時間。這也意味着在任何情況下約束(例如避障、速度界限等)都不能得到保證,所以建議檢查機器人的基本驅動程序或專用節點的緊急情況。

  此外,優化器只找到局部解決方案,例如,如果軌跡初始化在一個障礙的左側,它將保持在那里。teb_local_planner能夠同時優化不同拓撲中的多個軌跡(比如左右),從而找到解決方案。由於該方法依賴於連續優化,成本函數必須是平滑的它不能處理網格和成本圖的功能評估。

  目前,每個致命的障礙單元都被認為是點形狀的障礙,它限制了小/中等規模的本地成本圖大小(和相當粗的成本圖分辨率)的方法。計划器還可以處理多邊形形狀的障礙(參見costmap_converter包將costmap轉換為更原始的障礙,但它仍處於實驗階段)。

  然而,給定一定的計算能力和一個溫和的問題大小,planner實現了更好的控制器性能,解決了更多的場景,還支持類車機器人的運動。

  在teb_local_planner的最新版本中,引入了對動態障礙的支持。其性能在很大程度上取決於障礙物跟蹤和狀態估計的精度。然而,成本圖轉換包嘗試從本地成本圖跟蹤動態障礙(實驗)。

  所規划的軌跡更接近實際的最優解,但約束僅作為懲罰執行。

       總結:

  適合所有類型的機器人

  在多種拓撲中規划多個候選軌跡

  動態障礙物支持(實驗)

  大的計算負擔

參考博客:

https://www.guyuehome.com/270

http://wiki.ros.org/move_base/

https://blog.csdn.net/hopeping128/article/details/78960326

https://zhuanlan.zhihu.com/p/104051892?utm_medium=social

https://www.cnblogs.com/guxuanqing/p/9610780.html

https://answers.ros.org/question/274564/difference-between-dwa-local_planner-and-teb-local_planner/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM