MoveIt!運動規劃庫OMPL和路徑規劃算法

運動規劃(Motion Planning):要讓一個機器人實現運動規劃,需要先將機器人抽象到構形空間(C-Space)。MoveIt就可以幫大家把這些工作給做了,只需提供機器人URDF模型,就可以調用幾大運動規劃庫的規劃算法(如OMPL,SBPL,CHMOP),自動生成機器人運動軌跡。之前跟着教程走的時候,很多內部結構不是很清晰,它就像是一個黑匣子,只管啓動launch,就會返回機器人所需的運動路徑,置於它使用的到底是什麼運動規劃庫,什麼路徑規劃算法,這些細節都沒有關注過。

運動規劃器 (motion planner):MoveIt! 通過插件機制(plugin interface)與運動規劃器(motion planner)進行交互,可以使用多個庫的不同運動規劃器,使得 MoveIt! 擴展性更強!默認使用的運動規劃器是 OMPL(Open Motion Planning Library) 庫。如下圖所示,Planning Pipeline提供了很多規劃器的接口,通過導入planning scene 導入octomap作爲機器人環境信息https://blog.csdn.net/qq_34935373/article/details/104794634,然後通過路徑規劃算法,完成避障的路徑規劃。

路徑規劃算法:先放上官方鏈接,方便查看 http://ompl.kavrakilab.org/planners.html

OMPL是基於採樣方法的運動規劃庫,其規劃算法可以分爲兩類:

  • Geometric planners
  • Control-based planners

特性:基於採樣,概率完備,非最優/漸進最優

1. Geometric planners

  • 多查詢規劃器
    這些規劃器構建了一個可用於多個查詢的整個環境的路線圖。
    • 概率路線圖法
      這是基於採樣的算法。使用一個線程來構造路線圖,而另一個線程則檢查路徑是否存在於起始狀態和目標狀態之間的路線圖中。OMPL包含一些PRM的變體:
      • LazyPRM
        這個規劃器類似於常規的PRM,但是“懶惰地”檢查頂點或邊的有效性,也就是說,只有當它是候選解決方案路徑的一部分時。
      • PRM*
        當常規PRM嘗試將狀態連接到一個固定數量的鄰居時,PRM*隨着路線圖的增長而逐漸增加連接嘗試的次數,從而提供對最優路徑的收斂性。
      • LazyPRM*
        帶有延遲狀態有效性檢查的PRM*版本。
    • SPArse Roadmap Spanner algorithm (SPARS)
      SPS是一個提供漸進性的計劃器。-最優性(在最優解的常數範圍內的解),幷包含有意義的停止準則。雖然它不能保證最優性,其收斂速度往往遠高於PRM*。
    • SPARS 2
      SPARS 2是SPS算法的變體,它通過類似的機制工作,但使用不同的方法來識別接口和通過所述接口計算最短路徑。
  • 單查詢規劃師
    這些規劃器通常會生長一棵由有效運動連接的狀態樹。這些規劃器在他們用來控制的啓發法上有所不同。
    • 快速探索隨機樹(RRT)
      該算法易於理解,易於實現。已提出了許多、許多不同的RRT方案。OMPL包含幾個RRT變體:
      • RRT連接(RRTConnect)
        此計劃器是RRT的雙向版本(即它生長了兩棵樹)。它通常優於原RRT算法。
      • RRT*
        RRT的一個漸近最優版本:該算法作爲時間函數收斂於最優路徑上。這是第一個可證明的漸近計劃者(與PRM一起)。自從RRT*發佈以來,出現了幾種提高RRT*收斂速度的算法,例如RRT#和RRTX。
      • 下界樹RRT(LBTRRT)
        LBTRRT是RRT的一個漸近接近最優的版本:它保證收斂到一個在最優解的常數因子內的解。
      • 稀疏穩定RRT
        SST是RRT的漸近最優增量版本.
      • 基於過渡的RRT(T-RRT)
        T-RRT沒有提供任何硬的最優性保證,而是試圖找到簡短、低成本的路徑.
      • 矢量場RRT
        VF-RRT是一種基於樹的運動規劃器,它試圖最小化路徑的所謂上游成本。上游成本由用戶定義的向量場上的積分定義.
      • 平行RRT(PRRT)
        針對基於抽樣的規劃者,包括RRT,提出了許多不同的並行化方案.在此實現中,多個線程同時將狀態添加到同一棵樹中。一旦找到解決方案,所有線程都會終止。
      • 懶惰RRT(LazyRRT)
        此計劃器執行延遲狀態有效性檢查(類似於LazyPRM)。這不是試驗性的,但根據我們的經驗,在任何一類問題上,它似乎都沒有比其他規劃者好得多。
    • 擴展空間樹(EST)
      這位規劃器大約是在RRT出版的同時出版的。在我們的經驗中,它對有一個好的距離度量不那麼敏感,這對於複雜的高維狀態空間來說是很難定義的。實際上,EST有三個版本:原版接近第一次出版,雙向版本,以及基於投影的版本。低維投影用於跟蹤如何探索狀態空間。大多數情況下,OMPL可以自動確定合理的投影。我們實施了一些規劃者,這些計劃不一定是EST的簡單變體,而是有着相同的擴展策略:
    • 具有分辨率獨立密度估計的搜索樹
    • 路徑定向細分樹
    • 快速移動樹算法(fmt∗)
    • 雙向快速行軍樹算法(bfmt∗)
  • 優化規劃器
    近年來,提出了幾種基於抽樣的規劃算法,這些算法仍然提供了一些最優性保證。通常,最優解被假定爲最短路徑。在OMPL中,我們有一個更通用的表示狀態和路徑代價的框架,它允許您,例如,最大化路徑上的最小間隙,最小化機械工作,或一些用戶定義的任意優化準則,器使用這個一般的成本框架,但是要記住,收斂到最優性是無保證當對路徑長度以外的內容進行優化時。

OMPL如何選擇幾何規劃器
如果您使用ompl:geometric::SimpleSetup類(強烈推薦)來定義和解決您的運動規劃問題,然後OMPL將自動選擇適當的計劃器(除非您已經明確指定了)。如果狀態空間使用的是任何內置狀態空間,那麼它將使用LBKPI如果可以使用雙向規劃器,否則它將使用KPIECA。這些默認配置已經被證明在許多現實世界的運動規劃問題上一直工作得很好,這就是爲什麼這些規劃器是默認的選擇。如果狀態空間沒有默認配置,RRTConnect或正常RRT將被使用,這取決於是否可以使用雙向規劃器。

2. Control-based planners

如果所考慮的系統受到不同約束,則使用基於控制的計劃器。這些規劃者依靠狀態傳播而不是簡單的插值來產生運動。這些規劃器不需要轉向功能,但是如果用戶實現它,所有這些(KPIECA除外)都將使用它。下面的前兩個規劃算法是上面相應的Geometric planners的替代

OMPL如何選擇基於控制的計劃器

如果您使用ompl::Control::SimpleSetup類來定義和解決您的運動規劃問題,然後OMPL將自動選擇適當的計劃器(除非您已經明確指定了)。如果狀態空間使用的是任何內置狀態空間,那麼它將使用KPIECA。這些默認配置已經被證明在許多現實世界的運動規劃問題上一直工作得很好,這就是爲什麼這些規劃器是默認的選擇。如果狀態空間沒有默認配置,RRT會被使用。

 

OMPL自定義運動規劃算法的方法

自從看了交大邱博的路徑規劃的一個視頻之後(如下其中之一的截圖),才知道這裏麪包含的方法有很多,才發現ROS是多麼的強大,幫我這種小碩鋪了一條康莊大道,很多東西直接拿來就用了。

 

當然對於大神來說,折騰總是在路上的,看了那麼多算法,雖然很多都不適用於機械臂這種高維空間的路徑規劃,但是還是免不了想試試看自己導入一些算法。一番搜索,發現雖然嘗試的人貌似很少,可還是有大神以及做了:

https://blog.csdn.net/sinat_23853639/article/details/87854461https://blog.csdn.net/weixin_36965307/article/details/105312020前提就是不能以Binary的方式在ROS中安裝MoveIt!,而以source的方式來安裝,就可以將自己寫的運動算法(比如在OMPL中的算法基礎上進行修改)集成到MoveIt!中。先佔坑!!!

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章