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