为了理解托管式节点,让我们从一个简单的问题陈述开始。
假设您正在处理一个具有 5 个节点的 ROS 项目,其中一个节点用于从相机获取图像。
我们通常做的是,我们用发布者为相机创建一个普通节点。一旦此节点启动,它将加载设备驱动程序,配置相机并开始发布图像。
但是,如果我们想对这个节点有更多的控制呢?
假设节点已启动,但我们希望确定何时加载设备驱动程序、何时启动相机、何时开始和结束发布、何时取消配置相机。我们甚至希望控制发布 — 我们选择在运行时暂停和恢复发布。
一个普通的ROS节点在这里不足(至少没有我们在内部保存状态)。
但是看哪!这就是托管(生命周期)节点所启用的 — 它抽象了此控件,我们需要做的就是向它发送一个信号,说明我们希望节点在运行过程中的任何时候执行的操作。
怎么会这样?
让我们用一些例子来回答这个问题——
这是我们在学习 ROS 1/ROS 2 基础知识时看到的常见听众-说话者示例。
一旦这些节点启动,说话者节点将发布消息,侦听器节点将接收它们。
但请注意,默认情况下,我们对说话者节点没有运行时控制。一旦它开始发布,它就是一匹野生种马
现在让我们看看基于托管节点的谈话者如何为我们提供更多控制权,这就是我们在 ROS 2 中使用托管节点的原因。
这是我们基于托管节点的侦听者-说话者示例,其中说话者发布,听众接收消息。像往常一样,对吧?
但这里有一个问题 — 我们可以在运行时使用服务客户端节点控制说话者节点(或者我们现在称之为生命周期说话者节点)。让我们更深入地了解——
我们脑子里有这个概念。现在怎么办?
我们将在 ROS 2 中从头开始编写上面显示C++的示例。理想情况下,我们会在这里这样做。但那将是一个冗长的帖子,解释不理想。所以我用实时编码在托管节点上制作了一个 2 小时的视频。