我正在开发测试程序,该程序订阅了主程序发布的一个主题。主程序仅发布有关此主题的一条消息。现在,当发布者发布消息时,我的订阅者可能还没有活着,消息可能会丢失。一种避免它的方法是在主程序内部放置,直到numsubcribers不为零。但是我不能放在主程序中。我该如何实现?
答案 0 :(得分:1)
因此,由于您说主程序仅发送一条消息,因此分配发布者时,这可能是latch
参数的工作:
闩锁[可选]
在连接上启用“锁定”。锁定连接后,将保存最后发布的消息,并自动将其发送给以后连接的所有订户。这对于缓慢转换为静态数据(例如地图)很有用。请注意,如果在同一节点上实例化了同一主题上的多个发布者,则仅发送该节点上的最后发布的消息,而不是每个发布者在该单个主题上的最新发布的消息。
只需按照here所述为发布者提供参数,ROS就会在出现消息时处理传递给订阅者的消息:
...
bool latch = true;
ros::Publisher advertise(topic, latch)
...