C++ 将Protobuf转换为具有类似功能的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

我最近继承了一个利用MOOS和Protobuf消息的大型代码库

在我的项目负责人的要求下,我将其移植到专门使用ROS的地方,使用ROS消息代替protobuf。代码库严重依赖于使用protobuf功能,如枚举器min/max、从变量字段中提取字符串、->has_variable()函数、->isValid()等

到目前为止,我只能从wiki上找到非常基本的ROS消息功能

有没有“黑客”或类似的东西具有这种柔韧性?

示例:Protbufs支持枚举数,但ROS消息不支持,因此我有:

  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定义