launch启动文件的作用:避免你多次在linux的命令行进行输入,这样很麻烦,我们可以使用launch启动文件把这些命令行集成起来,这样我们只执行launch启动文件就可以了。
launch启动文件作用的官方语言:通过XML文件实现多节点的配置和启动(亦可自动启动ROS Master)
一、Launch文件语法
二、launch启动文件应用示例
首先我们需要创建一个learning_launch的一个功能包,如下图所示。创建完毕功能包之后需要我们在功能包下面建立一个叫launch的文件夹,以用来存放我们的.launch文件。
2.1应用示例
把古月的simple.launch拷贝到launch文件夹下面。
然后编译、执行simple.launch
catkin_make
source devel/setup.bash
roslaunch learning_launch simple.launch
效果如下:
其中,simple.launch文件内容如下:
<launch>
<node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />
<node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>
2.2应用示例
这个示例的目的是:设置参数。
把古月的turtlesim_parameter_config.launch拷贝到launch文件夹下面,并且把
ROS入门21讲课件&源码\代码\learning_launch\config中的这个config文件夹拷贝到linux中的learning_launch文件夹下。
然后编译、执行simple.launch
catkin_make
source devel/setup.bash
roslaunch learning_launch turtlesim_parameter_config.launch
然后rosparam list查看查看参数,发现出现了/turtlesim_node/A,/turtlesim_node/group/C和/turtlesim_node/turtle_name1等参数
本例的config文件夹下的param.yaml内容如下:
A: 123
B: "hello"
group:
C: 456
D: "hello"
本例的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>
2.3应用示例
这个示例的目的是:两个海龟跟随的示例,即上一讲《tf坐标系广播与监听的编程实现》我们需要在命令行输入的命令太多了,如果用launch文件就会简便很多。
把start_tf_demo_c++.launch文件(注意,此文件对应着C++程序)拷贝到launch文件夹里,并执行:
roslaunch learning_launch start_tf_demo_c++.launch
start_tf_demo_c++.launch文件(C++版本)如下:
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />
<node pkg="learning_tf" type="turtle_tf_listener" name="listener" />
</launch>
start_tf_demo_py.launch(python版本)文件
<launch>
<!-- Turtlesim Node-->
<node pkg="turtlesim" type="turtlesim_node" name="sim"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
<node name="turtle1_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
<param name="turtle" type="string" value="turtle1" />
</node>
<node name="turtle2_tf_broadcaster" pkg="learning_tf" type="turtle_tf_broadcaster.py">
<param name="turtle" type="string" value="turtle2" />
</node>
<node pkg="learning_tf" type="turtle_tf_listener.py" name="listener" />
</launch>
2.4应用示例
本示例是基于示例一的simple.launch的。本示例的目的是给/turtle1/cmd_vel改名为/cmd_vel。
执行turtlesim_remap.launch文件:
验证/turtle1/cmd_vel已经改名为了/cmd_vel:
发现/cmd_vel启动用了,即小海龟向右移动了一点距离。
turtlesim_remap.launch文件如下:
<launch>
<include file="$(find learning_launch)/launch/simple.launch" />
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
</node>
</launch>