【機器人學:運動規劃】快速搜尋隨機樹(RRT---Rapidly-exploring Random Trees)入門及在Matlab中演示
阿新 • • 發佈:2018-11-25
快速搜尋隨機樹(RRT -Rapidly-ExploringRandom Trees),是一種常見的用於機器人路徑(運動)規劃的方法,它本質上是一種隨機生成的資料結構—樹,這種思想自從LaValle在[1]中提出以後已經得到了極大的發展,到現在依然有改進的RRT不斷地被提出來。
機器人的路徑(運動)規劃的問題被定義為:給定機器人在運動區域的初始位姿
對於機械臂來說,一般的運動規劃是在大於等於2的多維構型空間(C-Space)中進行的,然而對於初學者來說,可以首先以2維空間中的路徑規劃為例(例如圖1所示的迷宮),掌握一個初步的概念。
圖1 在一個迷宮中設定起點
對於機器人運動規劃問題,現在有很多開源的程式碼可供選擇學習,例如OMPL,在CSDN上也有人上傳了一些RRT的程式碼,但是大部分是需要積分下載的。為了更加便捷地入門學習RRT的思路,我從Github上找到了一個在Matlab裡編寫和模擬的程式碼(原始碼連線),因為在Matlab中執行程式和視覺化相對來說比較簡單,所以現在簡單介紹一下這個程式,算作是對RRT的初步入門學習。 它的虛擬碼可以表示成下表:
- 演算法:構建RRT
———————————————————— - 輸入:
map: 機器人所處環境的資訊;
qinit :機器人的起始位置;
qgoal :機器人的終點位置;
k :嘗試生成樹節點的次數;
deltaq :qnear 和qnew 的距離;
———————————————————— - 輸出
V :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:ifqnew =qgoal orqnew 和qnear 將qgoal 包圍
11:path←fillSo