在发布者和订阅者之间同步

时间:2018-08-29 23:29:11

标签: ros

我正在开发测试程序,该程序订阅了主程序发布的一个主题。主程序仅发布有关此主题的一条消息。现在,当发布者发布消息时,我的订阅者可能还没有活着,消息可能会丢失。一种避免它的方法是在主程序内部放置,直到numsubcribers不为零。但是我不能放在主程序中。我该如何实现?

1 个答案:

答案 0 :(得分:1)

因此,由于您说主程序仅发送一条消息,因此分配发布者时,这可能是latch参数的工作:

  

闩锁[可选]

     

在连接上启用“锁定”。锁定连接后,将保存最后发布的消息,并自动将其发送给以后连接的所有订户。这对于缓慢转换为静态数据(例如地图)很有用。请注意,如果在同一节点上实例化了同一主题上的多个发布者,则仅发送该节点上的最后发布的消息,而不是每个发布者在该单个主题上的最新发布的消息。

只需按照here所述为发布者提供参数,ROS就会在出现消息时处理传递给订阅者的消息:

...
bool latch = true;
ros::Publisher advertise(topic, latch)
...