一、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/