小编sr7*_*r71的帖子

ROS图像用户滞后

我有一个滞后的问题,一个rospy订阅者听图像消息.

概述:

我有一个rosbag将图像流式传输到5Hz的/ camera/image_raw.我还有一个image_view节点,用于显示图像以供参考.此image_view以5Hz显示它们.

在我的rospy订户(使用queue = 1初始化)中,我还显示图像(用于比较与image_view节点的延迟时间).订户随后进行了一些繁重的处理.

预期结果:

由于队列大小为1,用户应处理最新帧,同时跳过所有其他帧.一旦完成处理,它应该继续前进到下一个最新的帧.应该没有旧帧排队.这将导致一个波涛汹涌,但不是滞后的视频(低fps,但没有"延迟"wrt rosbag流,如果这是有道理的)

实际结果:

订阅者落后于已发布的流.具体来说,image_view节点以5Hz显示图像,并且订户似乎将所有图像排队并逐个处理它们,而不是仅仅抓取最新图像.延迟也随着时间的推移而增长.当我停止rosbag流时,订户继续处理队列中的图像(即使队列= 1).

请注意,如果我将订户更改为具有非常大的缓冲区大小(如下所示),则会生成预期的行为:

self.subscriber = rospy.Subscriber("/camera/image_raw", Image, self.callback,  queue_size = 1, buff_size=2**24)
Run Code Online (Sandbox Code Playgroud)

但是,这不是一个干净的解决方案.

在以下链接中也报告了此问题,我在其中找到了缓冲区大小解决方案.官方解释假设发布者可能实际上正在放慢速度,但事实并非如此,因为image_view订阅者以5Hz显示图像.

https://github.com/ros/ros_comm/issues/536,罗斯用户不是最新的,http://answers.ros.org/question/50112/unexpected-delay-in-rospy-subscriber/

任何帮助表示赞赏.谢谢!

码:

def callback(self, msg):
    print "Processing frame | Delay:%6.3f" % (rospy.Time.now() - msg.header.stamp).to_sec()
    orig_image = self.bridge.imgmsg_to_cv2(msg, "rgb8")
    if (self.is_image_show_on):
        bgr_image = cv2.cvtColor(orig_image, cv2.COLOR_RGB2BGR)
        cv2.imshow("Image window", bgr_image)
        cv2.waitKey(1)

    result = process(orig_image) #heavy processing task
    print result
Run Code Online (Sandbox Code Playgroud)

python opencv image subscriber ros

5
推荐指数
1
解决办法
1424
查看次数

标签 统计

image ×1

opencv ×1

python ×1

ros ×1

subscriber ×1