ROS | launch启动文件的使用

1. launch文件功能

之前运行ROS节点都需要先使用roscore命令启动ROS Master,并且单独rosrun命令启动各个ROS节点,而使用launch文件可以大大地简化这些步骤,只需要一个roslaunch命令,就可以同时启动ROS Master和多个节点程序。

2. launch文件语法

2.1 <launch>标签

<launch>是launch文件的文件标签,是必须要有的。其中<launch>表示文件的起始,</launch>表示文件的结束。
例如:

<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
</launch>

2.2 <node>标签

<node>是节点标签,用来启动某个ROS节点,其中包含了如下几个主要的属性。

  • pkg:表示节点所在的功能包名称,使用方式如pkg = “tf_lidar_task”;
  • type:表示节点的可执行文件名称,使用方式如type = “lidar_broadcaster”;
  • name:表示该节点在ROS系统中运行时的节点名,与节点编程时ros::init(argc, argv, “robot_tf_publisher”)中命名的节点名是同一概念,如果两者不同,launch文件中定义的name将覆盖程序中命名的节点名,可理解为重命名。因为ROS中节点名称是唯一的,name的使用是为了重复利用节点,比如发布广播t1和发布广播t2都使用发布广播节点,但运行时名称不同。使用方式如name = “broadcaster_t1”;
  • output:用于控制某个节点是否将日志信息打印在终端界面上,默认输出到日志文档,使用方式如output = “screen”;
  • respawn:表示在该节点突然停止时,是否会自动重启,默认为false,使用方式如respawn = “true”;
  • required:表示该节点是否必须要启动,当该节点终止时,launch文件中的其他节点也被终止,使用方式如required = “true”;
  • ns:表示namespace(命名空间),为节点内的相对名称添加命名空间前缀,避免命名冲突,使用方式如ns = “foo”;
  • args:表示节点需要的输入参数,类似于之前ROS服务编程中实现整数加法时rosrun命令后面所跟着的参数,使用方式为args = “10 20”;

2.3 <param>标签

<param>用于设置和修改ROS系统运行中的单个参数,存储在参数服务器中,类似于修改变量,例如可以设置turtlesim海龟界面背景的RGB值。使用方式如:

<param name="output_frame" value="odom"/>

其中,name是参数名,value是参数值。

2.4 <rosparam>标签

<rosparam>用于加载参数文件中的多个参数,可以将参数文件中的所有参数都保存到参数服务器中。使用方式如:

<rosparam file="params.yaml" command="load" ns="local_costmap" />

其中,command属性可以设置为加载command=“load”,或设置为卸载command=“delete”。

2.5 <arg>标签

<arg>与<param>、<rosparam>虽然都用于参数设置,但<arg>的区别在于它表示launch文件内部的局部变量,存储在launch文件中并且仅限于launch文件中使用。使用方式如:

<arg name="arg-name" value="arg-value" />

<arg name="arg-name" value="$(arg arg-name)" />

其中name是参数名,value是参数值。另外还可以为参数设置默认值。

<arg name="arg-name" default="1" />

2.6 <remap>标签

<remap>表示重映射ROS计算图资源的命名,可近似理解为重命名,使用方式如:

<remap from="/turtlebot/cmd_vel"to"/cmd_vel"/>

其中from为原命名,to为映射之后的命名。

2.7 <include>标签

<include>用于包含其他launch文件,类似于C语言中的头文件包含。使用方式如:

<include file="$(dirname)/turtle.launch" />

其中file是包含的其他launch文件路径。

更多资料可参考:http://wiki.ros.org/roslaunch/XML

3. launch文件使用

3.1 创建launch文件

以TF变换的功能包为例,在tf_lidar_task工作空间中创建一个空文件夹,命名为launch。

在launch文件夹中创建一个空文件,命名为tf_lidar.launch。

3.2 编译launch文件

在/ROS_ws文件夹路径下打开一个新的终端,输入以下代码进行编译。

$ catkin_make

3.3 启动launch文件

在/ROS_ws路径下配置环境,再输入以下代码进行编译。

$ roslaunch tf_lidar_task tf_lidar.launch

3.4 节点通信可视化

打开一个新的终端,输入以下代码。

$ rqt_graph

可以看到广播器已经开始发布TF变换关系到监听者节点,并且节点名也按照launch文件中重新命名。