launch文件解析
- 为什么需要launch文件
- 什么是launch文件
- 解析
- 更多launch文件元素介绍
- 后记
为什么需要launch文件
1, 不知道各位小伙伴学习到现在, 有没有发现一个问题, 就是每次执行ROS程序时, 需要启动多个终端, 每个终端去手动输入命令运行节点. 是不是很麻烦? 而且目前来说, 节点个数还不是很多, 在大工程项目里, 如果一个一个节点手动启用的话, 是不是很不靠谱. 那么, 有么有什么方法可以一次性启动呢?
2, 答案是: Yes!. 这个就是今天的主角, launch文件. 可以通过配置launch文件, 一次打开多个节点, 这就很方便.
什么是launch文件
launch文件类似xml文档, 采用标签描述每个元素的内容.
给一个例子:
在在ros_test目录下, 新建一个launch文件夹. 在launch文件夹中, 新建msg.launch
文件, 粘贴下面的代码.
<launch>
<node pkg="ros_test" name="listener1" type="listener"/>
<node pkg="ros_test" name="talker1" type="talker"/>
</launch>
在终端使用roslaunch命令, 运行该脚本, 则会同时启动listener节点和talker节点.
roslaunch ros_test msg.launch
解析
<launch>
...
</launch>
此为launch文件的根元素. 固定用法, 每个文件都有.
<node pkg="ros_test" name="listener1" type="listener"/>
<node>
为标签, 这里有三个属性pkg name type
pkg
: 为节点所在的包名称.name
: 为节点运行名称, 此处会覆盖ros::init()那个名称type
: 此处为可执行文件名称.
更多launch文件元素介绍
<node>
. 节点. 标*为不可省略属性.
标签 | 解释 | 示例 |
*pkg | 在哪个包 | pkg = “turtlesim” |
*type | 可执行文件 | type = “turtlesim_node” |
*name | 节点名称,覆盖ros::init() | name = “sim” |
args | 将参数传递给节点 | args =“arg1 arg2 arg3” |
machine | 在指定的机器上启动节点 | machine =“machine-name” |
respawn | 如果退出节点,则自动重新启动节点 | espawn =“true”(默认值:False) |
respawn_delay | 如果respawn为true,请在尝试重新启动之前检测到节点故障后等待respawn_delay秒。 | respawn_delay =“30” |
required | 如果节点死亡,则杀死整个roslaunch | required =“true” |
ns | 在’foo’命名空间中启动节点 | ns =“foo” |
clear_params | 在启动之前删除节点的私有命名空间中的所有参数 | clear_params =“true |
output | 如果’screen’,节点的stdout / stderr将被发送到屏幕。如果是’log’,stdout / stderr输出将被发送到$ ROS_HOME / log中的日志文件,stderr将继续发送到屏幕。默认为“log”。 | output =“log / screen” |
cwd | 如果是“node”,则节点的工作目录将设置为与节点的可执行文件相同的目录。在C Turtle中,默认为’ROS_HOME’ | cwd =“ROS_HOME” |
launch-prefix | 用于添加到节点的启动参数的命令/参数。这是一个强大的功能,使您可以启用gdb,valgrind,xterm,nice或其他方便的工具 | launch-prefix = “参数” |
<param>
标签:修改运行中的参数(ROS有一个参数服务器).标*为不可省略.
标签 | 解释 | 示例 |
*name | 参数名称/命名空间 | name = “output_frame” |
*value | 定义参数的值 | value = “odom” |
<arg>
标签: 标记允许通过指定经由命令行传递的值,存在单个启动文件,非常类似于方法中的本地参数,必须将arg值显式传递给包含的文件,就像在方法调用中一样。标*为不可省略.
标签 | 解释 | 示例 |
*name | 参数名称 | name = “name” |
value | 定义参数的值,不能与默认属性组合使用 | value = “odom” |
default | 参数的默认值。不能与value属性结合使用。 | default= “odom” |
<include>
标签: 嵌套重用,包含其他的launch文件,与C语言的include几乎一样。<remap>
标签: 重映射机制。例如turtlebot的键盘控制速度节点可能是/turtlebot/cmd_vel,而我们自己的机器人速度订阅的话题是/cmd_vel,使用remap可以很好的解决该问题:<remap from “/turtulebot/cmd_vel” to “cmd_vel” />