運動規劃(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的變體: - 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)。這不是試驗性的,但根據我們的經驗,在任何一類問題上,它似乎都沒有比其他規劃者好得多。
- RRT連接(RRTConnect)
- 擴展空間樹(EST)
這位規劃器大約是在RRT出版的同時出版的。在我們的經驗中,它對有一個好的距離度量不那麼敏感,這對於複雜的高維狀態空間來說是很難定義的。實際上,EST有三個版本:原版接近第一次出版,雙向版本,以及基於投影的版本。低維投影用於跟蹤如何探索狀態空間。大多數情況下,OMPL可以自動確定合理的投影。我們實施了一些規劃者,這些計劃不一定是EST的簡單變體,而是有着相同的擴展策略:- 單查詢雙向延遲碰撞檢查計劃器(SBL)
此計劃器本質上是帶有延遲狀態有效性檢查的雙向EST版本。 - 並行單查詢雙向延遲碰撞檢查計劃器(PSBL)
這個計劃器在SBL中並行地生長兩棵樹。 - 內-外單元探索的運動學規劃
KPIECA是一種基於樹的規劃器,它使用離散化(通常是多個層次)來指導(連續)狀態空間的探索。OMPL的實現是一個簡化的實現,使用一個級別的離散化:一個網格。網格被強加於投影狀態空間。在探索空間時,優先考慮到到目前爲止已經探索過的那部分網格的邊界。邊界被定義爲一組小於2的網格單元。n中的非對角線非空相鄰網格單元。n-維投影空間KPI有兩種變體:
- 單查詢雙向延遲碰撞檢查計劃器(SBL)
- 具有分辨率獨立密度估計的搜索樹
- 路徑定向細分樹
- 快速移動樹算法(fmt∗)
- 雙向快速行軍樹算法(bfmt∗)
- 快速探索隨機樹(RRT)
- 優化規劃器
近年來,提出了幾種基於抽樣的規劃算法,這些算法仍然提供了一些最優性保證。通常,最優解被假定爲最短路徑。在OMPL中,我們有一個更通用的表示狀態和路徑代價的框架,它允許您,例如,最大化路徑上的最小間隙,最小化機械工作,或一些用戶定義的任意優化準則,器使用這個一般的成本框架,但是要記住,收斂到最優性是無保證當對路徑長度以外的內容進行優化時。
OMPL如何選擇幾何規劃器
如果您使用ompl:geometric::SimpleSetup類(強烈推薦)來定義和解決您的運動規劃問題,然後OMPL將自動選擇適當的計劃器(除非您已經明確指定了)。如果狀態空間使用的是任何內置狀態空間,那麼它將使用LBKPI如果可以使用雙向規劃器,否則它將使用KPIECA。這些默認配置已經被證明在許多現實世界的運動規劃問題上一直工作得很好,這就是爲什麼這些規劃器是默認的選擇。如果狀態空間沒有默認配置,RRTConnect或正常RRT將被使用,這取決於是否可以使用雙向規劃器。
2. Control-based planners
如果所考慮的系統受到不同約束,則使用基於控制的計劃器。這些規劃者依靠狀態傳播而不是簡單的插值來產生運動。這些規劃器不需要轉向功能,但是如果用戶實現它,所有這些(KPIECA除外)都將使用它。下面的前兩個規劃算法是上面相應的Geometric planners的替代
- 快速探索隨機樹(RRT)
- 稀疏穩定RRT
SST是RRT的漸近最優增量版本. - 擴展空間樹(EST)
- 基於決策樹採樣的運動規劃算法(KPIECE)
- 路徑定向細分樹
基於控制的PDST版本實際上出現在幾何版本之前。考慮到基於控制的版本,實現幾何版本也很簡單。 - Syclop,一種使用較低層次的規劃器的元規劃器。
Syclop是一種元規劃器,它將在狀態空間分解的基礎上計算的高級與低級規劃算法相結合。低級別規劃器所取得的進展反饋給高級規劃器,後者利用這些信息更新。Syclop有兩個不同的版本: - 線性時序邏輯規劃器
LTLPlanner爲目標由線性時序邏輯(LTL)規範指定的運動規劃問題找到解決方案。
OMPL如何選擇基於控制的計劃器
如果您使用ompl::Control::SimpleSetup類來定義和解決您的運動規劃問題,然後OMPL將自動選擇適當的計劃器(除非您已經明確指定了)。如果狀態空間使用的是任何內置狀態空間,那麼它將使用KPIECA。這些默認配置已經被證明在許多現實世界的運動規劃問題上一直工作得很好,這就是爲什麼這些規劃器是默認的選擇。如果狀態空間沒有默認配置,RRT會被使用。
OMPL自定義運動規劃算法的方法
自從看了交大邱博的路徑規劃的一個視頻之後(如下其中之一的截圖),才知道這裏麪包含的方法有很多,才發現ROS是多麼的強大,幫我這種小碩鋪了一條康莊大道,很多東西直接拿來就用了。
當然對於大神來說,折騰總是在路上的,看了那麼多算法,雖然很多都不適用於機械臂這種高維空間的路徑規劃,但是還是免不了想試試看自己導入一些算法。一番搜索,發現雖然嘗試的人貌似很少,可還是有大神以及做了:
https://blog.csdn.net/sinat_23853639/article/details/87854461 ,https://blog.csdn.net/weixin_36965307/article/details/105312020前提就是不能以Binary的方式在ROS中安裝MoveIt!,而以source的方式來安裝,就可以將自己寫的運動算法(比如在OMPL中的算法基礎上進行修改)集成到MoveIt!中。先佔坑!!!