Как читать пакет 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.

Другие вопросы по тегам