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如果节点死亡,则杀死整个roslaunchrequired =“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/

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值