gpt4 book ai didi

Python (rospy) 到 C++ (roscpp) struct.unpack

转载 作者:行者123 更新时间:2023-11-30 02:38:03 25 4
gpt4 key购买 nike

我目前正在将 rospy IMU 驱动程序转换为 roscpp,但很难弄清楚这段代码的作用以及如何转换它。

def ReqConfiguration(self):
"""Ask for the current configuration of the MT device.
Assume the device is in Config state."""
try:
masterID, period, skipfactor, _, _, _, date, time, num, deviceID,\
length, mode, settings =\
struct.unpack('!IHHHHI8s8s32x32xHIHHI8x', config)
except struct.error:
raise MTException("could not parse configuration.")
conf = {'output-mode': mode,
'output-settings': settings,
'length': length,
'period': period,
'skipfactor': skipfactor,
'Master device ID': masterID,
'date': date,
'time': time,
'number of devices': num,
'device ID': deviceID}
return conf

我必须承认,我以前从未使用过 ros 和 python。这不是来自源代码的 1:1 代码,我删除了我认为我知道它们做什么的行,但尤其是 try-block 是我不明白的。我非常感谢帮助,因为我的时间很紧。

如果有人好奇(上下文原因):我必须翻译的文件是 mtdevice.py 、 mtnode.py 和 mtdef.py 并且可以通过谷歌搜索文件名 + 关键字 ROS IMU Driver 找到

非常感谢。

最佳答案

这段代码解压了C结构的字段,即masterID、period、skipfactor、_、_、_、date、time、num、deviceID、length、mode、settings,将它们存储在Python字典中并返回该字典作为调用结果。下划线是未使用的结构部分的占位符。

另请参阅:https://docs.python.org/2/library/struct.html ,例如有关格式字符串 ('!IHHHHI8s8s32x32xHIHHI8x') 的说明,它告诉解包函数结构的外观。

语法a, b, c, d = f()表示函数返回一个东西,在Python中叫做元组。通过将一个元组分配给多个变量,它被拆分成它的字段。

例子:

 t = (1, 2, 3, 4)

a, b, c, d = t

# At this point a == 1, b == 2, c == 3, d == 4

用 C++ 替换这段代码应该不会太难,因为 C++ 具有与 C 非常相似的结构。因此 requestConfiguration 的最简单的 C++ 实现就是返回该结构。如果您想更接近 Python 功能,您的函数可以将结构的字段放入 C++ STL 映射并返回它。格式字符串 + 链接指向的文档,告诉您结构中的数据类型以及位置。

请注意,它是 unpack 的第二个参数保存您的数据,第一个参数仅包含有关第二个参数的布局(格式)的信息,如链接中所述。第二个参数在 Python 中看起来像是一个字符串,但它实际上是一个 C 结构。第一个参数告诉 Python 在哪里可以找到该结构中的内容。

因此,如果您阅读有关格式字符串的文档,您可以找出第二个参数(C 结构)的布局。但也许你不需要。这取决于函数的调用者。它可能只需要普通的 C 结构。

根据您添加的评论,我了解到您的函数中的代码比您显示的要多。结构的字段被分配给类的属性。

如果您知道 C 结构(配置)的字段名称,那么您可以将它们直接分配给 C++ 类的属性。

// Pointer 'this' isn't needed but inserted for clarity

this->mode = config.mode;
this->settings = config.settings;
this->length = config.length;

我假设配置结构的字段名称确实是模式、设置、长度等,但您必须验证这一点。可能这个结构的布局是在一些 C 头文件(或文档)中声明的。

关于Python (rospy) 到 C++ (roscpp) struct.unpack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31163199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com