一 launch file 介绍
在运行ros程序时我们往往需要在不同终端启动多个不同的节点,这会让人有些沮丧。幸运的是,ROS 提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file)。事实上,在 ROS 功能包中,启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。其基本思想是在一个XML格式的文件内将需要同时启动的一组节点罗列出来。
通过读取launch文件中的参数配置、属性配置等来启动一系列节点;很多ROS包或源码包中都有launch文件,一般为该程序包能够运行起来的基本demo配置,运行下面指令自动补全会提示该包现有的launch文件: $roslaunch package_name file.launch
2. 节点元素的属性
每个节点元素由三个必须的属性:
- pkg
该节点属于哪个包,相当于rosrun命令后面的第一个参数 - type
可执行文件的名字,rosrun命令的第二个参数 - name
该节点的名字,相当于代码中ros::int的命名信息,有了它代码中的名称会被覆盖。
其他属性:
- output
将标准输出显示在屏幕上而不是记录在日志中 - respawn
请求复位,当该属性的值为respawn="true"
时,roslaunch会在该节点崩溃时重新启动该节点 - required
必要节点,当该值为required="true"
时,roslaunch会在该节点终止时终止其他活跃节点。 - 启动前缀
在启动命令加上前缀。例如当其设置为launch-prefix="xterm -e"
时,效果类似于xterm -e rosrun X X
。也就是为该节点保留独立的终端。 - ns
在命名空间中启动节点。 - 重映射
使用方法remap from="original-name(turtle/pose)"to"new-name(tim)"
- 包含其他文件
include file="path to launch file"
在启动文件中包含其他启动文件的内容(包括所有的节点和参数),可使用如下命令使路径更为简单include file="($find package-name)/launch-file-name"
- 启动参数(launch arguments)
为了使启动文件便于配置,roslaunch还支持启动参数,有时也简称为参数甚至args,其功能有点像可执行程序中的局部变量。
声明参数:arg name="arg-name"
然而这样的声明并不是必须的,但是这是一个好的做法,因为这样能使读者比较清楚启动文件需要哪些参数
参数赋值:roslaunch package-name launch-file-name arg-name:=arg-value
<arg name=”arg-name” default=”arg-value”/>
<arg name=”arg-name” value=”arg-value”/>
获取参数:一旦参数值被声明并且被赋值,你就可以利用下面的arg 替换(arg substitution)语法来使用该参数值了:$(arg arg-name)每个该替换出现的地方,roslaunch 都将它替换成参数值。在示例中,我们在 group 元素中的 if 属性使用了一次 use_sim3 参数。