【組件】ompl-open motion planning library1-基礎理論
前言
- open motion plan library,一個開源的運動規劃庫,主要以sample-based planning算法爲主
- 包括兩個核心組件,OMPL,算法庫,和OMPL.app,前端用戶界面
目錄
TOC
參考
ompl home page
demos
tutorials
做品展現
intergrated with your build system
Planning algorithms.pdfhtml
安裝
- 若是使用ompl.app的話,建議ompl也進行源安裝。並開啓python binding
sudo apt-get remove libompl7 libompl-dev
cd ./build/Release
cmake ../..
make update_bindings -j4
make -j4
sudo make install
sudo apt-get install libompl-dev ompl-demos
運行demo
cmake_minimum_required(VERSION 2.8.3)
project(ompl_beginner)
SET(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
# find packages
find_package(OMPL)
# include dirs
include_directories(
${OMPL_INCLUDE_DIRS} )
add_executable(RigidBodyPlanning src/RigidBodyPlanning.cpp)
target_link_libraries(RigidBodyPlanning ${OMPL_LIBRARIES} )
基礎知識
緒論
- ompl包括sample-based 運動規劃器,以及構建新規劃器的工具集合,用戶還可使用前段工具ompl.app。
- 熟練使用後,用戶可以使用這個框架開發本身的規劃算法功能,如sate sampling, collision, nearest neighbor searching.
Sampling-based Motion Planning
- 機器人運動規劃的目的在於:「從起點位姿到終點位姿,而且知足全部外部和內部約束」,當機器人擁有較多的自由度時,解算將變得很困難。
- 以經典的運動規劃問題移動鋼琴爲例,在這個問題中,鋼琴有六個自由度(x, y, z, roll, pitch, yaw),爲了解算這個問題,咱們必須計算出一個包含鋼琴六個參數的數據集合,該數據集合被時間參數化,而且各個參數對於時間的改變應該是連續的。(從一個配置空間(starting configuration)移動到另外一個配置空間(goal configuration),同時要知足避障的內,外部約束條件),這個問題已經被證實是一個PSPACE-hard 問題,解算很是困難。
規劃理論的歷史進程
- 精確的和近似的地圖單元分解(graph-search)(表明:A*算法)
在某些例子中,能夠將機器人的工做空間根據有無障礙分解成離散的柵格,這些分解能夠建模爲一個圖(roadmap or graph)。根據這個圖,問題變成:將一個點(機器人抽象而來)從一個柵格(包含起點)移動到另一個柵格(包含終點)。這種規劃的問題在於,當機器人擁有非線性動力學特性時(機器人不知道如何從一個柵格移動到另外一個柵格,好比汽車,先鋒機器人因爲能夠原地旋轉,則不存在這個問題),路徑規劃是失敗的。並且,更多的時候,狀態空間是多維的,尤爲是機器人運動內部有約束時,好比汽車(汽車有不少彎就拐不過去)。再次,狀態空間分解空間複雜度很是大。
- 基於控制的方法(控制的典型特徵是反饋環節feedback loop)
基於控制的方法嘗試對系統進行建模,使用控制理論讓系統沿着具體軌跡移動。這種方法在連續空間工做,而且擁有反饋環。基於控制的方法的優勢是很是快速,能夠在線規劃。缺點是在複雜環境下不可以很好地計算指望的可行解。(關節空間規劃,笛卡爾空間規劃,直線插補,圓弧插補,樣條曲線插補)
- 人工勢場法
典型的人工勢場法在工做空間的每一個點計算一個函數,計算出的值做爲這一點的斥力(或吸引力)。將機器人抽象爲一個點,在勢場圖中沿梯度降低方向到目標點。優勢是,能夠考慮機器人上的多個點的動做,並且實時性好。缺點是,容易在梯度降低過程當中陷入局部極小值。並且,理論上人工勢場函數能夠在任意維數的狀態配置空間構造,這樣就和解決原始問題同樣了(Ideally the field would be constructed in the state space of the system, but this is equivalent to solving the original problem)。有一些簡化方法使用了導航函數,保證人工勢場擁有全局最小值。
- 隨機/機率規劃方法
這種方法被證實很是有用。在人工勢場中添加布朗運動能夠有效跳出局部極小區域。
另外,基於採樣的規劃方法,使用了隨機化,採樣和機率的方法,在高自由度系統或複雜動力學場景中很是有效。ompl便是這樣的一種庫,並且部署在ROS和moveIt!中。
基於採樣的運動規劃
- 基於採樣的規劃經過在機器人的狀態空間中採樣,來快速和有效的迴應規劃請求,特別是在複雜的約束和系統下尤爲好用。傳統方法每每空間和時間複雜度都很是大,在高維空間中每每沒有什麼用處。基於採樣的方法在配置空間中搜索可行的狀態點,而且繼續經過採樣鏈接這些狀態點。這樣能夠產生足夠靈活的可行解,而且是機率徹底的,機率徹底意味着,若是解存在,那麼隨着採樣次數逐漸增大,可行解必定能夠找到。不過,基於採樣的方法沒法確認一個問題不存在解。
一些定義
- 工做空間:機器人操做的物理空間,工做空間的邊界被認爲是障礙
- 狀態空間:機器人的參數空間。參數空間包括全部的機器人在工做空間中的狀態配置,狀態空間中的一個點就是一個狀態,注意狀態空間多是多維的
- 自由狀態空間:狀態空間的一個子集,在這個子集中的每一個狀態都是無障礙的
- 路徑:狀態空間中的連續狀態點。若是路徑中的每一個點都是無障礙的,那麼這個路徑也是無障礙的。
因此,基於採樣的規劃方法的目標是:在狀態空間中找到一個無障礙的路徑。接下來介紹兩種主要的基於採樣的規劃器。
機率地圖(PRM)
- PRM是第一個基於採樣的規劃器,這種方法使用在狀態空間中隨機採樣的方法構建roadmap,這種roadmap很像城市街區地圖。
- 均勻採樣,並鏈接起來,構形成roadmap,存儲在圖數據結構中。
- 須要注意的是:狀態空間歷來都不是顯式定義的,因此必需要有障礙檢測模塊,每一次採樣都要進行check,只有通過檢查的纔可以保留下來
- 有不少不一樣的採樣的方法,改進採樣策略每每頗有用
- 一旦採樣達到必定的數量,就開始構造邊,標準RPM會對每個採樣點,搜索周圍K臨近點(在以前的採樣點中找),使用局部規劃器找到最短無障礙路徑,局部規劃器直接在這些採樣點間進行插值(如直線差補),而後在這條直線中以必定的分辨率進行障礙檢測,若是沒有障礙點,那麼這個邊就做爲合格邊加入到roadmap中。
- 一旦roadmap構造徹底,那麼規劃就成爲鏈接起點和目標點的roadmap。
- 而後對這個roadmap進行圖搜索,執行最短路徑搜索
基於樹的地圖(RRT,快速隨機樹搜索)
- 現有的不少基於採樣的規劃器在自由狀態空間中構造了樹型結構,這種樹形結構與上節講的PRM很像,PRM的圖帶有環,這裏的是樹而已。因爲基於樹的規劃器太多(RRT,EST,SBL,KPIECE),這裏就不詳細講某一個,而是講一講大體的框架。
- 將機器人的起點當作一個樹根,隨機採樣的點做爲這個樹的一個節點,樹採用一種啓發式擴張方法,這種啓發式搜索條件每每就命名了這個方法,若是一個節點與樹之間有無障礙路徑,則將這個節點併入到樹中。
- 儘管採樣過程可能永遠也不會採樣到達機器人的目標狀態,規劃器每每都會設置有偏(bias)的擴張搜索,一旦將目標狀態點並如到樹中,路徑規劃就結束了。
PRM和RRT的不一樣
- PRM須要構造覆蓋所有狀態空間的一個圖,而後再鏈接起點和終點,而RRT不須要,只是逐漸的擴張樹,直到終點。
- 因此,RRT特別適合於一次請求的規劃,由於它構造的樹並不包含其餘目標點的信息,就算要求其到另一個點,它也要從新進行樹的擴張和生長。而PRM只須要構造一次便可。
- Controls are usually directed commands, and require a specific pre-condition in order for
a particular control to be valid. Tree-based methods, on the other hand, excel at planning with
complex dynamics because of the directed, acyclic nature of the underlying data structure. Control
information can be encoded for each edge of the tree, with the vertices of the tree satisfying the
prerequisites for the valid controls.(沒看懂)
總結
- 基於採樣的規劃方法所需內存更少
- 由於其不須要對狀態空間進行顯式表示
- 樹和圖等的數據結構保障了查找的效率和質量
基於採樣的規劃的基本組成
- 基於採樣的規劃特別適合在高維空間和複雜動力學環境下的路徑規劃,有不少中不一樣的規劃器及其附件,可是核心是:在一次採樣中,發生了什麼?
障礙檢測
- 障礙檢測很是有用。局部規劃器在尋找無障礙路徑時會用到(見PRM),在採樣過程當中也會用到。在複雜的高維繫統中,顯式表示狀態空間會很難,可是規劃器去不用去能夠構造它,由於障礙檢測執行了這一功能,若是沒有障礙,則這個狀態配置是合法的。
- (這裏「障礙」應該是廣義的,不只應該是物理障礙,還應該包括機器人在現有動力學約束下沒法到達的狀態區域)
最臨近搜索
- 前面已經提到,規劃算法須要找出離當前狀態最近的一個狀態,尋找無障礙路徑。當須要判斷機器人的兩個狀態的距離時就要用到這個方法。
- 可是,在高維空間中,歐式距離已經不能很好地計算。K-d樹數據結構提供了一種方法。
OMPL
下期預告