在ROS中,当我们要运行一个节点时,需要使用rosrun
命令,但当有十几个节点时,这种方法就会变得非常麻烦.而启动文件(launch file)便是ROS提供的一种可以同时启动多个节点的途径,通过配置,可以为操作多个节点提供极大的便利.
1、基本元素
一个完整的launch文件必须包含launch
和node
两个标签.
1.1
launch文件的根元素,文件中的所有内容都必须包含在这个标签中:
<launch>
...
</launch>
1.2
node用于启动节点.
<node pkg="pkg_name" type="executalbe_name" name="node_name" />
从上面的定义可以看出,node节点必须包含三个属性.这三个属性作用分别为:
- pkg: 定义节点所在功能包的名称
- type:节点可执行文件的名称
- name:定义节点运行的名称,将会覆盖在代码中init()的节点名称
除了这三个必须的属性,还有常用的属性:
- output="screen":将节点的标准输出打印到终端屏幕
- args="arguments":节点所需参数
2、参数设置
为了使launch更加灵活,launch文件支持参数的设置.关于参数设置的标签有两个:<param>
和<arg>
.
2.1
parameter是ROS系统运行中所需的参数,存储在参数服务器中.
<param name="output_frame" value="odom" />
运行launch文件后,output_frame这个parameter参数的值就被设为odom,并且被加载到参数服务器.
但是,在复杂的系统中参数数量一般会很多,这种情况一个一个设置参数会很麻烦,所以ROS提供一种通过加载YAML格式文件参数到参数服务器的方式.
<rosparam file="$(find robot_nav)/config/param_config.yanl" command="load"/>
2.2
argument可以理解为launch文件内的局部变量,而与ROS的节点无关.
<arg name="model" default="$(find robot_description)/urdf/robot.urdf" />
launch文件中需要用到argument时
<param name="robot_description" command="$(arg model)" />
3、重映射
<remap from="/turtlebot/cmd_vel" to "/cmd_vel" />
<remap frot="/vision_and_scan" to "/scan" />
4、嵌套复用
<include file="$(dirname)/other.launch" />