# MAVLink Основная документация: https://mavlink.io/en/. MAVLink – это протокол для организации связи между автономными летательными и транспортными системами (дронами, самолетами, автомобилями). Протокол MAVLink лежит в основе взаимодействия между Pixhawk и Raspberry Pi. В Клевер включено 2 обертки над этим протоколом: [MAVROS](mavros.md) и [simple_offboard](simple_offboard.md). Код для отправки произвольного MAVLink сообщения можно найти в [примерах](snippets.md#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](https://mavlink.io/en/messages/common.html). ### Система, компонент системы Каждое устройство (дрон, базовая станция и т. д.) имеет 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 байт | Сигнатура (опционально) | Позволяет убедиться, что пакет не был скомпрометирован. Обычно не используется. |