【问题标题】:ROS multiple subscriber video delayROS 多用户视频延迟
【发布时间】:2018-07-24 13:55:36
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您认为增加 buff_size 参数会起作用,您可以在 message_filters.Subscriber 中将其作为 kwarg 传递。
  • @MisaelAlarcon 我试过了,但没有运气:(

标签: python ros


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我很少使用 ROS,但这是我的看法。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 2020-05-02
      相关资源
      最近更新 更多