vscode开发ROS(12)-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” />

后记

更多机器人ROS相关,公-众-号搜索 ”机器人小站"。

参考:http://wiki.ros.org/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章