1. mavlink数据包格式
字节索引 | C 版本 | 内容 | 值 | 说明 |
---|---|---|---|---|
0 | uint8_t magic | 数据包启动标记 | 0xFE | 特定于协议的文本启动 (stx) 标记, 用于指示新数据包的开始。 任何不识别协议版本的系统都将跳过数据包。 |
1 | uint8_t len | 载荷长度 | 0 - 255 | 指示以下 payload 部分的长度 (为特定消息固定)。 |
2 | uint8_t seq | 数据包序列号 | 0 - 255 | 用于检测数据包丢失。 组件为发送的每封消息递增值。 |
3 | uint8_t sysid | 系统 ID | 0 - 255 | 发送消息的 system (飞机) 的 ID。 用于区分网络上的系统。 |
4 | uint8_t compid | 组件ID | 0 - 255 | component 发送消息ID。 用于区分 system 中的组件 (例如自动驾驶仪和相机)。 |
5 | uint8_t msgid | 消息 ID | 0 - 255 | 有效载荷中的 message type 的 id。 用于将数据解码回消息对象。 |
6 to n+6 | uint8_t payload | 载荷长度 | 0 - 255 | 消息数据。 内容取决于消息类型(即消息ID) |
(n+6) to (n+7) | uint16_t checksum | 校验和(低字节, 高字节) | — | 校验码由crc16算法得到,算法将整个消息(从起始位开始到有效载荷结束,还要额外加上个MAVLINK_CRC_EXTRA字节)进行crc16计算,得出一个16位的校验码。 |
- 最低数据包长度是8字节,用于没有有效载荷确认数据包。
- 最大的数据包长度是完整有效载荷263字节。
2. 举例分析
序列 FE 09 48 FF BE 00 00 00 00 00 06 08 C0 04 03 9C B6,我们可以逐步解析这个MAVLink数据包:
-
起始字节(STX): FE
这是MAVLink协议的起始标志位,在MAVLink v1中,每个数据包都以0xFE开始。
-
长度(Length): 09
这个字节表示数据包中有效载荷(不包括起始字节、长度、系统ID、组件ID和校验和)的长度。在这个例子中,09意味着有效载荷长度为9字节。
-
系统ID和组件ID: 48 FF
接下来的两个字节通常用于表示发送消息的系统ID和组件ID。但是,具体解释取决于MAVLink协议的版本和上下文。在这个例子中,48可能是系统ID,FF可能是组件ID,或者反之。
-
消息ID: BE
这个字节表示消息类型编号。BE在十六进制中对应的十进制数值是190,根据MAVLink的消息ID定义,这个值对应于特定的消息类型。
-
序列号(Seq): 00 00
这两个字节是消息序列号,用于检测丢失的消息。在这个例子中,序列号为00 00,可能表示这是一个逻辑上的起始消息。
-
有效载荷(Payload): 00 00 06 08 C0 04
这是消息的数据部分,内容取决于消息ID。在这个例子中,我们有6个字节的数据。 校验和: 03 9C B6
-
最后三个字节是校验和,用于验证数据包的完整性。校验和是根据数据包中的特定字节计算得出的。