python 显示图片然后延时,python – 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)

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

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

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

码:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值