MAVLink

Основная документация: https://mavlink.io/en/open in new window.

MAVLink – это протокол для организации связи между автономными летательными и транспортными системами (дронами, самолетами, автомобилями). Протокол MAVLink лежит в основе взаимодействия между Pixhawk и Raspberry Pi.

В Клевер включено 2 обертки над этим протоколом: MAVROS и simple_offboard.

Код для отправки произвольного MAVLink сообщения можно найти в примерах.

Основные концепции

Канал связи

Протокол MAVLink может быть использован поверх следующих каналов связи:

  • последовательное соединение (UART, USB и др.);
  • UDP (Wi-Fi, Ethernet, 3G, LTE);
  • TCP (Wi-Fi, Ethernet, 3G, LTE).

Сообщение

MAVLink-сообщение это отдельная "порция" данных, передаваемая между устройствами. Отдельное MAVLink-сообщение содержит информацию о состоянии дрона (или другого устройства) или команду для дрона.

Примеры MAVLink-сообщений:

  • ATTITUDE, ATTITUDE_QUATERNION – ориентация квадрокоптера в пространстве;
  • LOCAL_POSITION_NED – локальная позиция квадрокоптера;
  • GLOBAL_POSITION_INT – глобальная позиция квадрокоптера (широта/долгота/высота);
  • COMMAND_LONG – команда для квадрокоптера (взлететь, сесть, переключить режим и т. д.).

Полный список MAVLink-сообщений можно посмотреть в документации MAVLinkopen in new window.

Система, компонент системы

Каждое устройство (дрон, базовая станция и т. д.) имеет ID в сети MAVLink. В PX4 MAVLink ID меняется с помощью параметра MAV_SYS_ID. Каждое MAVLink сообщение содержит поле с ID системы-отправителя. Кроме того, некоторые сообщения (например, COMMAND_LONG) содержат также ID системы-получателя.

Помимо ID систем, сообщения могут содержать ID компонента-отправителя и компонента-получателя. Примеры компонентов системы: полетный контроллер, внешняя камера, управляющий бортовой компьютер (Raspberry Pi в случае Клевера) и т. д.

Пример пакета

Пример структуры MAVLink-пакета с сообщением COMMAND_LONG:

ПолеДлинаИмяКомментарий
Заголовок
magic1 байтМетка начала0xFD для MAVLink 2.0
len1 байтРазмер данных
incompat_flags1 байтОбратно несовместимые флагиНа данный момент не используется
compat_flags1 байтОбратно совместимые флагиНа данный момент не используется
seq1 байтПорядковый номер сообщения
sysid1 байтID системы-отправителя
compid1 байтID компонента-отправителя
msgid3 байтаID сообщения
Данные (пример)
target_system1 байтID системы-получателя
target_component1 байтID компонента–получателя
command2 байтаID команды
confirmation1 байтНомер для подтверждения
param14 байтаПараметр 1Число с плавающей точкой одинарной точности
param24 байтаПараметр 2
param34 байтаПараметр 3
param44 байтаПараметр 4
param54 байтаПараметр 5
param64 байтаПараметр 6
param74 байтаПараметр 7
checksum2 байтаКонтрольная сумма
signature13 байтСигнатура (опционально)Позволяет убедиться, что пакет не был скомпрометирован. Обычно не используется.

Желтым цветом выделены поля данных (полезной нагрузки). Для каждого типа сообщения существует свой набор таких полей.