运行launch文件
打开终端输入
roslaunch package_name launch_file_name
以官网turtle为例分析:
<launch>
<group ns="turtlesim1">
<node pkg="turtlesim" name="sim" type="turtlesim_node"/>
</group>
<group ns="turtlesim2">
<node pkg="turtlesim" name="sim" type="turtlesim_node"/>
</group>
<node pkg="turtlesim" name="mimic" type="mimic">
<remap from="input" to="turtlesim1/turtle1"/>
<remap from="output" to="turtlesim2/turtle1"/>
</node>
</launch>
roswiki中运行了两个node
roslaunch 可以运行两个及以上的node,而且launch文件里每个node中变量name可重置rosinit中名称。而rosrun只能运行一个node。
(1) launch文件一般以.launch后缀作为文件名,放在package的launch文件夹下。最简单的launch文件可以仅包含几个nodes。
(2) Launch文件是XML文件,每个XML文件必须有一个root element。而launch文件的root element由一对launch 标签定义。
如
<launch>
..........
</launch>
(3) launch文件的核心是一系列node elements,每个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) node日志文件(log file)
运行roslaunch和rosrun运行单个节点的区别之一是,默认情况下,roslaunch运行的nodes的标准输出会重定向到log file,而不是控制台
(6) 输出到控制台
用output属性, output=”screen”;这种方法仅显示一个node。若显示所有nodes的输出,用–screen命令行。
roslaunch --screen package_name launch_file_name
如果正在运行的文件没有显示想要对输出,可以查看该node属性集中是否有 output=”screen”.
(7) 在独立的窗口运行各node
我们在各自的termin运行rosrun node_name;但是运行roslaunch时,所有的nodes共用一个相同的terminal,这对于那些需要从控制台输入的nodes很不方便。可以使用launch-prefix属性。
xterm 命令表示新建一个terminal; -e参数告诉xterm执行剩下的命令行。
当然,launch-prefix属性不仅仅限于xterm。它可用于调试(通过gdb或valgrind),或用于降低进程的执行顺序(通过nice).