Как читать пакет mavlink.. нормально ли это делать на моем пути?
Я читаю о MAVLink, и я пытаюсь читать пакеты от контроллера flyhawk. Я думал о другом способе сделать звонок, и я хочу знать из этих обсуждений читателей, если это хорошо, и что вы думаете
На моем читателе.. я прочитал два первых байта из pixhawk.
Второй байт должен быть длиной PAYLOAD -> настолько новым, что я знаю, что мне нужно прочитать 4 байта заголовка + байты длины PAYLOAD + 2 байта chcksub.
Поэтому после прочтения длины PAYLOAD я определяю байтовый массив -> размер
( PAYLOAD.length + 4 + 2) и чтение из последовательного в этот буфер. Это нормально делать?
1 ответ
Протокол 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.