C++ 将Protobuf转换为具有类似功能的ROS消息
我最近继承了一个利用MOOS和Protobuf消息的大型代码库 在我的项目负责人的要求下,我将其移植到专门使用ROS的地方,使用ROS消息代替protobuf。代码库严重依赖于使用protobuf功能,如枚举器min/max、从变量字段中提取字符串、->has_variable()函数、->isValid()等 到目前为止,我只能从wiki上找到非常基本的ROS消息功能 有没有“黑客”或类似的东西具有这种柔韧性? 示例:Protbufs支持枚举数,但ROS消息不支持,因此我有:C++ 将Protobuf转换为具有类似功能的ROS消息,c++,protocol-buffers,ros,C++,Protocol Buffers,Ros,我最近继承了一个利用MOOS和Protobuf消息的大型代码库 在我的项目负责人的要求下,我将其移植到专门使用ROS的地方,使用ROS消息代替protobuf。代码库严重依赖于使用protobuf功能,如枚举器min/max、从变量字段中提取字符串、->has_variable()函数、->isValid()等 到目前为止,我只能从wiki上找到非常基本的ROS消息功能 有没有“黑客”或类似的东西具有这种柔韧性? 示例:Protbufs支持枚举数,但ROS消息不支持,因此我有: uint8
uint8 TYPE_FAILED = 0
uint8 TYPE_OPERATIONAL = 1
uint8 TYPE_INITIALIZING = 2
uint8 health_state_type
我的health\u state\u type
是我的“枚举器”,但我没有最小值或最大值,除非我硬编码一个,并且我无法将type\u FAILED
提取为字符串。我一直在通过使用
my_message::custom_msg health;
health.health_state_type = health.TYPE_FAILED
但我必须修改许多不同的区域,将其用作字符串,而不是整数。是的,有一个漏洞。但是你需要输入一些工作到它里面。 要在ROS中使用publisher/subscriber方法,您需要为.msg文件中的所有主题定义消息 从该文件中自动生成C++类。但是你不想碰那个自动生成的文件!您可以做的是定义类并将其与自动生成的类相关联 请举例说明如何做到这一点。然后可以使用所需的方法(如isValid)扩展自定义类 另一种(可能更简单)方法是声明一个helper类,该类将为消息中的每种类型执行所需的工作
或者你可以继续使用protobuf。如果不是在ROS中,它也至少在露台中使用 不久前,我编写了一些自动生成脚本,这些脚本使用Protobuf并生成ROS头(而不是msg文件),以便通过ROS通信传输Protobuf blob。这将满足您的需要,而无需使用支持ROS msg定义复制Protobuf定义