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 typepkg: 为节点所在的包名称.
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” />