如何在 python 中获取 ROS MSG 长度?

How to get ROS MSG length in python?

我有一个问题需要计算每个 ROS 主题消息的长度。

我修改了rostopic(/opt/ros/smart-ros/lib/python2.7/dist-packages/rostopic / __ init__.py):

Class CallbackEcho(object) ->
Def callback (self, data, callback_args, current_time = None):
    Print('message length =',sys.getsizeof(data)) #statics msg length

但是当消息包含向量或结构列表时,长度不正确。

请帮忙解决这个问题?

谢谢。

问题是sys.getsizeof的行为:

Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.

这意味着仅使用列表引用的大小来计算对象大小。

已经有几个问题与此有关:

  • How do I determine the size of an object in Python?
  • In-memory size of a Python structure

解决方案是使用Pympler and its module asizeof,它为所需的计算提供了一个函数:

Function asizeof calculates the combined (approximate) size of one or several Python objects in bytes

使用pip

安装包后

pip install pympler

并将其导入到您的代码中,例如

from pympler.asizeof import asizeof

您可以在回调中打印正确的对象大小,例如

print('Size: ' + str(asizeof(data)))