参考 :
主要为
其余包括
http://www.eprosima.com/docs/fast-rtps/1.6.0/html/index.html
https://issues.omg.org/issues/spec/DDSI-RTPS/2.1
http://download.opendds.org/doxygen/a00141.html
C++实现为结合自身参与项目的具体实现。
The RTPS Platform Specific Model(PSM):UDP/IP
目录
总体结构
RTPS消息(Message)的整体结构包括固定大小的前导RTPS头(Header),后跟可变数量的RTPS 子消息(Submessage)部分。 每个 子消息(Submessage)又包含一个子消息头(SubmessageHeader)和可变数量的子消息元素(SubmessageElements)。
RTPS协议发送的每条消息都有一个有限的长度。 该长度不是由RTPS协议明确给出的,而是包装了RTPS消息的底层协议的一部分。 在面向分组的传输的情况下(如UDP /IP),消息的长度已由传输封装提供; 面向流的传输(如TCP)则需要在RTPS消息之前插入长度以便识别RTPS消息的边界。
头结构
RTPS头包含的字段如下表所示。
字段 | 类型 | 含义 |
---|---|---|
protocol | ProtocolId_t | 将消息标识为RTPS消息。 |
version | ProtocolVersion_t | 标识RTPS协议的版本。 |
vendorId | VendorId_t | 表示提供RTPS协议实现的供应商。 |
guidPrefix | GuidPrefix_t | 定义用于消息中显示的所有GUID的默认前缀。 |
C++实现:
typedef struct RTPSHeader_t
{
u_int32_t ProtocalId;
unsigned char major;
unsigned char minor;
unsigned short vendorId;
unsigned char guidPrefix[12];
}RTPSHeader_t;
映射:
protocol
该值设置为PROTOCOL_RTPS时表示消息为RTPS消息。
PSMProtocolId_t 类型为枚举类型:
enum ProtocolId_t{ PROTOCOL_RTPS = 'RTPS'};
PROTOCOL_RTPS常量的实际值由PSM提供。在这里为0x52545053,分别为Ascii码的‘R’、‘T’、‘P’、‘S’。
version
ProtocolVersion_t 类型为结构体:
typedef struct{
octet major;
octet minor;
} ProtocolVersion_t
当major为2,minor为1时表明协议版本为2.1。