<!--
ROS navigation stack with velocity smoother and safety(reactive) controller
-->
<launch>
<include file="$(findturtlebot_navigation)/launch/includes/velocity_smoother.launch.xml"/>
<include file="$(findturtlebot_navigation)/launch/includes/safety_controller.launch.xml"/>
<arg name="odom_frame_id" default="odom"/>
<arg name="base_frame_id" default="base_footprint"/>
<arg name="global_frame_id" default="map"/>
<arg name="odom_topic" default="odom" />
<arg name="laser_topic" default="scan" />
<arg name="custom_param_file" default="$(findturtlebot_navigation)/param/dummy.yaml"/>
//所有参数都会默认位于nodename “move_base”下面。
<node pkg="move_base" type="move_base"respawn="false" name="move_base"output="screen"> //nodename是move_base
<rosparam file="$(findturtlebot_navigation)/param/costmap_common_params.yaml"command="load" ns="global_costmap" />//此文件中的参数会被加载到/move_base/global_costmap/下面,ns是/move_base/global_costmap,比如/move_base/global_costmap/max_obstacle_height
<rosparam file="$(findturtlebot_navigation)/param/costmap_common_params.yaml"command="load" ns="local_costmap" /> //此文件中的参数会被加载到/move_base/local_costmap/下面,ns是/move_base/local_costmap,比如/move_base/local_costmap/max_obstacle_height
<rosparam file="$(findturtlebot_navigation)/param/local_costmap_params.yaml"command="load" /> //参数都被加载到nodename“move_base”下,但是此文件内部明确指明了所有参数又都位于local_costmap下,所以效果同上面明确指名ns=”local_costmap”。
<rosparam file="$(findturtlebot_navigation)/param/global_costmap_params.yaml"command="load" /> //参数都被加载到nodename“move_base”下,但是此文件内部明确指明了所有参数又都位于global_costmap下,所以效果同上面明确指明ns=”global_costmap”。
<rosparam file="$(findturtlebot_navigation)/param/dwa_local_planner_params.yaml"command="load" /> //加载所有位于/move_base/DWAPlannerROS下的参数
<rosparam file="$(findturtlebot_navigation)/param/move_base_params.yaml"command="load" /> //将参数加载到nodename “move_base”下,比如/move_base/controller_patience
<rosparam file="$(findturtlebot_navigation)/param/global_planner_params.yaml"command="load" /> //加载/move_base/GlobalPlanner下面的参数
<rosparam file="$(findturtlebot_navigation)/param/navfn_global_planner_params.yaml"command="load" />//加载/move_base/NavfnROS下面的参数,比如/move_base/NavfnROS/allow_unknown
<!-- external params file that could be loaded into themove_base namespace -->
<rosparam file="$(arg custom_param_file)"command="load" />
<!-- reset frame_id parameters using user input data -->
//下面可以覆盖上面配置文件加载的参数:
<param name="global_costmap/global_frame"value="$(arg global_frame_id)"/>
<param name="global_costmap/robot_base_frame"value="$(arg base_frame_id)"/>
<param name="local_costmap/global_frame"value="$(arg odom_frame_id)"/>
<param name="local_costmap/robot_base_frame"value="$(arg base_frame_id)"/>
<param name="DWAPlannerROS/global_frame_id"value="$(arg odom_frame_id)"/>
<remap from="cmd_vel"to="navigation_velocity_smoother/raw_cmd_vel"/>
<remap from="odom" to="$(arg odom_topic)"/>
<remap from="scan" to="$(arg laser_topic)"/>
</node>
</launch>
在代码中获取参数的方法:
ros::NodeHandle private_nh("~");这里表明使用privatenamespace, 也就是说以nodename作为namespace. 此nodename是”move_base”,所以后面要找的参数都是/move_base下面的。
//get some parameters that will be global to the move basenode
std::string global_planner, local_planner;
private_nh.param("base_global_planner",global_planner, std::string("navfn/NavfnROS"));
这里就是要查找/move_base/base_global_planner参数。