launch文件

何为launch?

launch,中文含义是启动,launch文件顾名思义就是启动文件。在节点少,程序小的情况下可以一个一个节点来启动,测试运行效果;但是当工程规模大,需要的节点多时就显得比较费劲,用.launch文件来启动可以将需要的节点同时启动,不用再一个一个进行。为工程搭建提高了效率,里面还有很多参数灵活使用会带来非常高效的调试。

roslaunch是一个用于自动启动ros节点的命令行工具,从命令的字面上看还跟rosrun有些相似:

roslaunch PACKAGE_NAME LAUNCH_FILE_NAME

只不过roslaunch的操作对象并非节点,而是launch文件。launch文件是描述一组节点及其话题重映射和参数的XML文件。根据规范,这些文件的后缀都是.launch

一个最简单的launch文件可以像下面这样

<launch>
    <node name="demo" pkg="demo_package"
          type="demo_pub" output="screen"/>
    <node name="demo" pkg="demo_package"
          type="demo_sub" output="screen"/>
</launch>

launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。

roslaunch 命令执行launch文件时,首先会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore

本质

一行一行往下剖析,代码第一行出现了xml
说明了launch文件的本质是一个xml文件

launch文件常用标签介绍

1、launch

launch标签就像一个有容乃大的括号,规定了一片区域,所有的launch文件都由<launch>开头,由</launch>结尾,所有的描述标签都要写在<launch></launch>之间

<launch>
……
……
……
</launch>

在节点标签末尾的斜杠“/”是必须的,但很容易忘。

<node pkg=”package-name” type=”executable-name” name=”node-name”/>

你也可以这样显式地给出结束标签:

<node pkg=”…”type=”…” name=”…”></node>

2、include标签

include标签用于将另一个 xml 格式的 launch 文件导入到当前文件。类似C语言头文件包含。

<include>用于包含其它launch文件,被包含的launch文件将会被一同启动

属性属性作用
file ="$(find pkg-name)/path/filename.xml"指明我们想要包含进来的文件
ns="NAME_SPACE"相对NAME_SPACE命名空间导入文件

使用起来就像下面这样

<include file="$(dirname)/other.launch"/>		//file:包含其他launch文件的路径
  • 如果要给<include >包含进来的launch文件中的元素赋值,由于arg是局部的,只能改变本launch文件的参数值,因此需要建立一个包含在<include >标签之间的arg,格式如下:
    <include file="path-to-launch-file">
    <arg name="arg-name" value="arg-value"/>
    . . .
    </include>
    
  • 如果改变<include >包含进来的launch文件中元素用的arg名称与本launch文件一样的话,需写为如下格式:位置还放在上面<include >标签之间:
    <arg name="arg-name" value="$(arg arg-name)" />
    

 3、node

node标签可以说是launch文件里最常见的标签了,每个node标签里包括了ROS图中节点的名称属性name、该节点所在的包名pkg以及节点的类型type(其实就是可执行文件的名称,如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名),在上面的例子中还出现了output这个东西,这个属性在调试阶段很有用,output=“screen”表示了将终端输出转储在当前的控制台上,而不是在日志文件中。

属性属性作用
name="NODE_NAME"为节点指派名称,这将会覆盖掉ros::init()定义的node_name
pkg="PACKAGE_NAME"节点所在的包名
type="FILE_NAME"执行文件的名称如果是用Python编写的就填写xxx.py,如果是cpp就写编译生成的可执行文件名
output="screen"终端输出转储在当前的控制台上,而不是在日志文件中
respawn="true"当roslaunch启动完所有该启动的节点之后,会监测每一个节点,保证它们正常的运行状态。对于任意节点,当它终止时,roslaunch 会将该节点重启
required="true"当被此属性标记的节点终止时,roslaunch会将其他的节点一并终止。注意此属性不可以与respawn="true"一起描述同一个节点
launch-prefix = "command-prefix"我的理解是,相当于在执行启动命令时加上一段命令前缀
ns = "NAME_SPACE"这个属性可以让你在自定义的命名空间里运行节点

node标签用于指定 ROS 节点,是最常见的标签,需要注意的是: roslaunch 命令不能保证按照 node 的声明顺序来启动节点(节点的启动是多进程的)

  • pkg: 节点所在的功能包名称
  • type: 节点的可执行文件名称
  • name: 节点运行时的名称
  • output=“log | screen” (可选),日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
  • respawn=“true | false” (可选),如果节点退出,是否自动重启
  • required=“true | false” (可选),该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
  • ns=“xxx” (可选),在指定命名空间 xxx 中启动节点
  • machine=“机器名”,在指定机器上启动节点
  • args=“xxx xxx xxx” (可选),将参数传递给节点

4、remap

重映射ROS计算图资源的命名

比如现在你拿到一个节点,这个节点订阅了"/chatter"topic,然而你自己写的节点只能发布到"/demo/chatter"topic,由于这两个topic的消息类型是一致的,你想让这两个节点进行通讯,那么可以在launch文件中这样写

<remap from="/turtelbot/cmd_vel" to "cmd_vel"/>
  • from:源命名
  • to: 映射之后的名字

关于重映射这篇博文讲的比较详细

5、param参数用法

设置ROS系统运行中的参数,存储在参数服务器中。

<param name="output_frame" value="odom"/>
name:参数名
value:参数值

6、arg

arg标签用来在launch文件中定义参数,arg和param在ROS里有根本性的区别,就像局部变量和全局变量的区别一样。arg不储存在参数服务器中,不能提供给节点使用,只能在launch文件中使用。param则是储存在参数服务器中,可以被节点使用。

<arg name="demo"/>

像上面这样,就简单地声明了一个参数,名叫demo,可随意命名,但是声明不等于定义,我们需要给他赋值,在赋值之后参数才能够发挥作用。

<arg name="demo" value="666"/>
<arg name="demo" default="666"/>

以上是两种简单的赋值方法,两者的区别是使用后者赋值的参数可以在命令行中像下面这样被修改,前者则不行。

roslaunch demo demo.launch demo:=6666

arg还有更加高级,也更加灵活的用法:

$(arg arg_name)

$(arg arg_name)出现在launch文件任意位置时,将会自动替代为所给参数的值。

注意 arg 中defaultvalue的区别

<arg name="arg-name" default="arg-value" />  注意default定义的值在roslaunch时才可以改变
<arg name="arg-name" value="arg-value" />    注意value定义的值在roslaunch时不可以改变

arg name 中  x  y  z是位置,R(翻滚)   P(俯仰)  Y(偏航)是方向倾斜角

<arg name="x" value="0"/>
<arg name="y" default="7.5"/>
<arg name="z" default="1"/>
<arg name="R" value="0"/>
<arg name="P" value="0"/>
<arg name="Y" value="0"/>

7、注释

 <!-- PX4 SITL and vehicle spawn -->
  中间为注释的内容  注意格式左边开头有感叹号

  • 14
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值