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

Posted

技术标签:

【中文标题】在 ROS 中使用 Launch 文件打开时是不是可以在节点之间切换?【英文标题】:Is it possible to switch between nodes while opening with Launch file in ROS?在 ROS 中使用 Launch 文件打开时是否可以在节点之间切换? 【发布时间】:2017-05-16 08:18:12 【问题描述】:

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

节点 1:object_detector_hog_node

节点 2:object_detector_viola_node

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

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

【问题讨论】:

【参考方案1】:

是的,这是可能的。对于这样的二元选择,最简单的方法是使用 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。

【讨论】:

你可能也可以直接在node标签中使用if/unless,那么你就不需要group了。使用group 的好处是你可以在里面做很多事情。

以上是关于在 ROS 中使用 Launch 文件打开时是不是可以在节点之间切换?的主要内容,如果未能解决你的问题,请参考以下文章

ros关闭launch

ROS-launch文件标签解读

4.2 ROS节点运行管理launch文件

(转)由浅到深理解ROS- launch启动文件的理解与编写

ROS系统 launch启动文件的使用方法

ROS从入门到精通系列-- ros launch