1. 程式人生 > >【機器人學:運動規劃】快速搜尋隨機樹(RRT---Rapidly-exploring Random Trees)入門及在Matlab中演示

【機器人學:運動規劃】快速搜尋隨機樹(RRT---Rapidly-exploring Random Trees)入門及在Matlab中演示

  快速搜尋隨機樹(RRT -Rapidly-ExploringRandom Trees),是一種常見的用於機器人路徑(運動)規劃的方法,它本質上是一種隨機生成的資料結構—樹,這種思想自從LaValle在[1]中提出以後已經得到了極大的發展,到現在依然有改進的RRT不斷地被提出來。

  機器人的路徑(運動)規劃的問題被定義為:給定機器人在運動區域的初始位姿 qinit 和終點位姿 qgoal 找到一條路徑,即一個位姿的連續序列,使得機器人沿該路徑能夠從初始位姿運動到終點,且不與障礙物發生碰撞。

  對於機械臂來說,一般的運動規劃是在大於等於2的多維構型空間(C-Space)中進行的,然而對於初學者來說,可以首先以2維空間中的路徑規劃為例(例如圖1所示的迷宮),掌握一個初步的概念。


起點和終點
圖1 在一個迷宮中設定起點 qinit 和終點 qgoal

  對於機器人運動規劃問題,現在有很多開源的程式碼可供選擇學習,例如OMPL,在CSDN上也有人上傳了一些RRT的程式碼,但是大部分是需要積分下載的。為了更加便捷地入門學習RRT的思路,我從Github上找到了一個在Matlab裡編寫和模擬的程式碼(原始碼連線),因為在Matlab中執行程式和視覺化相對來說比較簡單,所以現在簡單介紹一下這個程式,算作是對RRT的初步入門學習。 它的虛擬碼可以表示成下表:

  • 演算法:構建RRT
    ————————————————————
  • 輸入:
    map: 機器人所處環境的資訊;
    qinit :機器人的起始位置;
    qgoal :機器人的終點位置;
    k :嘗試生成樹節點的次數;
    deltaq qnear qnew 的距離;
    ————————————————————
  • 輸出
    V
    ertices
    :RRT的頂點;
    Edges :RRT的邊;
    Path :從 qinit qgoal 的原始路徑;
    T :連線 qinit qgoal 的樹;
    PathSmooth :連線 qinit qgoal 的縮短後的路徑;
    ————————————————————
  • 1: qrand,qnear,qnew
    2:for i=1 to k
    3:按一定的概率設定 qrandqgoal 或在map中隨機生成 qrand ;
    4: qnearfindQNear(qrand,vertices); //在 qrand 附近找到距離其最近的 qnear .
    5: qnewfindQNew(qnear,qrand,deltaq); //生成沿 qnear qrand 方向上,距 qnear deltaq qnew
    6:對 qnew qnear 做碰撞檢測;
    7:if 沒有碰撞
    8: VerticesVertices { qnew };
    9: EdgesEdges { qnew,qnear };
    10:if qnew = qgoal or qnew qnear qgoal 包圍
    11: pathfillSo