1 使用launch文件
Launch文件是ROS提供的,可以同时运行多个nodes的文件。Launch文件以一种特殊的XML格式编写,在ROS packages中使用广泛。
创建launch功能包
首先在工作空间src下面创建一个功能包
$catkin_cteate_pkg package_launch (里面有cmakelistx和packxml文件,无src文件)
然后再在package_launch文件夹里面新建一个launch文件夹,把.launch文件放在里面即可(其实launch文件只要考虑绝对路径就可以)

1.1 运行launch文件
$ roslaunch package_name launch_file_name
Eg: roslaunch turtlesim example.launch

(1)Tip1: rosrun只能运行一个nodes, roslaunch可以同时运行多个nodes.
Tip2: launch文件可以不被包含于package中。此时,只需指出该launch文件的绝对路径,即可运行。

$ roslaunch completely_path

Eg:$ roslaunch ~/opt/ros/indigo/share/turtlesim/launch/example.launch

Tip3: 为便于执行,每个node最好是相互独立的。

(2)详细显示(request verbosity)
$ roslaunch -v package_name launch_file_name

(3) 结束launch文件
ctrl+c

2 创建launch文件
(1) launch文件一般以.launch后缀作为文件名,放在package的launch文件夹下。最简单的launch文件可以仅包含几个nodes。

(2) Launch文件是XML文件,每个XML文件必须有一个root element。而launch文件的root element由一对launch 标签定义。



Launch文件中的其他elements必须都在这一对tags之间。
(3) launch文件的核心是一系列node elements,每个node element启动一个node。Node element看起来如下:

******<node
pkg=”package_name” type=”executable_name” name=”node_name”

/>******
Tip1: 最后的“/”是必不可少的。

Tip2: 也可以写成

如果该node中有其他tags,则必须使用这种形式。

(4) 一个node element包含三个必须的属性:pkg, type, name.

pkg和type属性指出ROS应该运行哪个pkg中的哪个node,注意:此处的type是可执行文件的名称,而name则是可以任意给出的,它覆盖了原有文件中ros::init指定的node name。

ros 创建一个新的话题 python ros怎么创建launch文件_XML


(5) 输出到控制台

用output属性, output=”screen”;这种方法仅显示一个node。
若显示所有nodes的输出,用–screen命令行。
$ roslaunch --screen package_name launch_file_name
如果正在运行的文件没有显示想要对输出,可以查看该node属性集中是否有 output=”screen”.
output=”screen” 表示在终端中会显示程序执行的信息,比如话题订阅与发布的相关消息

(5)group属性

<group ns="turtlesim1">
      <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>
<group ns="turtlesim2">
      <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
        </group>

在这里我们创建了两个节点分组并以’命名空间(namespace)’标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个组里面都使用相同的turtlesim节点并命名为’sim’。 这样可以让我们同时启动两个turtlesim模拟器而不会产生命名冲突。(当然如果直接用不同的命名也是可以的,比如一个叫sim_1,一个叫sim_2,这样也可以同时多次启动同一节点).

(6)roslaunch 修改参数 param rosparam

<launch>

	<param name="/turtle_number"   value="2"/>

    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<param name="turtle_name1"   value="Tom"/>
		// <param name>放在这里跟上面的区别是命名空间不一样
		<param name="turtle_name2"   value="Jerry"/>

		<rosparam file="$(find learning_launch)/config/param.yaml" command="load"/>
	</node>
	//<rosparam file="$(find learning_launch)表示查找功能包,config在功能包下面的文件夹

    <node pkg="turtlesim" type="turtle_teleop_key" name="turtle_teleop_key" output="screen"/>

</launch>
(7)launch文件的嵌套
```xml
<launch>

	<include file="$(find learning_launch)/launch/simple.launch" />
//include表示嵌套另外一个launch文件,启动此launch时同时启动另外一个launch
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">
		<remap from="/turtle1/cmd_vel" to="/cmd_vel"/>
	</node>
	//remap表示重映射  更改话题名.

</launch>
PS:对于启动py文件只要在type后面加上python文件的后缀.py