Launch 文件
1 使用launch文件
1.1 运行launch文件
$ roslaunch package_namelaunch_file_name
Eg: roslaunchturtlesim example.launch
(1)Tip1: rosrun只能运行一个nodes, roslaunch可以同时运行多个nodes.
Tip2: launch文件可以不被包含于package中。此时,只需指出该launch文件的绝对路径,即可运行。
$ roslaunchcompletely_path
Eg:$ roslaunch~/opt/ros/indigo/share/turtlesim/launch/example.launch
Tip3: 为便于执行,每个node最好是相互独立的。
(2)详细显示(requestverbosity)
$ roslaunch -vpackage_name launch_file_name
(3) 结束launch文件
ctrl+c
2 创建launch文件
(1) launch文件一般以.launch后缀作为文件名,放在package的launch文件夹下。最简单的launch文件可以仅包含几个nodes。
(2) Launch文件是XML文件,每个XML文件必须有一个root element。而launch文件的rootelement由一对launch 标签定义。
<launch>
...
</launch>
Launch文件中的其他elements必须都在这一对tags之间。
(3) launch文件的核心是一系列nodeelements,每个node element启动一个node。Node element看起来如下:
<node
pkg=”package_name” type=”executable_name”name=”node_name”
/>
Tip1: 最后的“/”是必不可少的。
Tip2: 也可以写成<node pkg=”..” type=”...” name=”...”></node>
如果该node中有其他tags,则必须使用这种形式。
(4) 一个node element包含三个必须的属性:pkg, type, name.
pkg和type属性指出ROS应该运行哪个pkg中的哪个node,注意:此处的type是可执行文件的名称,而name则是可以任意给出的,它覆盖了原有文件中ros::init指定的node name。
(5) 使用匿名(anonymousname)
name=”$(anon base_name)”
(6) node 日志文件(log file)
运行roslaunch和用rosrun运行单个节点的区别之一是,默认情况下,roslaunch运行的nodes的标准输出会重定向到logfile,不显示在控制台。 ??????????????
该日志文件的位置和名称如下:
~/.ros/log/run_id/node_name-number-stdout.log
其中,run_id是master启动后生成的特殊标识符,number是表示nodes数量的整数。如,turtlesim-1-stdout.log;teleop_key-3-stdout.log.
(7) 输出到控制台
用output属性, output=”screen”;这种方法仅显示一个node。
若显示所有nodes的输出,用--screen命令行。
$ roslaunch--screen package_name launch_file_name
如果正在运行的文件没有显示想要对输出,可以查看该node属性集中是否有 output=”screen”.
(8) 要求重生(requestrespawning)
开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。
respawn=”true”
(10) 必需的nodes
required属性与respawn相反,不能同时对同一个node使用。当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。所以如果你给单个的一个节点同时设置了这2个属性,roslaunch 命令会抱怨
required=”true”
当一个required node终止后,所有其他的nodes都会终止,并退出。这种命令有时很有用。比如,当一个很重要的node失败后,整个会话都会被扔掉,那些加上了respawn属性的nodes也会停止。
(11) 在独立的窗口运行各nodes
我们在各自的termin运行rosrun node_name;但是运行roslaunch时,所有的nodes