ROS中的launch文件是一种XML格式的配置文件,主要用于同时启动和管理多个节点。这些节点可能提供一整套功能,例如机器人的各种传感器和执行器的驱动程序。
一个基本的launch文件不仅包括需要启动的节点信息,还可能包含参数、话题和服务等信息。这使得我们可以灵活地控制和配置每个节点的行为。
以下是对ROS节点运行管理launch文件的详细介绍和基本用法:
1、创建launch文件:
在launch目录下,创建一个新的XML文件,
例如:my_launch_file.launch。
XML文件必须包含一个根元素,launch文件中的根元素采用<launch>标签定义,文件中的其他内容都必须包含在这个标签中
<launch>
……
</launch>
2、launch文件的基本结构:
一个基本的launch文件通常包含以下元素:
?<launch>:这是整个launch文件的根元素。
?<node>:定义一个要启动的ROS节点,包括节点的可执行文件、参数和其他设置。
?<param>:在参数服务器上设置或重置参数。
?<arg>:定义命令行参数,可以在运行时通过roslaunch命令传入。
?<include>:包含其他launch文件,用于模块化和复用。
3、启动节点:
使用<node>标签来启动一个ROS节点。
语法如下:
<node pkg=”package-name”?type=”executable-name”?name=”node-name”?/>
在启动文件中,启动一个节点需要三个属性:pkg、type和name。
其中pkg定义节点所在的功能包名称,type定义节点的可执行文件名称,这两个属性等同于在终端中使用rosrun命令执行节点时的输入参数。
name属性用来定义节点运行的名称,将覆盖节点中init()赋予节点的名称。
这是三个最常用的属性,在某些情况下,还有可能用到以下属性:
output="screen":将节点的标准输出打印到终端屏幕,默认输出为日志文档。
respawn="true":复位属性,该节点停止时,会自动重启,默认为false。
required="true":必要节点,当该节点终止时,launch文件中的其他节点也被终止。
ns="namespace":命名空间,为节点内的相对名称添加命名空间前缀。
args = "arguments": 节点需要的输入参数。
4、设置参数:
为了方便设置和修改,launch文件支持参数设置的功能,类似于编程语言中的变量声明。关于参数设置的标签元素有两个:<param> 和<arg>,一个代表parameter,另一个代表argument。这两个标签元素"参数"的意义是完全不同的。
(1)<param>
parameter是ROS系统运行中的参数,存储在参数服务器中。在launch文件中通过<param> 元素加载parameter;launch文件执行后,parameter就加载到ROS的参数服务器上了。每个活跃的节点都可以通过 ros::param::get()接口来获取parameter的值,用户也可以在终端中通过 rosparam 命令获得 parameter的值。
<param>标签用于在ROS的参数服务器上设置或重置参数。参数服务器是一个全局的数据存储服务,所有节点都可以访问和修改其中的参数。
<param>的使用方法如下:
<param name="output_frame" value="odom"/>
运行launch文件后,output_frame这个parameter的值就设置为odom,并且加载到ROS 参数服务器上了。但是在很多复杂的系统中参数的数量很多,如果这样一个一个地设置会非常麻烦,ROS也为我们提供了另外一种类似的参数(<rosparam>)加载方式:
<rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml”command="load" ns="local_costmap" />
<rosparam>可以将一个YAML?格式文件中的参数全部加载到ROS参数服务器中,需要设置command属性为"load",还可以选择设置命名空间"ns"。
(2)<arg>
argument是另外一个概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,与ROS节点内部的实现没有关系。
用于在launch文件中定义命令行参数。这些参数可以在运行时通过roslaunch命令传入,
<arg>标签用于设置节点运行时的参数,这些参数只能在对应的节点内部使用。
语法如下:
<launch>
??...
??<node name="node_name" pkg="package_name" type="executable_name">
????<arg name="parameter_name" default="default_value"/>
????...
??</node>
??...
</launch>
????其中,parameter_name 是要设置的参数名称,default_value 是参数的默认值。如果运行launch文件时没有提供该参数的值,将使用默认值。
5、运行launch文件:
使用roslaunch命令运行launch文件:
例如:roslaunch my_package my_launch_file.launch [args]
[args]是可选的,可以用来传入命令行参数。