ROS launch的语法详析

roslaunch 是 ROS(Robot Operating System)中用于启动ROS节点和相关配置文件的工具。它使用XML格式的文件来描述如何启动一个或多个ROS节点以及它们的参数和命名空间。以下是roslaunch文件的基本结构和常见元素:

1. launch 文件结构

一个roslaunch文件通常以以下结构开始:

<launch>
    <!-- 启动命令和参数配置 -->
    <!-- 节点配置 -->
    <!-- 参数配置 -->
</launch>

2. <node> 元素

<node> 元素用于启动ROS节点。以下是一个<node> 元素的基本结构:

<node name="节点名称" pkg="节点包名" type="节点类型" args="节点参数" output="输出选项">
    <!-- 参数配置 -->
</node>
  • name: 节点的名称,必须唯一。
  • pkg: ROS软件包的名称,该软件包包含要启动的节点。
  • type: 要启动的节点类型,通常是可执行文件的名称。
  • args: 传递给节点的参数。可以是一个字符串,也可以包含参数列表。
  • output: 控制节点的输出方式,可以是 logscreenlogscreen 中的一个。

3. <param> 元素

<param> 元素用于设置ROS参数。以下是一个<param> 元素的基本结构:

<param name="参数名称" value="参数值" />
  • name: 参数的名称。
  • value: 参数的值。

4. 命名空间

你可以使用 group 元素来创建命名空间,以便在不同的节点中具有不同的参数命名空间。例如:

<group ns="my_namespace">
    <!-- 包含在 my_namespace 命名空间中的节点和参数 -->
</group>

5. ifunless 条件

roslaunch 支持条件语句,可以在特定条件下启动节点或设置参数。例如,你可以使用 <if><unless> 来检查是否存在某个ROS参数,并根据结果来执行不同的操作。

<param name="my_param" value="true" />

<node if="$(arg my_param)" name="node_if_true" pkg="my_package" type="my_node" />
<node unless="$(arg my_param)" name="node_unless_false" pkg="my_package" type="my_node" />

在上述示例中,如果参数 my_param 的值为 true,则启动 node_if_true 节点,否则启动 node_unless_false 节点。

6. 引用其他 launch 文件

你可以使用 include 元素来引用其他的 roslaunch 文件。这对于将启动配置分解为可重用的组件非常有用。例如:

<include file="$(find my_package)/launch/my_launch_file.launch" />

上述代码将包含另一个 my_launch_file.launch 文件的内容,从而使其成为当前 launch 文件的一部分。

7. 参数传递

你可以使用 arg 元素来传递参数值给 launch 文件。这些参数可以在节点和参数的定义中使用。例如:

<arg name="my_arg" default="default_value" />

<node name="my_node" pkg="my_package" type="my_node" args="$(arg my_arg)" />
<param name="my_param" value="$(arg my_arg)" />

上述示例中,arg 元素定义了一个名为 my_arg 的参数,并设置了默认值。然后,这个参数的值被用于节点的参数和参数的值。

下面是一个测试说明的例子

  1. 源内容
<launch>
    <node pkg="wheeltec_tracker_pkg" name="face_detector" type="face_detector.py" output="screen">
        <remap from="input_rgb_image" to="/usb_cam/image_raw" />
        <rosparam>
            haar_scaleFactor: 1.2
            haar_minNeighbors: 2
            haar_minSize: 40
            haar_maxSize: 60
        </rosparam>
        <param name="cascade_1" value="$(find wheeltec_tracker_pkg)/data/haarcascade_frontalface_alt.xml" />
        <param name="cascade_2" value="$(find wheeltec_tracker_pkg)/data/haarcascade_profileface.xml" />
    </node>
</launch>
  1. 添加注释的内容
<launch>
    <!-- 启动一个ROS节点 -->
    <node
        pkg="wheeltec_tracker_pkg"     <!-- 指定ROS软件包名称 -->
        name="face_detector"           <!-- 给节点起一个唯一的名称 -->
        type="face_detector.py"        <!-- 指定要启动的节点的可执行文件 -->
        output="screen">               <!-- 输出选项,将节点的输出显示在终端上 -->

        <!-- 重新映射节点的话题名称 -->
        <remap from="input_rgb_image" to="/usb_cam/image_raw" />

        <!-- 设置ROS参数,这些参数将传递给节点 -->
        <rosparam>
            <!-- 设置名为 haar_scaleFactor 的参数 -->
            haar_scaleFactor: 1.2

            <!-- 设置名为 haar_minNeighbors 的参数 -->
            haar_minNeighbors: 2

            <!-- 设置名为 haar_minSize 的参数 -->
            haar_minSize: 40

            <!-- 设置名为 haar_maxSize 的参数 -->
            haar_maxSize: 60
        </rosparam>

        <!-- 设置节点的参数,这些参数将传递给节点 -->
        <param name="cascade_1" value="$(find wheeltec_tracker_pkg)/data/haarcascade_frontalface_alt.xml" />
        <param name="cascade_2" value="$(find wheeltec_tracker_pkg)/data/haarcascade_profileface.xml" />
    </node>
</launch>

上述注释解释了roslaunch文件中的各个字段的作用:

  • <launch>: roslaunch文件的根元素,表示一个启动文件。

  • <node>: 启动一个ROS节点的元素,指定节点的名称、包名、可执行文件等。

  • pkg: 指定ROS软件包的名称,wheeltec_tracker_pkg 是要启动节点的软件包名称。

  • name: 为节点指定一个唯一的名称,这里是face_detector

  • type: 指定要启动的节点的可执行文件,这里是face_detector.py

  • output: 控制节点的输出方式,这里设置为screen,表示将节点的输出显示在终端上。

  • <remap>: 重新映射节点的话题名称,将input_rgb_image话题重新映射到/usb_cam/image_raw话题。

  • <rosparam>: 设置ROS参数,这些参数将传递给节点。在这里设置了一些名为haar_scaleFactorhaar_minNeighborshaar_minSizehaar_maxSize的参数,它们的值被指定为数字。

  • <param>: 设置节点的参数,这些参数将传递给节点。在这里设置了名为cascade_1cascade_2的参数,它们的值是节点包中的XML文件的路径。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值