MAVLink プロトコルには、HEADER + PAYLOAD + SIGNATURE 形式があります。
MAVLink v1.0
v1.0 は、QGroundControlで指定された標準プロトコルです。形式は次のとおりです。
- 6 バイトのヘッダー
- (PAYLOAD の長さ) バイトのペイロード
- 2 バイトの署名 (チェックサム)
最初のバイトは常にプロトコルのフレーム開始です: 0xFE
2 番目のバイトは常にペイロード長です。
したがって、受信バッファーのサイズは (PAYLOAD の長さ) + 8 になります。
説明した方法は、通常、pixhawk から受信したほとんどのパケットで機能します。ただし、pixhawk (ArduPilot) は、追加のヘッダーと署名バイトを追加する「v2.0」という造語である拡張 MAVLink プロトコルを利用します。
MAVLink v2.0
v2.0 は、「STATUSTEXT」などの一部のメッセージに適用される拡張プロトコルです。形式は次のとおりです。
- 10 バイトのヘッダー
- (PAYLOAD の長さ) バイトのペイロード
- 15 バイトの署名
最初のバイトにはフレームの開始があります: 0xFD
2 番目のバイトは、ペイロードの長さです。
したがって、バッファ サイズは (PAYLOAD の長さ) + 25 にする必要があります。
pixhawk または生成された .tlog ファイルからの MAVLink メッセージ データを処理する場合は、フレームの開始とペイロード長バイト (MAVLink メッセージの最初の 2 バイト) に基づいて入力メッセージ バッファ サイズを設定する必要があります。