【机器人学:运动规划】快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示
??快速搜索隨機樹(RRT -Rapidly-ExploringRandom Trees),是一種常見的用于機器人路徑(運動)規(guī)劃的方法,它本質(zhì)上是一種隨機生成的數(shù)據(jù)結構—樹,這種思想自從LaValle在[1]中提出以后已經(jīng)得到了極大的發(fā)展,到現(xiàn)在依然有改進的RRT不斷地被提出來。
??機器人的路徑(運動)規(guī)劃的問題被定義為:給定機器人在運動區(qū)域的初始位姿qinit和終點位姿qgoal找到一條路徑,即一個位姿的連續(xù)序列,使得機器人沿該路徑能夠從初始位姿運動到終點,且不與障礙物發(fā)生碰撞。
??對于機械臂來說,一般的運動規(guī)劃是在大于等于2的多維構型空間(C-Space)中進行的,然而對于初學者來說,可以首先以2維空間中的路徑規(guī)劃為例(例如圖1所示的迷宮),掌握一個初步的概念。
圖1 在一個迷宮中設置起點qinit和終點qgoal
??對于機器人運動規(guī)劃問題,現(xiàn)在有很多開源的代碼可供選擇學習,例如OMPL,在CSDN上也有人上傳了一些RRT的代碼,但是大部分是需要積分下載的。為了更加便捷地入門學習RRT的思路,我從Github上找到了一個在Matlab里編寫和仿真的代碼(源碼連接),因為在Matlab中運行程序和可視化相對來說比較簡單,所以現(xiàn)在簡單介紹一下這個程序,算作是對RRT的初步入門學習。 它的偽代碼可以表示成下表:
- 算法:構建RRT
———————————————————— - 輸入:
map: 機器人所處環(huán)境的信息;
qinit:機器人的起始位置;
qgoal:機器人的終點位置;
k:嘗試生成樹節(jié)點的次數(shù);
deltaq:qnear和qnew的距離;
———————————————————— - 輸出
Vertices:RRT的頂點;
Edges:RRT的邊;
Path:從qinit到qgoal的原始路徑;
T:連接qinit和qgoal的樹;
PathSmooth:連接qinit和qgoal的縮短后的路徑;
———————————————————— - 1:qrand,qnear,qnew←?;
2:for i=1 to k
3:按一定的概率設置qrand←qgoal或在map中隨機生成qrand;
4:qnear←findQNear(qrand,vertices);//在qrand附近找到距離其最近的qnear.
5:qnew←findQNew(qnear,qrand,deltaq);//生成沿 qnear和qrand方向上,距qnear為deltaq的qnew;
6:對qnew到qnear做碰撞檢測;
7:if 沒有碰撞
8: Vertices←Vertices∪{qnew};
9: Edges←Edges∪{qnew,qnear};
10:if qnew=qgoal or qnew和qnear將qgoal包圍
11:path←fillSolutionPath(edges,vertices);//將Edges連接起來,即為生成的路徑。
12:endif
13:endif
14:endfor
15:pathSmooth←smooth(map,path,vertices,delta);//使用貪心算法提取縮短后的路徑。
16:Return T;
??需要注意的是在步驟3中該程序使用的方法是以一定的概率將qgoal作為qrand,這樣可以使樹的生長方向偏向終點,這與RRT的原始文獻[1]是不同的。步驟5生成qnew示意圖如圖2所示。
圖2 生成qnew
??對于步驟6的碰撞檢測,可將qnew到qnear之間的連線插值出若干個點,如圖3,對每個點做檢測,如果所有的點都不在障礙區(qū)域,那么說明兩點之間無障礙。
圖3 碰撞檢測原理
關于最后的一個縮短路徑的步驟15(smooth),原理可見下圖4,從起點qinit開始,依次尋找能夠能夠無碰撞連接終點qgoal的頂點,記錄此點q′,再從起點qinit開始,以q′為終點尋找,直至起點qinit和q′能夠無碰撞連接,將所有的q′點連接后就得出了縮短后的路徑(PathSmooth)。
圖4 縮短路徑的原理
??運行程序之后得到的效果如圖5所示,其中紅色的路徑為原始路徑,黑色的路徑為縮短(Smooth)后的路徑。
圖5 運動規(guī)劃效果
[1]LaValle, S.M., Rapidly-exploring random trees: A new tool for path planning. 1998.
[2]https://github.com/emreozanalkan/RRT
總結
以上是生活随笔為你收集整理的【机器人学:运动规划】快速搜索随机树(RRT---Rapidly-exploring Random Trees)入门及在Matlab中演示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DEM高程数据的获取和应用(全国DEM数
- 下一篇: oracle常用查询语句