如何在ROS中很好地订阅两个主题(图像和边界框分开发布)
How to subscribe to two topics in ROS in a good way (image and bounding boxes are published separately)
我目前正在构建一个用于对象检测的 ROS 节点。 它遵循以下管道:
- 映像已发布
- 已发布的图像由神经网络节点订阅,该节点对其运行对象检测,然后发布边界框列表。
- 现在我想订阅这两个主题,并对检测到的边界框执行模板匹配。然后发布结果。
问题是图像是在边界框之前发布的,我需要将它们重新放在一起。
我的第一个想法是这样的,但是图像的发布频率比 NN 输出边界框的频率要高得多,因此它们不适合在一起。此外,我有四个相机发布了关于同一主题的相机,所以我还需要包括帧 ID。
第二个想法是发布一条带有图像和边界框的消息。这可能是最干净的版本,但我不确定如何使用image_transport方法做到这一点。
我正在将暗网的这种实现用于 ROS: https://github.com/leggedrobotics/darknet_ros
有人可以帮助我,如何正确实现一种安全可靠的方式来发布带有边界框的图像?
谢谢!
ROS中的message_filter包可以实现你想要的。
与初始化订阅服务器类似,您可以创建一个消息过滤器订阅者,该订阅者可以接受来自不同主题的多条消息。 消息过滤器回调函数为您提供来自每个主题的最佳匹配消息。您可以选择 ExactTime 策略来匹配具有相同时间戳的消息,也可以选择 ApproximateTime 策略,其中自适应算法用于匹配具有最接近时间戳的消息。
在您的情况下,我会使用 ApproxTime 策略将您的低频检测与最接近的时间戳高频图像相匹配。
相关文章:
- SDL GPU 为什么将两个图像分成两个单独的循环更快?
- 如何快速创建一组覆盖两个图像的图像
- 如何使用mingw64 gcc/g 比较两个图像
- OPENCV:如何使用5点算法从来自不同相机的两个图像之间的特征匹配来计算必需矩阵
- 在计算机视觉中减去两个图像
- ITK - 如何合并两个图像
- 从两个图像转换的OpenCV
- 将两个图像附加到 FBO 以进行 MRT 渲染
- 如何区分具有对象坐标的两个图像
- OpenCV Mahalanobis函数,用于计算两个图像之间的距离
- 将两个图像堆栈的非电源加载到 3D 纹理 OpenGL C++
- 计算两个图像的 MSE
- OpenCV:快速量化两个图像之间的差异
- 使用 lerp 在两个图像之间执行线性插值
- 在 OpenCV / C++ 中对应两个图像之间的值
- 如何在 Matlab/ C++ 中组合具有不同增益的两个图像
- 如何使用 OpenCV 比较存储在文件中的两个图像
- 如何找出两个图像之间的对象差异
- 如何比较比较两个图像的轮廓
- 使用OpenCV的C++中两个图像的元素最小值