ros中的launch文件注释

ROS中launch文件的写法及节点调用

  • 相机驱动中的usb_cam包的launch文件
  • 相机标定中usb_cam包的launch文件
  • launch文件
  • rosrun和roslaunch的不同
  • parameter说明

相机驱动中的usb_cam包的launch文件

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
 ns="usb_cam"/>
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

相机标定中usb_cam包的launch文件


<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
  <node name="image_proc" pkg="image_proc" type="image_proc" ns="usb_cam"/>
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

launch文件

开头和结尾:
launch文件必须以 作为开头和结束

   <launch>
    
    </launch>

A.node标签
任何一个launch文件的重点都是:节点(node)元素的集合。启动的每一个节点(node)都要有自己独一无二的名字(name)。如果node(节点)元素有children,就需要显式标签来定义,children比如是:remap 元素或者 param 元素。
例:

解释:

  1. output = “screen”
    在 node 元素中使用 output 属性: output=”screen”将输出显示在屏幕上

  2. respawn=”true”
    启动完所有请求启动的节点之后,roslaunch 监测每一个节点,让它们保持正常的运行状态。对于每一个节点,当它终止时,我们可以要求 roslaunch 重新启动它.

  3. required=”true”
    当一个必需的节点终止时,roslaunch会做出响应,终止其他所有的节点并退出它自己。
    注意: 由于 required 属性和 respawn 属性的含义,所以如果你给单个的一个节点同时设置了这2个属性,roslaunch 命令会抱怨。所以不要这样设置。

  4. launch-prefix = “command-prefix”
    roslaunch 命令 的一个潜在的缺点:相比我们原来对每个节点在单独的终端使用 rosrun 命令启动的做法,roslaunch 则是让所有的节点共享同一个终端。 那些只需要生产简单的日志消息文件而不需要终端(console)输入的节点是容易管理的,而那些依赖终端输入的节点,比如 turtle_teleop_key 节点,它可能要优先的保留在独立的终端上。
    在例子launch文件中,我们给 teleoperation 节点使用了这个属性:launch-prefix=”xterm -e”.因为这个属性,启动这个 node 元素的 rosrun 命令大致相当于:xterm -e rosrun turtlesim turtle_teleop_key.
    xterm 命令会开一个新的终端窗口。 -e 参数告诉 xterm :执行其命令行剩余部分(rosrun turtlesim turtle_teleop_key)。

  5. ns = “namespace”
    在例子launch文件中,使用这个属性创建了两个无关的 turtlesim 模拟器。
    turtlesim 话题名字(turtle1/cmd_vel、turtle1/color_sensor 和 turtle1/pose )被从全局命名空间移动 到 /sim1 和 /sim2 的单独命名空间里。

  6. args属性
    引数通常用来作为执行各节点或launch 档所需要的输入参数,换句话说,设定区域变数,通常需要使用者输入所需的数值,但也可以事先写好预设的数值。另外一种用法,是用引数作为一个逻辑判断,决定那些节点要执行,哪些不用。

  7. 呼叫节点

<node name="image_proc" pkg="image_proc" type="image_proc" ns="usb_cam"/>

参数及其应用

参数 用途
pkg 节点所在的包的名称
type 节点的实际名称
respawn/required 是当该节点由于不明原因停止执行的时候,会自动重新启动。而required比较霸道一点,当该节点停止执行的时候,会让整个launch 档都停止执行、关闭。
ns 名称空间,指明在哪一个工作区间(workspace)的时候执行该节点,当你必须在多个子类别的实体(instance)中执行同一个节点的时候会很用。
name 虽然也是指该节点的名称,不过你可以再另外帮这个节点取名字,那么该节点便会把原名给覆盖掉,以这个名称表示。你可以在执行时,用rqt或者 rosnode list, rosnode info等指令查看到。
  1. 注解

B.remap标签(重映射)
在launch文件中重新命名:使用 remap 元素:

<remap from="image" to="/usb_cam/image_raw"/>

如果这个 remap 是 launch 元素的一个child(子类),与 node 元素同一层级, 并在 launch 元素内的最顶层。那么这个 remapping 将会作用于后续所有的节点。

rosrun和roslaunch的不同

使用 roslaunch 命令 和 使用 rosrun 命令单独运行每个节点之间的重要区别
默认情况下,roslaunch 命令 从启动节点开始,标准输出信息会重定向到一个日志文件中,而不会像 rosrun 命令那样,将 log 信息显示在终端(console)上.
日志文件所在路径: ∼/.ros/log/run_id/node_name-number-stdout.log
Q: 如何将标准输出信息显示在终端(console)上?
A: 在 node 元素中使用 output 属性:
output=”screen”
带这个属性启动的节点会将标准输出信息显示在终端的窗口中,而不会保存在日志文件中。这也 解释 了为什么这个带有output=”screen”的节点(node) 的日志文件在上面日志文件列表中丢失的原因。
扩展: node 元素的 output 属性只能影响这个节点自己。除了 output 属性,我们可以使用 roslaunch命令行工具的 –screen 命令行选项强制性的在终端的窗口中显示所有节点的输出信息。

parameter说明

<param name="video_device" value="/dev/video0" />

参数名称 以及参数值。
group标签中的param标签的作用等同于rosparam set命令.
node标签中的param标签设置为该节点的子元素.

你可能感兴趣的:(ros)