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
-
最后三個字節是校驗和,用于驗證數據包的完整性。校驗和是根據數據包中的特定字節計算得出的。