2

我正在为一个有四个轮子的设备实现一个控制节点。到目前为止,我有以下节点:

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 收到的最后一条消息继续移动车辆。首先,我也尝试ros::isShuttingDown()在 TALKER 中使用,以便向 LISTENER 发送最终的“停止”消息,但似乎一旦节点关闭,就无法进行通信。

因此,我正在寻找一种方法来检查 LISTENER 节点是否还活着(或者是否仍在接收新消息)。

任何人都知道如何查看节点(在本例中为 TALKER)是否还活着?或者有没有一种简单的方法来检测自收到最后一个 ROS 消息以来已经过了多长时间?

4

2 回答 2

2

看看债券包。我相信它完全符合您的需要。

于 2013-09-25T22:51:59.803 回答
1

发现了另一种有趣且已经内置的方式,包括“ros/network.h”:

// master.h:
....

/**
* \brief Retreives the currently-known list of nodes from the master
*/
ROSCPP_DECL bool getNodes(V_string& nodes);

....

但是,我没有弄清楚如何在另一个 cpp 文件中使用它......

于 2013-10-01T09:19:17.917 回答