在ROS中使用Launch文件打开时是否可以在节点之间切换?

时间:2017-05-16 08:18:13

标签: xml ros catkin

有两个不同的节点,其中一个用Python编写,另一个用C ++编写。他们基本上做同样的事情。让我们说他们用不同的方法找到香蕉,如中提琴或猪。所以,他们的名字是:

节点1:object_detector_hog_node

节点2:object_detector_viola_node

我想指定选择打开哪个节点的参数。可以这样做吗?

我知道在启动文件中无法使用if。此外,我不想打开两个节点并检查参数并杀死其中一个节点。

1 个答案:

答案 0 :(得分:4)

是的,这是可能的。对于这样的二进制选择,最简单的方法是使用bool参数:

<launch>
  <arg name="use_hog" default="true" />

  <group if="$(arg use_hog)">
    <node type="object_detector_hog_node" ... />
  </group>

  <group unless="$(arg use_hog)">
    <node type="object_detector_viola_node" ... />
  </group>
</launch>

启动时添加参数use_hog。使用hog run

roslaunch your_package object_detector.launch use_hog:=true

使用viola-jones运行

roslaunch your_package object_detector.launch use_hog:=false

您也可以省略默认值,然后在您不提供参数时会引发错误。

了解更多信息see the ROS wiki