運動規划之OMPL-I 基礎理論


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


免責聲明!

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



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