ROS2入门教程-daemon简介
ROS2入门教程-daemon简介
说明:
- 介绍ros2的daemon
- ROS 2 daemon是一个守护进程作用与 master 在 ROS 1 中的作用相同。但是,与 ROS 1 不同,它不是必需的,而是一种优化。
- ROS 2 节点可以在没有它的情况下运行,这与 ROS 1 节点在没有主节点的情况下无法运行不同。
原理:
DDS(ROS 2 在其默认配置中使用的底层通信中间件)有一个发现协议。这用于为节点提供一种分散的方式来找到彼此,而不是像 ROS 1 那样使用主节点。它工作得很好,但它也比使用主节点的方法花费更长的时间,因为每个启动的新节点都必须发送广播寻找其他节点并等待响应进来,以及从其他节点收集 hello可能随时间到达的节点。结果是知道其他节点在网络上的存在和位置不再是单一请求的事情,建立知识需要时间。如果您涉及更复杂的网络,则该时间会更长。也很难知道您何时找到了当前存在的所有节点。
对于想要启动、快速执行某些任务然后关闭的节点来说,这是一个重大缺陷。这类节点的一个很好的例子是 ros2 topic pub 创建的短期节点,用于在您运行该命令时发送一些数据。您不希望它在执行您要求的操作之前等待 30 秒收集节点问候广播。你可以减少它等待的时间,但是你等待的时间越短,它找到的现有节点图就越少,这意味着你的 ros2 主题发布数据可能不会到达实际监听该主题的每个节点。
解决方案是 ROS 2 守护进程。这是一个整天坐着的节点,只是监听发现协议流量并记录哪些节点是活动的以及它们在哪里。然后,当一个新节点想知道其他节点在哪里时,它可以绕过自己的 DDS 发现过程,并联系已知端口上的 ROS 2 守护进程并询问它的图形信息。
这个方案的好处是新节点仍然执行其标准的 DDS 发现过程,所以如果 ROS 2 守护进程不存在,那么它仍然能够找到其他新节点并正常运行。这与 ROS 1 有很大不同,如果主节点不存在,您的节点将无法运行。类似地,如果新节点在 ROS 2 守护进程之后不久启动,那么守护进程将不会缓存太多关于现有节点的信息。然而,在这种情况下,新节点仍然可以从其 DDS 发现过程中找到丢失的信息,因此它对于该潜在问题也是稳健的。这与 ROS 1 不同,在 ROS 1 中,如果您在 master 死后重新启动它,任何新节点都会运行,但它们无法找到在 master 重新启动之前存在的节点。
演示:
- 启动daemon
ros2 daemon start
- 启动之后, 节点能缩短发现对方的时间
- 查看状态
ros2 daemon status
- 停止daemon
ros2 daemon stop
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号