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字节。 -
数据包序列号: 48
代表这是发送的第73个序列 -
系统ID:FF
即系统id为255,这里接收的是QGC的默认系统id。 -
组件ID: BE
BE在十六进制中对应的十进制数值是190,对应id为190的这个组件。 -
消息ID: 00
对应数字0,代表这是一条心跳广播。具体消息对应id在官网找到。 -
有效载荷(Payload): 00 00 00 00 06 08 C0 04 03
这是消息的数据部分,内容取决于消息ID。
-
最后两个字节是校验和,用于验证数据包的完整性。校验和是根据数据包中的特定字节计算得出的。