1.Walk To算法
- 直接朝着目標走,直到到達目標點為止。
- 很多 RPG 游戲就采用了這種簡單的算法
- 最優性,但不完備
2.Bug算法
Bug算法就是為了應對一些簡單的障礙物而提出的,其說明如下:
沿着起始點與終點的連線M運動;
遇到障礙物,則繞着障礙物順(或逆)時針運動,直到回到連線M。
3. 蟻群算法
蟻群算法(Ant Colony Optimization)其實是一種優化算法,但完全可以直接用到路徑規划問題上。這種算法能夠得到既完備又最優的路徑,但由於收斂速度不快,並未得到太廣泛應用。
4. 人工勢場法
勢場對應着能量分布,最常見的勢場就是重力場了,我們在不同高度會擁有不同重力勢能。斜面上的球會自然沿着斜面往下滾。
受此現象的啟發,人們便想到人工勢場法,人工添加勢場函數,讓目標點處於谷底,距離目標點越遠的勢場越高,同時,為了避免發生碰撞,可以在障礙物四周添加排斥勢場(障礙物處勢能最大)。
人工勢場非常直觀,且對運算量要求不高,可以跟機器人的控制相結合。實驗室的師兄們曾在中型組足球機器人比賽中使用過這個方法。
當然,勢場法的一個問題就是沒辦法避開局部極小值問題,所以該方法是不完備的,同時也是非最優化的。
5. 圖搜索
另外有一大類算法則是先將運動規划問題轉換成圖(graph),之后利用各種圖搜索算法解決問題。這里簡單介紹一下圖搜索算法。
圖是圖論(Graph Theory)里的一個概念,它表示一類用若干離散節點(vertices、node、points)與連接節點的邊線(edges,lines,arcs)表示的拓撲結構。
對於在一個圖上尋找到一條最短路徑的問題,圖論中已經有很多方法了,其中在規划領域最著名的兩個分別是Dijkstra算法和A*算法。
6. 空間離散法
空間離散法就更簡單了,按照某一尺寸划分網格,包含障礙物的網格認為不可通過,這樣便得到一個網格圖,之后按照四連通或八連通的方法得到一個圖。
顯然如果網格尺寸太大的話,可能會造成連通路徑堵塞,因此該方法是分辨率完備(Resolution Complete)且最優的。
這個算法在即時戰略游戲里面用得非常多,雖然我不知道紅警是不是這樣實現的,但我知道開源紅警OpenRA(openra.net)是采用的空間離散+A*算法(github上有源碼)。
7. 隨機路圖法PRM
隨機路圖(Probabilistic Road Maps,PRM)就是在規划空間內隨機選取N個節點,之后連接各節點,並去除與障礙物接觸的連線,由此得到一個隨機路圖。
顯然,當采樣點太少,或者分布不合理時,PRM算法是不完備的,但是隨着采用點的增加,也可以達到完備。所以PRM是概率完備且不最優的。
除了上述方法外,還有很多其他構建搜索圖的方法,如Voronoi圖法、Cell Decomposition等。
8. 快速擴展隨機樹法RRT
除了基於圖搜索的方法,還有另外一大類基於樹狀結構的搜索算法,其中最著名的就是快速擴展隨機樹法(Randomly Exploring Randomized Trees,RRT)了。
RRT算法是從起始點開始向外拓展一個樹狀結構,而樹狀結構的拓展方向是通過在規划空間內隨機采點確定的。與PRM類似,該方法是概率完備且不最優的。
9. 拓展到機械臂(CSpace+多維)
機械臂與平面機器人的區別主要在兩個部分,一個是規划空間不同,另一個是機械臂往往具有更高的自由度。
-
構形空間C-Space
以上算法都將機器人看做一個點,要想對機械臂進行規划,我們就應該想辦法將機械臂用一個點來描述。於是,我們就要簡單說一下構形空間(Configuration Space,或C-Space)了。
構形空間,顧名思義就是與機器人構形相關的空間了。
對於平面移動機器人,由於它具有一定尺寸,所以也不能直接當做點來處理。直觀的看,如果我們把機器人當做一個點,就應該相應地將障礙物進行膨脹,這個膨脹處理的拓撲方法叫做閔科夫斯基和(Minkowski Sum)。
但是,機械臂的構形空間就沒辦法簡單地用閔科夫斯基和來處理了。我們知道,用廣義坐標(通常為各關節角度)可以將機械臂用一個點描述,如六自由度機器人可用六維向量空間的一個點(θ1,θ2,θ3,θ4, θ5, θ6)描述。
但是,相應的障礙物的描述就比較麻煩了,由於機械臂逆解存在多解和奇異等問題,所以從工作空間到構形空間的映射是非線性的,目前沒有很好的方法將工作空間的障礙物直接映射到構形空間。對此,一般做法是對構形空間離散化,對構形空間的每個網格判斷是否存在障礙物。
開源運動規划庫 (OMPL).
接上文,而OMPL (Open Motion Planning Library), 開源運動規划庫,就是一個運動規划的C++庫,其包含了很多運動規划領域的前沿算法。雖然OMPL里面提到了最優規划,但 總體來說OMPL還是一個采樣規划算法庫 。而采樣規划算法中,最出名的莫過於 Rapidly-exploring Random Trees ( RRT ) 和 Probabilistic Roadmap ( PRM )了, 當然,這兩個是比較老的,還有很多 其他 新算法。
具體基本教程參考這里:https://www.cnblogs.com/uestc-mm/p/15885485.html
Reference
- OMPL學習筆記:https://www.freesion.com/article/5887407630/
- OMPL參考:https://zhuanlan.zhihu.com/p/66047152
- OMPL Web網頁測試界面:http://omplapp.kavrakilab.org/
- OMPL官網:http://ompl.kavrakilab.org/
- OMPL安裝下載:https://www.guyuehome.com/6173
- 知乎參考:https://zhuanlan.zhihu.com/p/112684841