move_base 默认全局路径规划方法——navfn

本文深入探讨了ROS中的move_base节点在未明确指定全局规划器时,默认使用navfn/NavfnROS进行全局路径规划。通过分析launch文件示例,展示了如何配置move_base以指定局部和全局规划器。navfn采用dijkstra算法,其关键参数如允许未知空间的规划、规划误差容忍度等对路径规划有直接影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

move_base作为navigation包下的导航实现,集成了局部地图、局部运动规划、全局地图、全局路径规划四个模块。本文着重关注move_base默认使用的全局路径规划方法。

1

如果launch文件调用move_base时,没有指定参数 base_global_planner。
例如(turtlebot3包下,turtlebot3_navigation对导航功能的实现,只指明了base_local_planner,即局部导航方法)

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
    <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find turtlebot3_navigation)/param/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />
    <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
    <remap from="odom" to="$(arg odom_topic)"/>
    <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
  </node>
</launch>

一个指明了局部规划方法与全局规划方法的例子:

	<node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
  	  	<rosparam file="config/costmap_common_params.yaml" command="load" ns="global_costmap" />
  	 	<rosparam file="config/costmap_common_params.yaml" command="load" ns="local_costmap" />
  		<rosparam file="config/local_costmap_params.yaml" command="load" />
  		<rosparam file="config/global_costmap_params.yaml" command="load" />
  		<rosparam file="config/teb_local_planner_params.yaml" command="load" />
		<param name="base_global_planner" value="RAstarPlannerROS"/>
		<param name="planner_frequency" value="1.0" />
		<param name="planner_patience" value="5.0" />
		<param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" />
		<param name="controller_frequency" value="5.0" />
		<param name="controller_patience" value="15.0" />
        <param name="clearing_rotation_allowed" value="false" />  
	</node>
	

2

基于下move_base包中代码,找到了默认全局路径规划的方法——navfn/NavfnROS。

// navigation/move_base/src/move_base.cpp
private_nh.param("base_global_planner", global_planner, std::string("navfn/NavfnROS"));

该规划方法具体实现在 navigation/navfn中,标志在文件 navigation/navfn/bgp_plugin.xml中

  <class name="navfn/NavfnROS" type="navfn::NavfnROS" base_class_type="nav_core::BaseGlobalPlanner">

该方法的核心调用在move_base.cpp下

// 函数 MoveBase::makePlan()下
planner_->makePlan(start, goal, plan)

3 关于navfn

参考 http://wiki.ros.org/navfn

五个参数

~/allow_unknown (bool, default: true) :是否将未知空间当成自由空间进行规划
~/planner_window_x (double, default: 0.0)
~/planner_window_y (double, default: 0.0)
~/default_tolerance (double, default: 0.0) 所允许的规划与目标点之间的误差
~/visualize_potential (bool, default: false)

使用方法

内部实现了优化的A*,但代码实际上把这一步注释掉了;
采用的实际是 dijkstra 算法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值