MAVLink

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

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-сообщений можно посмотреть в документации MAVLink.

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

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

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

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

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

Поле Длина Имя Комментарий
Заголовок
magic 1 байт Метка начала 0xFD для MAVLink 2.0
len 1 байт Размер данных
incompat_flags 1 байт Обратно несовместимые флаги На данный момент не используется
compat_flags 1 байт Обратно совместимые флаги На данный момент не используется
seq 1 байт Порядковый номер сообщения
sysid 1 байт ID системы-отправителя
compid 1 байт ID компонента-отправителя
msgid 3 байта ID сообщения
Данные (пример)
target_system 1 байт ID системы-получателя
target_component 1 байт ID компонента–получателя
command 2 байта ID команды
confirmation 1 байт Номер для подтверждения
param1 4 байта Параметр 1 Число с плавающей точкой одинарной точности
param2 4 байта Параметр 2
param3 4 байта Параметр 3
param4 4 байта Параметр 4
param5 4 байта Параметр 5
param6 4 байта Параметр 6
param7 4 байта Параметр 7
checksum 2 байта Контрольная сумма
signature 13 байт Сигнатура (опционально) Позволяет убедиться, что пакет не был скомпроментирован. Обычно не используется.

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

results matching ""

    No results matching ""