目录[-]


1、launch标签:launch文件格式

launch文件本质上就是一份 xml 格式的脚本文件,因此 launch 文件的书写也是通过标签来进行的,其格式如下:

<launch>
	... ...//在launch标签内部填写其他标签
</launch>

2、xml标签:添加版本信息

roslaunch文件可以像其他xml文件一样,添加版本信息,其格式如下:

<launch>
	<? xml version = "1.0" ?> 
</launch>

3、node标签:添加启动节点

► node:节点标签

► pkg: 节点所在的包名称,也就是通过catkin_creat_pakage 创建的包的名称

► type: 包中的可执行文件名称,名称可以在CMAKE文件中设置。详细见Cmake文件描述。

► name: 运行的该节点的名称,此为选填,如果不填写则名称为程序中ros节点初始化时设置的节点名称。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "node_name">
	</node>
</launch>

4、respawn标签:节点关闭后自动启动设置标签

► respawn标签可设置在该节点失败后,是否自动重新启动该节点。

        • true: helloworld节点关闭后,会重新启动;

        • false: helloworld节点关闭后,不会重新启动;

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld">
		respawn = "false"
	</node>
</launch>

5、required标签:主节点设置标签

► required标签可设置在该节点失败后,是否关闭其他所有节点。

        • true: helloworld节点关闭后,关闭所有其他正在运行的节点;

        • false: helloworld节点关闭后,其他节点正常运行;

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld">
		required = "true"
	</node>
</launch>

6、launch_prefix 标签:打开一个新的窗口

 该标签会重新打开一个terminl窗口。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld">
		launch_prefix = "helloworld"
	</node>
</launch>

7、output标签:输出重定向

如果一个节点通过rosrun运行时,print函数能够打印到屏幕上,但是通过roslaunch文件启动时,不会将内容打印到屏幕上,则需要在launch文件中用output标签进行输出重定向,原因是roslaunch 文件的文件输出默认存储在ros的log文件中,路径为:/.ros/log/… …:

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
	</node>
</launch>

8、remap标签:节点重定向

remap标签通常作为node的子标签出现,用来修改topic之间的相互订阅关系,比如现在系统中已经有一个订阅 “chatter”名称的话题;同时系统中已经有一个发布“helloworld”名称的话题;如果两个话题使用的是同一种数据类型,则可以通过remap标签将订阅的“chatter“话题定向到订阅”helloworld”话题。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<remap from = "chatter" to = "helloworld" />
	</node>
</launch>

9、include标签: 嵌套添加文件

include 标签的作用是将一个launch文件添加到另一个launch文件中,也就是launch文件的嵌套,比如一个机器人的运行往往需要同时运行几十上百的节点,如果一个个启动不显示,此时可以设计一个launch文件,将所有需要启动的节点添加到该母节点。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<include file = "path_2_launch_file.launch" />
	</node>
</launch>

同时为了方便移植,可以不使用绝对路径,而是通过寻找包路径的方式来实现launch文件的嵌入,其格式如下:

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<include file = "$(find test_node)/launch/helloworld.launch "/>
	</node>
</launch>

10、param标签:导入单个参数

param标签相当于命令行中的rosparam set 指令,例如以下指令为在服务器中添加一个名为demo_param的参数,其值为120

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<param name="demo_param" type="int" value="120"/>
	</node>
</launch>

11、rosparam标签:导入参数文件

在roslaunch文件中,可以通过roslaunch指令从ymal文件中批量导入文件。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<rosparam command="load" file = "$(find test_node)/params/helloworld.ymal "/>
	</node>
</launch>

12、arg标签: 局部参数

arg标签为在launch文件中定义参数,且参数只能在launch文件中使用。arg标签有如下两种定义方式,区别在于可以在命令行中对以default附值的参数进行修改。此后,当$(arg local_demo)出现在launch文件时,会自动替换为所给参数的值。

<launch>
	<? xml version = "1.0" ?> 
	<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<arg name="local_demo" value ="120"/>
		<arg name="local_demo1" default ="120"/>
	</node>
</launch>

13、group标签:节点组管理

group标签可将若干个节点同时划分进同一个工作空间,以做到对某一批量node节点的批量管理,同时启动或终止同一个group中的节点。

<launch>
	<? xml version = "1.0" ?> 
	<group>
		<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<arg name="local_demo" value ="120"/>
		<arg name="local_demo1" default ="120"/>
		</node>

		<node pkg = "test_node1" type = "test_node1" name = "helloworld1" output = "screen">
		<arg name="local_demo2" value ="120"/>
		<arg name="local_demo3" default ="120"/>
		</node>
		.
		.
		.
	</group>
</launch>

14、group与arg标签:配合使用

<launch>
	<? xml version = "1.0" ?> 
	<arg name="switch" value ="1"/>
	<group if="$(switch)">
		<node pkg = "test_node" type = "test_node" name = "helloworld" output = "screen">
		<arg name="local_demo" value ="120"/>
		<arg name="local_demo1" default ="120"/>
		</node>

		<node pkg = "test_node1" type = "test_node1" name = "helloworld1" output = "screen">
		<arg name="local_demo2" value ="120"/>
		<arg name="local_demo3" default ="120"/>
		</node>
		.
		.
		.
	</group>
</launch>

15、ros中使用launch文件

在ros工作空间下,新建test.launch文件,并按照如上参数配置填写。

roslaunch test_node test.launch 

16、roslaunch特性

1. 通过roslaunch命令启动的节点,无法保证各节点的启动顺序。

2. 执行roslaunch指令时,会首先检测系统中是否存在roscore节点,如无,则会自动启动roscore节点。

3. 在launch文件的参数配置中,如果未设置 rospawn 属性,则断开roscore后节点即停止运行,此时即使重新启动roscore节点,也无济于事。