1. ros2 为了兼容ros1, 只适配IDL中数据类型的子集,不支持enum及map数据类型,可用其他形式代替。
如对于IDL的枚举 enum,定义为如下形式可被ros2识别:
module Color_Enum
{
const uint8 COLOR_BLUE = 0;
const uint8 COLOR_RED = 1;
const uint8 COLOR_BLACK = 2;
};
uint8 color;
对于map数据类型,可替换为:
struct map_demo
{
uint32 key;
string value;
}
struct Frame_map
{
sequence<map_demo> frame_map;
};
2. 对于IDL的map类型来说,目前还只支持基本数据,暂不支持自定义类型Maps should support non-primitive types [13386] · Issue #83 · eProsima/Fast-DDS-Gen · GitHub
3. 对于同一个.idl文件中定义的多个struct来说,需要根据ros2数据规则,定义多个.msg文件才可被ros2识别.