1.launch文件功能
之前运行ROS节点都需要先使用roscore命令启动ROS Master,并且单独rosrun命令启动各个ROS节点,而使用launch文件可以大大地简化这些步骤,只需要一个roslaunch命令,就可以同时启动ROS Master和多个节点程序。
2.launch文件语法
2.1<launch>标签
<launch>是launch文件的文件标签,是必须要有的。其中<launch>表示文件的起始,</launch>表示文件的结束。
例如:1
2
3
4<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节点,其中包含了如下几个主要的属性。
(1)pkg:表示节点所在的功能包名称,使用方式如pkg = “tf_lidar_task”;
(2)type:表示节点的可执行文件名称,使用方式如type = “lidar_broadcaster”;
(3)name:表示该节点在ROS系统中运行时的节点名,与节点编程时ros::init(argc, argv, “robot_tf_publisher”)中命名的节点名是同一概念,如果两者不同,launch文件中定义的name将覆盖程序中命名的节点名,可理解为重命名。因为ROS中节点名称是唯一的,name的使用是为了重复利用节点,比如发布广播t1和发布广播t2都使用发布广播节点,但运行时名称不同。使用方式如name = “broadcaster_t1”;
(4)output:用于控制某个节点是否将日志信息打印在终端界面上,默认输出到日志文档,使用方式如output = “screen”;
(5)respawn:表示在该节点突然停止时,是否会自动重启,默认为false,使用方式如respawn = “true”;
(6)required:表示该节点是否必须要启动,当该节点终止时,launch文件中的其他节点也被终止,使用方式如required = “true”;
(7)ns:表示namespace(命名空间),为节点内的相对名称添加命名空间前缀,避免命名冲突,使用方式如ns = “foo”;
(8)args:表示节点需要的输入参数,类似于之前ROS服务编程中实现整数加法时rosrun命令后面所跟着的参数,使用方式为args = “10 20”;
2.3<param>标签
<param>用于设置和修改ROS系统运行中的单个参数,存储在参数服务器中,类似于修改变量,例如可以设置turtlesim海龟界面背景的RGB值。使用方式如:1
<param name="output_frame" value="odom"/>
其中,name是参数名,value是参数值。
2.4<rosparam>标签
<rosparam>用于加载参数文件中的多个参数,可以将参数文件中的所有参数都保存到参数服务器中。使用方式如:1
<rosparam file="params.yaml" command="load" ns="local_costmap" />
其中,command属性可以设置为加载command=”load”,或设置为卸载command=”delete”。
2.5<arg>标签
<arg>与<param>、<rosparam>虽然都用于参数设置,但1
<arg name="arg-name" value="arg-value" />
或1
<arg name="arg-name" value="$(arg arg-name)" />
其中name是参数名,value是参数值。另外还可以为参数设置默认值。1
<arg name="arg-name" default="1" />
2.6<remap>标签
<remap>表示重映射ROS计算图资源的命名,可近似理解为重命名,使用方式如:1
<remap from="/turtlebot/cmd_vel"to"/cmd_vel"/>
其中from为原命名,to为映射之后的命名。
2.7<include>标签
<include>用于包含其他launch文件,类似于C语言中的头文件包含。使用方式如:1
<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文件夹路径下打开一个新的终端,输入以下代码进行编译。1
$ catkin_make
3.3启动launch文件
在/ROS_ws路径下配置环境,再输入以下代码进行编译。1
$ roslaunch tf_lidar_task tf_lidar.launch
3.4节点通信可视化
打开一个新的终端,输入以下代码。1
$ rqt_graph
可以看到广播器已经开始发布TF变换关系到监听者节点,并且节点名也按照launch文件中重新命名。