如果尚未启动节点 运行

Launch node if not already running

在执行 roslaunch <pkg> <file>.launch 时,我希望在该文件中启动的所有节点只有在尚未 运行 时才启动。 我该怎么做呢? 如果不可能,是否至少可以为每个节点单独执行此操作? 如果有人有想法,那么如果您将该代码添加到我下面的示例 .launch 片段中,那就太好了。

<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <node pkg="rviz" type="rviz" name="rviz" />
</launch>

在通过 <include> 标签连接的启动文件中使用 <arg> 标签,您可以在顶部启动文件中设置变量并发送到其他包含的启动文件。然后,使用 <if><unless>,您可以启动一个节点或离开它。您可以在 ROS_Wiki.

中找到它的文档

在多个独立的启动文件中,情况略有不同,因为启动文件之间没有 link。您可以使用环境变量来复制结果。

不幸的是,正如所讨论的那样,这是不可能的 hereroslaunchrosrun 将始终 运行 具有所需名称的节点,这导致 roscore 将杀死具有相同名称的活动节点。 您可以使用 anon 标签来 运行 多个实例,名称总是不同,如 here 所述。 此行为的唯一例外是 roscore.xml 及其节点,如 here 所述。 从我的角度来看,当前唯一的解决方法是编写一个脚本,通过 rosnode list 检查所需的节点是否已经 运行ning 并根据结果,运行 你的节点与否.