是否可以在 运行 时间停止或重启 ros 节点?

Is it possible to stop or restart a ros node at run time?

可不可以同时启动A、B、C三个节点,中间只停止A,然后重启停止的A? 我想知道是否可以使用动态重新配置动态更改停止和重新启动触发器,但我不知道如何停止和重新启动节点。 我使用 ROS 旋律。 谢谢!

ROS 旨在让所有节点持续 运行 直到关闭。尽管如此,还是有一些想法可以帮助您找到解决方法:

  • 您可以在代码中使用 system()。明智地使用它,因为在某些用例中使用此调用是 not recommended.
  • launch files will help you to starting and stopping nodes programmatically. Check roslauch API, more concretely the Node Arguments.
  • 至少对于 kill 有一个 xmlrpc shutdown 调用,这是 rosnode kill 使用的。发送 SIGINT 也可以,因为 ROS 安装了 SIGINT 处理程序。

您可以使用 ROS Launch 启动所有三个节点。

如果你想重启任何节点,那么你可以使用

respawn="true"

例如;启动文件:

<roslaunch>
  <node name="foo" pkg="package" type="node" respawn="true" />
</roslaunch>

您可以在以下链接中阅读更多相关信息:

http://wiki.ros.org/roslaunch/XML/node

https://answers.ros.org/question/38808/can-nodes-be-made-to-automatically-restart-on-segmentation-faults/

如果您希望代码在运行时启动和重新启动,那么您还可以订阅特定主题,相应地,您可以将该主题的数据发送到 start/stop/restart 节点和节点可以简单地在单独的线程中执行该操作。