Протокол MAVLink имеет формат HEADER + PAYLOAD + SIGNATURE.
MAVLink v1.0
v1.0 — это стандартный протокол, указанный в QGroundControl. Он имеет формат:
- заголовок 6 байт
- (Длина PAYLOAD) байт полезной нагрузки
- 2 байта подписи (контрольная сумма)
Первый байт всегда является началом кадра протокола: 0xFE.
Второй байт всегда является длиной полезной нагрузки.
Следовательно, размер вашего приемного буфера должен быть (длина PAYLOAD) + 8.
Описанный вами метод обычно работает для большинства пакетов, полученных от pixhawk. Однако pixhawk (ArduPilot) использует расширенный протокол MAVLink, который был придуман как «v2.0», который добавляет дополнительные байты заголовка и подписи.
MAVLink v2.0
v2.0 — это расширенный протокол, который применяется к нескольким избранным сообщениям, таким как «STATUSTEXT». Он имеет формат:
- 10-байтовый заголовок
- (Длина PAYLOAD) байт полезной нагрузки
- подпись 15 байт
Первый байт имеет начало кадра: 0xFD
Второй байт снова является длиной полезной нагрузки.
Следовательно, размер вашего буфера должен быть (длина PAYLOAD) + 25.
Если вы хотите обработать данные сообщения MAVLink из pixhawk или из сгенерированного файла .tlog, вы должны установить размер буфера входного сообщения на основе байтов начала кадра и длины полезной нагрузки, первых двух байтов любого сообщения MAVLink.
person
Michael Shanaher
schedule
06.12.2016