ROS機器人路徑規劃算法主要包括2個部分:1)全局路徑規劃算法;2)局部路徑規劃算法;node
1、全局路徑規劃 global planner算法
ROS 的navigation官方功能包提供了三種全局路徑規劃器:carrot_planner、global_planner、navfn,默認使用的是navfn,spa
其中:.net
一、carrot_plannercode
參考ROS wiki :http://wiki.ros.org/carrot_plannerblog
簡單的路徑規劃器,優勢是:是即便規劃的目標點在障礙物上,也能夠執行。機器人會向着目標點前進,避開障礙物儘可能靠近目標點。接口
二、navfn:一個基於grid的全局規劃器,navfn提供了一個快速的內插導航功能,可用於爲移動基礎建立計劃。計劃者假定一個圓形機器人,並在成本地圖上運行,以從一個起點到一個網格的終點,找到一個最小的成本計劃。導航功能是用Dijkstra的算法計算出來的,但對啓發式的支持也可能在不久的未來添加。navfn還爲navfn計劃器提供了一個ROS包裝器,它遵循navcore::在navcore中指定的BaseGlobalPlanner接口。get
參考:http://wiki.ros.org/navfnit
缺點是默認使用Dijkstra算法,對A*算法支持很差。io
三、global_planner:替代navfn,支持A*算法。這個包提供了一個快速的、內插式全局規劃器的實現。這個類遵循navcore::在navcore包中指定的BaseGlobalPlanner接口。它是做爲一個更靈活的替代品來替代navfn。
參考:http://wiki.ros.org/global_planner
四、如何使用新的全局規劃器。
目前ros默認使用的是navfn的全局規劃器,使用Dijkstra的算法,若是須要使用A*算法,則須要更改全局路徑規劃器。
具體是在move_base包的launch文件裏面更改:
<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"> <param name="base_global_planner" value="global_planner/GlobalPlanner"/>
move_base將調用global_planner規劃器進行路徑規劃。參數設置:
如圖所示, 將use_dijkstra算法設置false就是使用A*算法。
也能夠使用本身寫的路徑規劃器進行路徑規劃,參考:
https://community.bwbot.org/topic/43
http://blog.csdn.net/heyijia0327/article/details/45030929