如何以一种很好的方式订阅ROS中的两个主题(图像和边框分别发布)

时间:2019-04-28 16:47:38

标签: c++ ros

我目前正在建立用于对象检测的ROS节点。 它遵循以下管道:

  1. 图片已发布
  2. 发布的图像由神经网络节点订阅,该节点在其上执行对象检测,然后发布边界框列表。
  3. 现在,我想同时订阅这两个主题,并对检测到的边界框执行模板匹配。然后将结果发布。

问题在于图像在边界框之前发布,我需要将它们放回一起。

我的第一个想法是像this之类的东西,但是图像的发布比NN输出边界框的频率要高得多,因此它们并不能在一起。另外,我有四台摄像机发布同一主题,因此我还需要添加帧ID。

第二个想法是发布一条带有图像和边框的消息。这可能是最干净的版本,但是我不确定如何使用image_transport方法来做到这一点。

我正在使用Darknet的ROS实现: https://github.com/leggedrobotics/darknet_ros

有人可以帮我吗,如何正确实施一种安全可靠的方式来在一条消息中发布带有边框的图像?

谢谢!

1 个答案:

答案 0 :(得分:0)

ROS中的

message_filter软件包可以实现您想要的。

类似于初始化订阅者,您创建了一个消息过滤器订阅者,它可以接受来自不同主题的多个消息。消息过滤器回调函数为您提供了每个主题最匹配的消息。您可以选择ExactTime策略来匹配具有相同时间戳的消息,也可以选择roximateTime策略来使用自适应算法来匹配具有最接近时间戳的消息。

在您的情况下,我将使用roximatetime策略将您的低频检测与时间戳最接近的高频图像匹配。