我正在为具有四个轮子的设备实现一个控制节点。到目前为止,我有以下节点:
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发送最终的“停止”消息,但似乎一旦节点关闭,就无法进行通信。
因此,如果节点TALKER仍处于活动状态(或者仍在接收新消息),我正在寻找一种检查LISTENER内部的方法。
有关如何查看节点(在本例中为TALKER)是否仍然存在的任何想法?或者是否有一种简单的方法可以检测自收到最后一条ROS消息以来已经过了多长时间?
答案 0 :(得分:1)
查看bond包。我相信它完全符合你的需要。
答案 1 :(得分:0)
找到另一种有趣且已经内置的方式,包括“ros / network.h”:
// master.h:
....
/**
* \brief Retreives the currently-known list of nodes from the master
*/
ROSCPP_DECL bool getNodes(V_string& nodes);
....
但是,我没有弄明白如何在另一个cpp文件中使用它...