Ros订阅者不是最新的

Sel*_*jwa 4 python opencv image subscriber ros

我已经为其中一个图像主题编写了一个ROS订阅者,并且我使用以下命令将缓冲区设置为1:

subscriber =rospy.Subscriber("/camera/rgb/image_mono/compressed",CompressedImage, callback,  queue_size=1)
Run Code Online (Sandbox Code Playgroud)

但是我的订户仍然落后.知道可能导致这种情况的原因吗?我是否正确设置了队列大小?

Cas*_*hew 7

我遇到了完全相同的问题(这不是问题的波动帧率,而是实际的滞后).当我要杀死任何图像来源发布时(rosbag,相机驱动程序等),我的节点仍然会处理~5-10帧甚至在源被杀死后(我确信我有queue_size=1)

这是我做的github问题,它已经解决了.事实证明,涉及多个队列(不仅仅是您将queue_size设置为1的队列).在我的情况下,默认值buff_size小于我的图像,因此我的节点没有足够快地处理它们,并且在某些队列中总是备份了许多图像.

TL; DR buff_size为您的订户增加,就像我在这里做的那样.它对我有用:)


Ste*_*fen 3

队列用于对传入消息进行排队。这意味着,如果您的回调处理时间比新消息到达的时间长,则仅queue size保留,其他消息不会由您的节点处理。

我建议在发布之前在发布者节点中打印一条消息,并在回调方法的顶部打印一条消息。然后你就可以准确测量ros处理你的消息所花费的时间。所有其他计时问题都可能是由您的回调方法引起的。