ROS多用户视频延迟

时间:2018-02-14 04:23:17

标签: python ros

当多个节点订阅同一个视频主题时,我得到了延迟。

我正在使用近似时间同步器,从不同的相机收集多个图像,然后立即发布。虽然相机之间的时间安排可能是一个问题,但它不在这里,只有一个节点订阅时没有延迟。

camtop_sub = message_filters.Subscriber('cam1/usb_cam1/image_raw', Image)
camfront_sub = message_filters.Subscriber('cam2/usb_cam1/image_raw', Image)
ts_log = message_filters.ApproximateTimeSynchronizer([cam1_sub, cam2_sub], 10, 1)
ts_log.registerCallback(self.log_callback)

我的项目结构方式,我需要能够让多个节点检索最新的图像文件。

有关如何在没有延迟的情况下完成此任务的任何建议?现在大概是500毫秒。

我注意到其他人建议通过 rospy.Subscriber 类中的 buff_size 参数增加队列的缓冲区大小,但

没有此参数强> ApproximateTimeSynchronizer

2 个答案:

答案 0 :(得分:1)

我不太多使用ROS,但这是我的看法。

您可以指定您使用的相机吗?可能是相机驱动程序中的一些实现故障?您是否可能有一个订户从设备接口/缓存/管理图像馈送,而不是让需要实际图像馈送的其他节点订阅该节点?基本上是一个Pub / Sub广播公司。

我参与的一个项目是本地物联网摄像机视频分析。通常,相机驱动程序和操作系统内核的东西不能很好地处理广播。通常在驱动程序之外实现缓存/广播组件,就像我的案例中的Wowza Media流媒体一样。为了您的使用,您可以实现一些简单的流缓冲区并使其安全并发访问。

答案 1 :(得分:1)

我认为它的带宽问题。您可以尝试合并使用相同图像的节点。或者将图像处理代码作为库或类,并在捕获它的地方处理图像并仅发布结果,而不是图像。