軌跡規划屬於機器人學中的上層問題,其主要目標是計划機器人從A移動到B並避開所有障礙的路線。
1、軌跡計划的對象
軌跡規划的對象是map,機器人通過SLAM獲得地map后,則可在地圖中選定任意兩點進行軌跡規划。暫時不考慮三維地圖,以平面二維圖為例,map主要有以下幾種:
如上所示,二維圖可以分為有權重的節點圖以及無權重的網格圖。以飛行機器人移動為例:如果場地上每個部分移動所消耗的能量都是等價的,則可以使用網格圖進行建模。如果在不同的區域移動所消耗的能量不同,則應該使用節點圖來進行建模。
2、軌跡規划的方法
2.1、 grassfire method
grassfire method是一種最簡單的軌跡規划算法。其數據結構包括三個部分:
1.map,記錄了起點,終點,障礙物的位置
2.distancetoStart,記錄了每個探索步驟后,方格與初始點的距離
3.parent,記錄了每個節點的父節點
算法步驟:
1、獲取map
2、初始化distancetostart,將起點設為current, 將distance_ 設為0
3、進入循環 如果current = destination 則跳出循環
將distancetostart中最小值對應的節點設為current
distance_ = distance_+1
尋找current所有的相鄰節點
將相鄰節點的distancetostart設為distance_,parent設為current
將current的distance_設為無窮大
4、依據parent map反求軌跡
顯然,這種grassfire算法是極其消耗計算能力的,因為其需要遍歷網格中幾乎每一個格子,甚至明明destination在上方,grassfire算法依舊需要向下探索。圖中紅色的區域代表已探索的點,藍色是candidate,綠色是起點,黃色是終點。顯然這個算法是各向同性的。
2.2、A* 算法
grassfire算法的最大缺點是沒有使用終點與起點相對位置關系信息。從而導致各項同性的探索策略。如果能增加一個將candidate拉向目標點的趨勢,則可以減小被探索的點數目。
A* 算法的數據結構包括五個部分:
1、map
2、g:相當於distancetostart;
3、H:一種衡量算子,用於衡量當前點到目標點的絕對距離
4、f:g+H,綜合了當前點到起點的距離與到終點的距離
5、parent,用於記錄軌跡
算法步驟:
1、初始化,獲取map,並將起點設為current. 獲取H map,distance_ = 0
2、進入循環 如果current為destination則退出循環
distance_ = distance_ +1;
獲取當前點的相鄰點
將相鄰點的g map值設為distance_
將相鄰點的f map值設為g+H
選擇f map值最小的點為current
將current f map值設為無窮大
3、根據parent map, 反求軌跡
結果如上所示。
顯然,由於引入了H map,所以算法會優先探索相對終點較近的點。obj = distance to start + distance to end 代表了最后需要走過的距離。每次都選擇最小的obj,並且最后能夠達到終點,那么總路程一定是全局最小的。
3、總結
對於飛行機器人而言,每次移動都會消耗大量的能量。好的軌跡規划算法可以保證飛行器少走彎路,避開障礙。所以減少計算量必須是在少走彎路的前提下。移動所消耗的能量是計算所消耗能量的十倍左右。