概念
launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。
作用
简化节点的配置与启动,提高ROS程序的启动效率。
使用
以 turtlesim 为例演示
1.新建launch文件
在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件
<launch> <node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen" /> <node pkg="turtlesim" type="turtle_teleop_key" name="myTurtleContro" output="screen" /> </launch>
2.调用 launch 文件
roslaunch 包名 xxx.launch
Notice:roslaunch 命令执行launch文件时,首先会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore
PS:本节主要介绍launch文件的使用语法,launch 文件中的标签,以及不同标签的一些常用属性。
在ROS的Launch文件中,有一些常见的标签,包括
<launch> <!-- 启动一个节点 --> <node pkg="package_name" type="node_type" name="example_node" output="screen"> <param name="param_name" type="int" value="42" /> <param name="string_param" type="string" value="hello" /> <remap from="original_topic" to="remapped_topic" /> <rosparam file="$(find package_name)/config/config.yaml" command="load" /> </node> <!-- 定义一个参数 --> <param name="global_param" type="double" value="3.14" /> <!-- 重映射一个话题 --> <remap from="original_topic" to="remapped_topic" /> <!-- 定义一个命名空间 --> <group ns="example_namespace"> <!-- 在命名空间内启动一个节点 --> <node pkg="package_name" type="node_type" name="namespaced_node" output="screen"> <param name="param_in_namespace" type="bool" value="true" /> </node> <!-- 在命名空间内定义一个参数 --> <param name="param_in_namespace" type="bool" value="false" /> </group> </launch>
以下是包含
<launch> <!-- 使用 include 标签包含另一个 Launch 文件 --> <include file="$(find package_name)/launch/another_launch_file.launch" /> <!-- 使用 rosparam 标签加载参数 --> <rosparam file="$(find package_name)/config/params.yaml" command="load" /> <!-- 启动节点,使用加载的参数 --> <node pkg="package_name" type="node_type" name="example_node" output="screen"> <param name="param_from_file" /> </node> </launch>
这个Launch文件演示了以下标签的用法:
<node> :用于启动一个节点,并可以在节点内定义参数、重映射话题,加载ROS参数文件等。<param> :定义全局参数。<remap> :重映射一个话题。<group> :定义一个命名空间,可以在其中启动节点、定义参数等。<include> :用于包含另一个Launch文件。在这个例子中,它包含了名为another_launch_file.launch 的Launch文件。<rosparam> :用于加载ROS参数文件。在这个例子中,它加载名为params.yaml 的参数文件,可以在后续的节点中使用这些参数。
具体各个标签的详细阐述如下。
1. launch文件标签之launch
1.属性
-
deprecated = "弃用声明" 告知用户当前 launch 文件已经弃用
2.子级标签
所有其它标签都是launch的子级
2. launch文件标签之node
1.属性
-
pkg=“包名”
节点所属的包
-
type=“nodeType”
节点类型(与之相同名称的可执行文件)
-
name=“nodeName”
节点名称(在 ROS 网络拓扑中节点的名称)
-
args=“xxx xxx xxx” (可选)
将参数传递给节点
-
machine=“机器名”
在指定机器上启动节点
-
respawn=“true | false” (可选)
如果节点退出,是否自动重启
-
respawn_delay=" N" (可选)
如果 respawn 为 true, 那么延迟 N 秒后启动节点
-
required=“true | false” (可选)
该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch
-
ns=“xxx” (可选)
在指定命名空间 xxx 中启动节点
-
clear_params=“true | false” (可选)
在启动前,删除节点的私有空间的所有参数
-
output=“log | screen” (可选)
日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
2.子级标签
-
env 环境变量设置
-
remap 重映射节点名称
-
rosparam 参数设置
-
param 参数设置
3. launch文件标签之include
1.属性
-
file=“$(find 包名)/xxx/xxx.launch”
要包含的文件路径
-
ns=“xxx” (可选)
在指定命名空间导入文件
2.子级标签
-
env 环境变量设置
-
arg 将参数传递给被包含的文件
4. launch文件标签之remap
用于话题重命名
属性
-
from=“xxx”
原始话题名称
-
to=“yyy”
目标名称
5. launch文件标签之param
属性
-
name=“命名空间/参数名”
参数名称,可以包含命名空间
-
value=“xxx” (可选)
定义参数值,如果此处省略,必须指定外部文件作为参数源
-
type=“str | int | double | bool | yaml” (可选)
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:
-
如果包含 ‘.’ 的数字解析未浮点型,否则为整型
-
“true” 和 “false” 是 bool 值(不区分大小写)
-
其他是字符串
-
6. launch文件标签之rosparam
属性
-
command=“load | dump | delete” (可选,默认 load)
加载、导出或删除参数
-
file=“$(find xxxxx)/xxx/yyy…”
加载或导出到的 yaml 文件
-
param=“参数名称”
-
ns=“命名空间” (可选)
7. launch文件标签之group
1.属性
-
ns=“名称空间” (可选)
-
clear_params=“true | false” (可选)
启动前,是否删除组名称空间的所有参数(慎用…此功能危险)
2.子级标签
- 除了launch 标签外的其他标签
8. launch文件标签之arg
1.属性
-
name=“参数名称”
-
default=“默认值” (可选)
-
value=“数值” (可选)
不可以与 default 并存
-
doc=“描述”
参数说明
2.子级标签
- 无
3.示例
-
launch文件传参语法实现,hello.lcaunch
<launch> <arg name="xxx" /> <param name="param" value="$(arg xxx)" /> </launch>
-
命令行调用launch传参
roslaunch hello.launch xxx:=值