如何在ROS中很好地订阅两个主题(图像和边界框分开发布)

How to subscribe to two topics in ROS in a good way (image and bounding boxes are published separately)

本文关键字:两个 图像 边界 开发 ROS 很好      更新时间:2023-10-16

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

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

问题是图像是在边界框之前发布的,我需要将它们重新放在一起。

我的第一个想法是这样的,但是图像的发布频率比 NN 输出边界框的频率要高得多,因此它们不适合在一起。此外,我有四个相机发布了关于同一主题的相机,所以我还需要包括帧 ID。

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

我正在将暗网的这种实现用于 ROS: https://github.com/leggedrobotics/darknet_ros

有人可以帮助我,如何正确实现一种安全可靠的方式来发布带有边界框的图像?

谢谢!

ROS中的message_filter包可以实现你想要的。

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

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