ROS機器人路徑規划算法主要包括2個部分:1)全局路徑規划算法;2)局部路徑規划算法;
一、全局路徑規划 global planner
ROS 的navigation官方功能包提供了三種全局路徑規划器:carrot_planner、global_planner、navfn,默認使用的是navfn,
其中:
1、carrot_planner
參考ROS wiki :http://wiki.ros.org/carrot_planner
簡單的路徑規划器,優點是:是即使規划的目標點在障礙物上,也可以執行。機器人會向着目標點前進,避開障礙物盡量靠近目標點。
2、navfn:一個基於grid的全局規划器,navfn提供了一個快速的內插導航功能,可用於為移動基礎創建計划。計划者假定一個圓形機器人,並在成本地圖上運行,以從一個起點到一個網格的終點,找到一個最小的成本計划。導航功能是用Dijkstra的算法計算出來的,但對啟發式的支持也可能在不久的將來添加。navfn還為navfn計划器提供了一個ROS包裝器,它遵循navcore::在navcore中指定的BaseGlobalPlanner接口。
參考:http://wiki.ros.org/navfn
缺點是默認使用Dijkstra算法,對A*算法支持不好。
3、global_planner:替代navfn,支持A*算法。這個包提供了一個快速的、內插式全局規划器的實現。這個類遵循navcore::在navcore包中指定的BaseGlobalPlanner接口。它是作為一個更靈活的替代品來替代navfn。
參考:http://wiki.ros.org/global_planner
4、如何使用新的全局規划器。
目前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