在 ROS 中使用 Launch 文件打开时是否可以在节点之间切换?
Is it possible to switch between nodes while opening with Launch file in ROS?
有两个不同的节点,其中一个是用 Python 编写的,另一个是用 C++ 编写的。他们基本上在做同样的事情。假设他们正在使用不同的方法(如 viola-jones 或 hog)寻找香蕉。所以,他们的名字是:
节点 1:object_detector_hog_node
节点 2:object_detector_viola_node
我想分配用于选择打开哪个节点的参数。有可能做这样的事情吗?
我知道无法在启动文件中使用 if。另外,我不想打开两个节点并检查参数并杀死其中一个节点。
是的,这是可能的。对于这样的二进制选择,最简单的方法是使用 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 运行
roslaunch your_package object_detector.launch use_hog:=true
使用中提琴琼斯 运行
roslaunch your_package object_detector.launch use_hog:=false
你也可以省略默认值,当你不提供参数时会报错。
更多信息see the ROS wiki。
有两个不同的节点,其中一个是用 Python 编写的,另一个是用 C++ 编写的。他们基本上在做同样的事情。假设他们正在使用不同的方法(如 viola-jones 或 hog)寻找香蕉。所以,他们的名字是:
节点 1:object_detector_hog_node
节点 2:object_detector_viola_node
我想分配用于选择打开哪个节点的参数。有可能做这样的事情吗?
我知道无法在启动文件中使用 if。另外,我不想打开两个节点并检查参数并杀死其中一个节点。
是的,这是可能的。对于这样的二进制选择,最简单的方法是使用 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 运行
roslaunch your_package object_detector.launch use_hog:=true
使用中提琴琼斯 运行
roslaunch your_package object_detector.launch use_hog:=false
你也可以省略默认值,当你不提供参数时会报错。
更多信息see the ROS wiki。