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接口。
缺点是默认使用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*算法。
也可以使用自己写的路径规划器进行路径规划,参考: