RRT算法原理图解
RRT算法原理圖解
-
開始
本人很懶,習慣了只看不寫。廢話少說,直奔主題:原始RRT算法原理圖文簡介(圖都是我自己按照步驟一幅幅畫的——閑的蛋疼,但應該比較直觀易懂,能被借鑒參考也算我的功德)。
RRT是一種通用方法,原理也較為簡單,不受機器人類型和自由度的約束。下面按結合一組過程實例化的圖片來講解一下RRT實現路徑規劃的原理。第一步:如圖所示:在地圖中添加了機器人的起點(藍色)和終點(黃色),黑色部分表示障礙物。將起點初始化為生長樹的根節點(此時的樹只包含起點這一個節點,就像還只是一顆種子);
第二步:向地圖中的自由空間(非障礙區)隨機位置生成一個隨機點(圖中三角形),也隨便舉個栗子畫一下;
第三步:以剛剛生成的隨機點為目標,遍歷生長樹上的現存節點,計算每個節點到該隨機點的距離,篩選出距離最小的節點作為最近點。此時樹上僅存在起點(一顆沒發芽的種子),所以直接選取起點為最近點。以最近點和隨機點的連線(圖中我牽的紅線)為生長方向(隨機點僅起確定生長方向的作用);
第四步:從最近點向目標點生長,生長的長度為步長,(每一次生長的步長是固定的,步長看情況設定:太短導致算法搜索速度變慢,太長導致生長會跨過障礙物),從此時的最近點也就是起點沿著生長方向生長一個步長得到一個生長點(空心圓圈);
種子終于要發芽了!
第五步:判斷新生成的生長點是否與障礙物有碰撞,若沒有碰撞則將生長點添加到樹上(發芽成功),若碰撞了就剔除該生長點,生長作廢(發芽失敗,等待重新發芽),圖中很明顯是沒有碰到障礙物,發芽成功!此時的生長樹上就存在了兩個節點(藍色);
第六步:再次生成隨機點(我們根據圖慢慢來講解啊)
第七步:以剛剛生成的隨機點為目標,遍歷生長樹上的現存節點,計算每個節點到該隨機點的距離,篩選出距離最小的節點作為最近點。和上面第三步相同,計算篩選出此時生長樹上離隨機節點最近的最近點依然是起點,然后以最近點和隨機點的連線為生長方向(繼續牽線);
第八步:重復了第四步:從最近點向目標點生長,得到了新的生長點;
第九步:判斷是否成功,又重復了第五步。。。很明顯又成功了,你說氣不氣人?把新的生長點納入生長樹中(現在樹上已經有三個節點了)
第十步:再來!重復操作,加隨機點!看圖!(爭取把多種情況實例化說一遍,針對小白)
第十一步:同第三步,這次篩選出來的最近點終于不是起點了,而是第九步最新納入生長樹上的節點,直接牽線;
第十二步:如圖,最近點向隨機節點靠近一個步長,生成了一個生長點(長到了障礙物里面)。
第十三步:生長點都長障礙物里面去了當然發生了碰撞啊,還撞得不輕,生長失敗!(紅色警告)
剔除該生長節點,此次生長作廢,不合格,樹不接受。
第十四步:此處省去好多步(受不了了,終于寫出這句話,憋了好久),重復上述操作:加隨機點,找最近點,向點生長產生生長點,碰撞檢測,更新生長樹,直到有樹節點進入了終點的設定鄰域(她終于進入了他的視線),表示路徑規劃劃成功!很多步后效果大致是這個樣紙:
第十五步:從終點開始依次回溯父節點(終點找它爸爸,他爸爸找他爺爺,一直找到起點為止)把這些節點按(輩分)順序提取出來就構成了路徑。圖中紅色線段就是本次實例的路徑結果。
END~
總結
- 上一篇: 栅栏密码详解
- 下一篇: PDF如何复制页面,PDF复制页面这种方