【发布时间】:2013-09-29 17:11:18
【问题描述】:
我正在为一个有四个轮子的设备实现一个控制节点。到目前为止,我有以下节点:
TALKER:
--Publishes messages for movement of vehicle
LISTENER:
--Listens to messages for movement of vehicle and controls vehicle directly
这两个工作之间的通信,我唯一的问题是如果其中一个关闭,以防止车辆不受控制的移动,该怎么办。 ros::isShuttingDown() 调用 LISTENER 以便它检测到它何时将被杀死。
但是,如果 TALKER 关闭,LISTENER 会根据从 TALKER 收到的最后一条消息继续移动车辆。首先,我尝试在 TALKER 中使用ros::isShuttingDown(),以便向 LISTENER 发送最终的“停止”消息,但似乎一旦节点关闭,就无法进行通信。
因此,我正在寻找一种方法来检查 LISTENER 节点是否还活着(或者是否仍在接收新消息)。
任何人知道如何查看节点(在本例中为 TALKER)是否还活着?或者有没有一种简单的方法可以检测自收到最后一个 ROS 消息以来已经过了多长时间?
【问题讨论】:
-
回到我刚开始我的机器人之旅时的一个老问题很有趣。对于任何偶然发现这个问题的人:这里的正确答案是重写 LISTENER 以便它检测过时的消息并在来自 TALKER 的消息停止进入 X 秒后停止移动车辆。节点是独立的程序,应该有相应的结构。
标签: communication nodes messages ros