launch文件:通过XML文件实现多节点配置和启动
一、launch文件语法
launch文件的根节点采用<launch>
标签定义,节点采用<node>标签定义
。
<node>
标签用于启动节点<node pkg="package-name" type="executeble-name" name="node-name" />
- pkg:节点所在的功能包名称
- type:节点的可执行文件名称
- name:节点运行时名称
- output:运行信息输出位置,如输出至屏幕:
output="screen"
- respawn required ns args
<param>
:标签用于启动运行中的参数:<param name="output_frame" value="odom"/>
’
- name 参数名
- value参数值
<rosparam>
加载参数文件中的多个参数,存放在参数服务器中:<rosparam file="params.yaml" command="load" ns="params"/>
<arg>
launch文件内部的局部变量,仅限于launch文件使用<arg name>="arg-name" default="arg-value/>"
- name:参数名
- value:参数值
调用: <param name="foo" value="$(arg arg-name)" />
<node name="node" pkg="package" type="type" args=$(arg arg-name)"/>
<ramap>
重映射ROS计算图资源的命名。<remap from "turtlebot/cmd_vel" to="/cmd_vel"/>
- from +待映射的名称
- to +映射后的名称
<include>
包含其他launch文件。<include file="$(dirname)/other.launch"/>
- file:包含的其他launch文件路径
更多标签可以参考官方文档:http://wiki.ros.org/roslaunch/XML
如:
<launch>
<node pkg="turtlesim" name="sim1" type="turtlesim_node"/>
<node pkg="turtlesim" name="sim2" type="turtlesim_node"/>
</launch>
二、例子
先创建一个功能包:catkin_create_pkg learning_launch
,
├── CMakeLists.txt └── package.xml 0 directories, 2 files
在功能包里创建一个名为launch的文件夹,方便管理这些launch文件。
2.1 运行发布者和接受者
在launch文件夹下创建一个名为simple.launch的文件,内容如下:
<launch>
<node pkg="selfmsg" type="pub" name="talker" output="screen"/>
<node pkg="selfmsg" type="sub" name="listener" output="screen"/>
</launch>
返回工作空间根目录,然后编译它catkin_make
(其实没有编译过程,似乎是让ros知道这个launch文件的存在)
运行ok!再也不用开启两个终端了!对了rosmaster也会自动帮你运行,无需自己键入roscore
2.2 启动模拟乌龟!
新建一个名为turtlesim_parameter_config.launch
,内容为:
<launch>
<param name="/turtle_number" value="2"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<param name="turtle_name1" value="Tom"/>
<param name="turtle_name2" value="Jerry"/>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
</node>
<node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>
</launch>
<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
中$(find learning_launch)
是让ROS查找名为learning_launch
的功能包路径,在这个路径下的config文件夹中的para.yaml。
新建一个文件夹名字config,然后往param.yaml中写入(C前面是两个空格):
A: 123
B: "Hello"
group:
C: 456
D: "789"
运行roslaunch learning_launch turtlesim_parameter_config.launch
,一切顺利:
查看一下参数有没有设置、加载成功,rosparam list
/rosdistro /roslaunch/uris/host_room__42341 /rosversion /run_id /turtle_number /turtlesim_node/A /turtlesim_node/B /turtlesim_node/background_b /turtlesim_node/background_g /turtlesim_node/background_r /turtlesim_node/group/C /turtlesim_node/group/D /turtlesim_node/turtle_name1 /turtlesim_node/turtle_name2
查看/turtle_number
的变量值:rosparam get /turtle_number
2.3 启动一个复杂的应用
新建一个文件名为:start_tf_demo_c++.launch的launch文件,其内容如下:
<launch>
<!-- Turtlesim Node -->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="telep" output="screen"/>
<node pkg="tfbroadcast_test" type="broadcast" args="/turtle1" name="turtle1_tf_broadcaster"/>
<node pkg="tfbroadcast_test" type="broadcast" args="/turtle2" name="turtle2_tf_broadcaster"/>
<node pkg="tfbroadcast_test" type="tf_listerner" name="listener"/>
</launch>
上一讲启动的时候相当复杂,启动了非常多的终端,本节以后我们可以通过编写launch来启动它:
roslaunch learning_launch start_tf_demo_c++.launch