目录[-]
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>
<? 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节点,也无济于事。