【ROS|navigation|move_base】使用global_planner包自带的A*算法
1、如何使用global_planner包
在launch文件中设置参数
<param name="base_global_planner" value="global_planner/GlobalPlanner"/>
2、如何使用global_planner包自带的A*算法
在配置文件中设置参数,我的是global_planner_params.yaml
GlobalPlanner:
use_dijkstra: false
在launch文件中加载对应的配置文件
<rosparam file="$(find turtlebot3_navigation)/param/global_planner_params.yaml" command="load" />
3、参数配置解析
ROS中,机器人全局路径规划默认使用的是navfn包
move_base的默认参数中可以找到
base_global_planner (`string`, default: "navfn/NavfnROS")
navigation的源代码中还有一个global_planner的包里面已经有了A*,Dijkstra等算法的实现。
navfn的源程序中也有这两个算法的实现,默认根本就没用到global_planner这个文件夹下的源程序。那么为什么有两个用于全局导航的包在ROS里面?它们又是什么关系呢
早期的开发中是用navfn包做导航的并且默认使用Dijkstra做全局路径规划,并且有A * 的代码,
那为什么没有使用A * 呢? 因为这里的A*算法存在bug,没人有时间去弄
直到13年David Lu 才完成了这部分工作,重新发布了global_planner包,修改好的代码封装性更强,更清晰明了。
因此,也可以认为global_planner是navfn的升级版替代者。
那么问题来了David Lu为什么没用global_planner替代掉navfn?为了兼容呗。
因此两个包都在,并且默认的是navfn,也就是没用global_planner。
GlobalPlanner/use_dijkstra
(bool, default: true)
是否使用D*全局规划算法,默认为true,如果为false,则使用A*算法
4、参考链接
http://wiki.ros.org/global_planner
ROS源码解读(二)--全局路径规划_弱的一米-CSDN博客_ros全局路径规划
请问ros导航包中设置global_planner中的哪个参数才能指定A*算法还是dijkstra? - 知乎