每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令。当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦。那么有没有一种方式可以一次性启动所有节点呢?答案当然是肯定的。 启动文件(Launch File)便是ROS中一种同时启动多个节点的途径,还可以自动启动ROSMaster节点管理器,而且可以实现每个节点的各种配置,为多个节点的操作提供了很大便利。
首先下载本次教程代码,才能开始本次学习
git clone https://code.corvin.cn:3000/zhuo./catkin_ws.git
一、基本要素
首先我们来看一个简单的launch文件
1 | <launch> |
这是一个简单而完整的launch文件,采用XML的形式进行描述,包含一个根元素< launch>和两个节点元素< node>
roslaunch 属性
node pkg
pkg定义节点所在的功能包名称node type
type定义节点的可执行文件名称node - name
launch文件中node name=”name”,覆盖.cpp文件中的init初始化的node_ namenode - output
output = “screen” 日志存储在默认的文件夹中,会导致文件巨大,添加参数可以将日志打印出来,减少使用空间结点重生属性 node - respawn
立刻自动重启关闭的节点node,能够使重要节点异常退出的时候快速重启必要节点属性 node - required
若某节点没定义为 required 属性,若该结点异常退出时,其余所有节点都将推出
注意:respawn 与 required 不能够同时设置对节点设置参数 param
parameter是ROS系统运行中的参数,存储在参数服务器中。在launch文件中通过元素加载parameter;launch文件执行后,parameter就加载到ROS的参数服务器上了。每个活跃的节点都可以通过 ros::param::get()接口来获取parameter的值,用户也可以在终端中通过rosparam命令获得parameter的值。 的使用方法如下:
- 局部变量 argument 使用
argument是另外一个概念,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,和ROS节点内部的实现没有关系。 设置argument使用标签元素,语法如下:
- launch文件能够包含其他的launch文件
在复杂的系统当中,launch文件往往有很多,这些launch文件之间也会存在依赖关系。如果需要直接复用一个已有launch文件中的内容,可以使用< include>标签包含其他launch文件,这和C语言中的include几乎是一样的
创建一个launch文件
创建存放launch文件的目录
mkdir ~/catkin_ws/src/ros_test_pkg/launch
编写launch文件(将上面示例代码加入)
gedit start_test.launch
查看当前软件包的组成框架
tree ros_test_pkg/
启动launch 文件
启动launch文件命令,用法如下:
roslaunch 软件包名 launch文件名
![启动][3.png]
总而言之,launch是ROS框架中非常实用、灵活的功能,它类似于一种高级编程语言,可以帮助我们管理启动系统时的方方面面。在使用ROS的过程中,很多情况下我们并不需要编写大量代码,仅需要使用已有的功能包,编辑一下launch文件,就可以完成很多机器人功能。