文件内参数
<arg name="map_file" default="$(find robot_navigation)/maps/map.yaml"/>
<arg name="simulation" default= "false"/>
<arg name="planner" default="teb" doc="opt: dwa, teb"/>
<arg name="open_rviz" default="false"/>
<arg name="use_dijkstra" default= "true"/>
<arg name="pub_imu" default="False" />
<arg name="sub_ackermann" default="False" />
以上为一些运行launch文件时候可选的参数,该参数仅在launch文件内生效。
map_file加载地图
simulation选择是否在仿真环境下导航
planner选择局部规划器
open_rviz是否打开rviz
use_dijkstra全局规划器是否使用dijkstra
pub_imu是否发布imu信息
sub_ackermann是否订阅ackermann话题
使用仿真
<group if="$(arg simulation)">
<!-- simulation robot with lidar and map-->
<include file="$(find robot_simulation)/launch/simulation_one_robot_with_map.launch"/>
</group>
判断是否仿真:是,则启动simulation_one_robot_with_map.launch这个文件
不使用仿真
<group unless="$(arg simulation)">
<!-- robot with lidar -->
<!-- <include file="$(find robot_navigation)/launch/robot_lidar.launch"> -->
<!--<arg name="robot_name" value="$(arg robot_name)"/>-->
<!-- </include> -->
<include file="$(find base_control)/launch/base_control.launch">
<arg name="pub_imu" value="$(arg pub_imu)"/>
<arg name="sub_ackermann" value="$(arg sub_ackermann)"/>
</include>
<!-- Map server -->
<node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)">
<param name="frame_id" value="map"/>
</node>
<!-- AMCL -->
<node pkg="amcl" type="amcl" name="amcl" output="screen">
<rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/amcl_params.yaml" command="load" />
<param name="initial_pose_x" value="0.0"/>
<param name="initial_pose_y" value="0.0"/>
<param name="initial_pose_a" value="0.0"/>
</node>
</group>
在不使用仿真的情况下,首先启动小车底盘base_control.launch。 然后启动地图服务器,加载保存好的地图。 这里我把用于定位的AMCL注释掉了。因为我的小车没有激光雷达。关于AMCL的知识:机器人导航(仿真)(二)——amcl定位_蔡军帅的博客-CSDN博客
小车导航堆栈:路径规划
<!-- move_base -->
<include file="$(find robot_navigation)/launch/move_base.launch" >
<arg name="planner" value="$(arg planner)"/>
<arg name="simulation" value="$(arg simulation)"/>
<arg name="use_dijkstra" value="$(arg use_dijkstra)"/>
</include>
启动move_base.launch文件,执行具体的导航任务。
关于move_base包的理解_青年云耕的博客-CSDN博客
带你理清:ROS机器人导航功能实现、解析、以及参数说明_dwa 局部规划器规划表现不稳定_tomorrow″的博客-CSDN博客
是否启动rviz
<group if="$(arg open_rviz)">
<node pkg="rviz" type="rviz" name="rviz" required="true"
args="-d $(find robot_navigation)/rviz/navigation.rviz"/>
</group>
这里只是单纯的打开了rviz,和多点导航打开的navigation_rviz.launch文件不同。