【ROS】从入门到急眼--launch文件详解

launch在ros仿真开发中是非常的,凡是文件名以 .launch 为后缀都能用 roslaunch 命令启动。相比于逐个打开节点,launch更像是一键启动,只要打开一个文件就能启动、连接所有的节点、话题、服务器等。

xml语法格式如下:

第一行可写不可写一般写上xml文件的声明,因为launch文件的本质也是xml文件,所以在用编译器或者记事本打开的时候编译器会自动识别到这是xml文件(编译器识别不出launch文件是什么样的格式),若没有加的话可以手动更改显示语法。

<?xml version="1.0"?>

后面的段落开始要严格按照xml格式书写如下:

<!--这是一段注释(开头结尾必须都有双减号)-->
<tag1> 
	<tag2>
    	<...>
   	</tag2>
   	<...>
 	<tag3>
    	<...>
   	</tag3> 
   	<tag4>
   		<tag5>
   			<...>
   		</tag5>
 	</tag4> 
 	<tag6 ... ... />	
</tag1>

xml中以成对出现的标签:<tag></tag>,或是<tag/>构成,类似于c语言的{}和python的缩进(xml中的缩进是为了方便阅读不是语法必须的)。
而在launch中有如下几种常用的标签:

<launch>
<!--节点启动标签-->
    <node>
        <...>
    </node>
<!--重映射节点-->
    <remap>
        <...>
    </remap>
<!--启动其他的launch文件,类似c语言的头文件-->
    <include>
    	<...>
    </include>
<!--变量赋初值-->
    <arg>
    	<...>
    </arg>
<!--变量的替换-->    
    <param>
    	<...>
    </param>
	<rosparam>
		<...>
	</rosparam>
	<group>
		<...>
	</group>    
</launch>

标题内容:

node

node中有如下几个比较常用的值:

<node pkg="pack_name" type="executable_file" name="node_name"/> 
<node pkg="pack_name2" type="executable_file2" name="node_name2"/> 

pkg:节点所在功能包名称
type:功能包中的可执行文件
name:功能包名字(每个功能包名字都不一样)

还有几个较为少用的值

<node
	pkg=""     
	type=""
	name=""  
	respawn="true"    
	required="true"   
	launch-prefix="xterm -e"  
	output="screen"  
	ns="some_namespace">
</node> 

respawn:若该节点关闭,是否自动重新启动。
required:若该节点关闭,是否关闭其他节点。
launch-prefix:是否开启新新的终端执行,有的节点信息比较重要,为了使其不和其他节点混到一起去,在单独是终端中显示。
output:输出到屏幕上。
ns:将 node 归入不同的 namespace。

remap
<remap from="origin" to="new" />

节点的重映射,方便同一个 node 文件被应用到不同的环境中,用 remap 从外部修改一下 topic 即可,不需要改变源文件。

include
<!--按文件路径寻找目标文件-->
<include file="path-to-launch-file" />
<!--按功能包名字寻找目标文件-->
<include file="$(find package-name)/launch-file-name" />

从格式语句能很明显的看出include就是用来启动其他文件的标签。一般使用的是第二种格式,用find寻找功能包,清晰明了方便阅读并且方便移植。

arg

arg标签用于声明变量和给变量赋值

<!--声明一个变量名为num,但是没有赋值-->
<arg name="num"/>

变量的赋值有两种,一种是默认值(初值),后续可以修改,另一种是固定值,不可修改:

<!--声明一个变量名为num,并赋予初值(默认值)为1,可以通过命令行或者后面的语句修改-->
<arg name="num" default="1"/> 

<!--声明一个变量名为num,并赋予固定值为1,后续不可修改-->
<arg name="num" value="1"/>
param

param标签用于在参数服务器中定义一些参数。可以是bool值、文本文件、二进制文件等。

<param name="param_name" type="type1" value="val"/>
<!--type一般可以省略,系统会自动判断-->

可以直接把要赋予的值放在param标签里,也可以调用arg标签声明的变量的值:

<!--先设置默认值-->
<arg name="gui" default="true" />  
<!--直接通过变量名调用-->
<param name="use_gui" value="$(arg gui)"/>
<param name="gui" value="ture"/>
<!--写入一个bool类型的变量-->
<param name="param_name" textfile="$(find pkg)/path/file"/>     
<!--读取 file 存成 string-->
<param name="param_name" command="$(find pkg)/exe '$(find pkg)/arg.txt'"/>
<param name="param" type="yaml" command="cat '$(find pkg)/*.yaml'"/> 
<!--从yaml文件和txt文件中读取变量-->
rosparam

rosparam和param很类似,也是在参数服务器中定义变量值,不同的是rosparam允许批量操作和删除:

<rosparam command="load" file="$(find rosparam)/example.yaml" />
<!--load : 从 YAML 文件中加载一批 param-->
<rosparam command="delete" param="myparam" />
<!--delete: 删除某个 param-->
<!--其他赋值操作-->
<rosparam param="param">[1,2,3,4]</rosparam>
<rosparam>
	a: 1
	b: 2
</rosparam>
group

用于将一组节点推送到一个单独的命名空间中。

<group ns="wg2">
	<remap from="chatter" to="talker"/> 
	<!--对该 group 中后续所有 node 都有效-->
	<node ... />
	<node ... >
		<remap from="chatter" to="talker1"/> 
	<!--各个 node 中可以重新设置 remap-->
	</node>
</group>

ns:声明命名空间

if

在launch中比较常用的逻辑判断的有if标签

<arg name="num"       default="true"/>
<if test="$(arg num)">
	<include file="path-to-launch-file" />
</if>
<!--如果num的值为真,就运行一个文件-->
<arg name="num"       default="true"/>
<include if="$(arg num)" 
    file="path-to-launch-file" >
  </include>

以上就是笔者整理的launch(xml)文件的一些笔记的全部内容了。(第一次写可能不是很全(狗头保命))。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值