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

cag*_*asi 2 xml ros catkin

有两个不同的节点,一个是用 Python 编写的,另一个是用 C++ 编写的。他们基本上都在做同样的事情。假设他们正在使用不同的方法(如 viola-jones 或 hog)寻找香蕉。所以,他们的名字是:

节点 1: object_detector_hog_node

节点 2: object_detector_viola_node

我想分配选择哪个节点将打开的参数。有可能做这样的事情吗?

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

lua*_*tor 8

是的,这是可能的。对于这样的二元选择,最容易使用 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>
Run Code Online (Sandbox Code Playgroud)

当您启动它时添加参数use_hog。使用生猪运行

roslaunch your_package object_detector.launch use_hog:=true
Run Code Online (Sandbox Code Playgroud)

使用 viola-jones 运行

roslaunch your_package object_detector.launch use_hog:=false
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参阅 ROS 维基