Протокол MAVLink: как аппарат разговаривает со станцией
Понимание протокола объясняет почти все «странности» в поведении программы: задержки, потери, зависшую телеметрию и конфликты в групповых полётах.
MAVLink не гарантирует доставку телеметрии: потерянный пакет просто теряется. Именно поэтому вы всегда видите прошлое, а не текущее состояние аппарата.
Содержание
1. Цели урока
После этого урока вы будете понимать:
- чем MAVLink 2 отличается от первой версии
- какие сообщения передаются и с какой частотой
- как ползунки Telemetry Rates связаны с конкретными сообщениями
- как работает адресация SYSID и почему это важно в группе
- где в программе искать параметры адресации и как они называются в свежих прошивках
- как пользоваться MAVLink Inspector для оценки канала
2. Зачем оператору знать про MAVLink
MAVLink (Micro Air Vehicle Link) — это протокол обмена сообщениями между аппаратом и наземной станцией. Понимание его устройства нужно не только ради теории: почти все «странности» в поведении Mission Planner объясняются свойствами протокола.
Основные характеристики:
- бинарный, компактный: типовой пакет 10–60 байт;
- без гарантии доставки: потерянный пакет просто теряется, повторной передачи нет (кроме параметров и миссий, где протокол выше уровнем);
- потоковый: телеметрия передаётся периодически с заданной частотой, а не по запросу;
- адресуемый: каждый узел имеет
SYSID(идентификатор системы) иCOMPID(идентификатор компонента).
| Версия | Особенности |
|---|---|
| MAVLink 1 | Заголовок 6 байт, контрольная сумма 2 байта, до 255 типов сообщений. Устарел |
| MAVLink 2 | Заголовок 10 байт, расширяемые поля, подпись пакетов, до 16 777 215 типов сообщений. Широко используется с ArduPilot 4.0 (поддержка добавлена в 3.6) |
Параметр SERIALx_PROTOCOL = 2 включает MAVLink 2 на соответствующем порту, = 1 — MAVLink 1.
3. Ключевые сообщения
MAVLink Inspector (SETUP → Advanced → MAVLink Inspector) содержит состояние параметров, которые дают понимание, что происходит в канале. Ctrl+F - на вкладке DATA вызовет окно temp из которого также доступен Mavlink Inspector:
Ниже некоторые ссобщения:
| Сообщение | Содержимое | Частота |
|---|---|---|
HEARTBEAT |
Тип аппарата, режим, статус армирования | 1 Гц, обязательно |
ATTITUDE |
Крен, тангаж, курс и угловые скорости | 4–10 Гц |
GLOBAL_POSITION_INT |
Широта, долгота, высота, скорости | 3–5 Гц |
GPS_RAW_INT |
Сырые данные GNSS, тип решения, HDOP, число спутников | 2–5 Гц |
SYS_STATUS |
Напряжение, ток, остаток, загрузка процессора, состояние датчиков | 2 Гц |
VFR_HUD |
Сводка для HUD: скорость, высота, курс, газ | 4 Гц |
STATUSTEXT |
Текстовые сообщения — то, что видно во вкладке Messages | По событию |
PARAM_VALUE |
Значение одного параметра | При запросе |
MISSION_ITEM_INT |
Один пункт миссии | При обмене миссией |
COMMAND_LONG / COMMAND_INT |
Команда аппарату (arm, takeoff, set mode) | По действию |
RC_CHANNELS |
Положения каналов пульта | 2–5 Гц |
SERVO_OUTPUT_RAW |
Выходы на ESC и сервоприводы | 2–5 Гц |
VIBRATION |
Уровни вибрации по осям и счётчики clipping | 1–2 Гц |
EKF_STATUS_REPORT |
Дисперсии оценок фильтра | 2 Гц |
ATTITUDE на 10 Гц, а Inspector показывает 3 Гц, канал перегружен — уменьшайте частоты потоков или повышайте air speed модема.4. Потоки и частоты
Аппарат не отправляет каждое сообщение по отдельному расписанию. Сообщения сгруппированы в потоки, и частота задаётся сразу всей группе. Это объясняет, почему нельзя ускорить одну величину, не ускорив десяток соседних.
Пять полей CONFIG → Planner → Telemetry Rates управляют именно потоками. Ниже — что реально стоит за каждым полем.

| Поле в Planner | Поток | Какие сообщения ускоряет |
|---|---|---|
Attitude |
EXTRA1 и EXTRA2 | ATTITUDE, AHRS2, RPM, AOA_SSA, ESC_TELEMETRY, PID_TUNING, а также VFR_HUD |
Position |
POSITION | GLOBAL_POSITION_INT, LOCAL_POSITION_NED |
Mode/Status |
EXTENDED_STATUS | SYS_STATUS, POWER_STATUS, MEMINFO, GPS_RAW_INT, NAV_CONTROLLER_OUTPUT, FENCE_STATUS, текущая точка маршрута |
RC |
RC_CHANNELS | RC_CHANNELS, SERVO_OUTPUT_RAW |
Sensor |
RAW_SENSORS и EXTRA3 | RAW_IMU, SCALED_PRESSURE, AIRSPEED, а также EKF_STATUS_REPORT, VIBRATION, BATTERY_STATUS, WIND, RANGEFINDER, SYSTEM_TIME |
Sensor по умолчанию стоит 2 Гц, и это разумный компромисс.Те же частоты хранятся и в параметрах самого аппарата — по одному набору на каждый канал связи. В прошивках до 4.7 они назывались SR0_*…SR9_*, начиная с 4.7 — MAV1_*…MAV10_*.
| Поток | Параметр (4.6.x) | Параметр (4.7+) |
|---|---|---|
| Attitude | SR1_EXTRA1 |
MAV2_EXTRA1 |
| VFR_HUD | SR1_EXTRA2 |
MAV2_EXTRA2 |
| Датчики и EKF | SR1_EXTRA3 |
MAV2_EXTRA3 |
| Положение | SR1_POSITION |
MAV2_POSITION |
| Статус | SR1_EXT_STAT |
MAV2_EXT_STAT |
| Каналы RC | SR1_RC_CHAN |
MAV2_RC_CHAN |
| Сырые датчики | SR1_RAW_SENS |
MAV2_RAW_SENS |
5. Идентификаторы систем
Каждый узел в сети MAVLink имеет адрес. Для одиночного аппарата это неважно, но как только на площадке появляется второй борт или компаньон-компьютер, адресация становится критичной.
| Параметр (4.6.x) | Параметр (4.7+) | Смысл | По умолчанию |
|---|---|---|---|
SYSID_THISMAV |
MAV_SYSID |
Идентификатор данного аппарата | 1 |
SYSID_MYGCS |
MAV_GCS_SYSID |
Идентификатор наземной станции, от которой принимаются команды | 255 |
SYSID_ENFORCE |
MAV_OPTIONS, бит 0 |
Игнорировать пакеты от чужих идентификаторов | 0 (выключено) |
| — | MAV_GCS_SYSID_HI |
Верхняя граница диапазона идентификаторов станции | 0 |
TELEM_DELAY |
MAV_TELEM_DELAY |
Задержка запуска телеметрии, с | 0 |
SYSID_THISMAV, в прошивках 4.7 и новее MAV_SYSID (1, 2, 3…). Иначе Mission Planner будет получать телеметрию от нескольких бортов, считая её одним аппаратом: HUD начнёт «прыгать», а команды уйдут не туда. Для полётов в группе включайте также строгую проверку: SYSID_ENFORCE = 1 либо MAV_OPTIONS = 1. Всё правится в CONFIG → Full Parameter List.Где найти параметры в программе
Отдельной страницы настройки для них нет. Все три правятся только в общем редакторе:
CONFIG → Full Parameter List → поле Search → ввести SYSID. Либо выбрать ветку SYSID_ в дереве префиксов слева. В прошивках 4.7 и новее искать нужно по MAV_.
Порядок работы обычный: нашли строку, изменили значение в колонке Value, нажали Write Params, перезагрузили автопилот. Все эти параметры вступают в силу только после перезагрузки.
Search ищет без учёта регистра сразу по имени, значению и описанию, срабатывая от двух символов. Символ вертикальной черты работает как «или», поэтому запрос SYSID|MAV_SYSID|MAV_GCS найдёт параметры и в старых, и в новых прошивках за один раз.Что изменилось в прошивке 4.7
Начиная с ArduPilot 4.7 группа параметров MAVLink переименована: префикс SYSID_ заменён на MAV_. Значения переносятся автоматически при первой загрузке новой прошивки, поэтому настройки не теряются — меняется только имя. Подробнее о переименованиях по всему набору параметров — в уроке 7.
Появился диапазон вместо одного идентификатора. Параметр MAV_GCS_SYSID_HI задаёт верхнюю границу идентификаторов, считающихся наземной станцией. Если он меньше MAV_GCS_SYSID, станцией считается ровно одно значение — как прежде. Если больше или равен, станциями считается весь диапазон включительно. Это нужно, когда с аппаратом одновременно работают оператор и компаньон-компьютер.
Строгая проверка стала битовой маской. Прежний SYSID_ENFORCE = 1 теперь записывается как MAV_OPTIONS = 1: бит 0 означает «принимать MAVLink только от систем с разрешёнными идентификаторами».
SYSID_ENFORCE = 1, в прошивках 4.7 и новее — бит 0 в MAV_OPTIONS.Идентификатор самой станции
Есть парный момент, который часто упускают. MAV_GCS_SYSID задаёт, какой идентификатор аппарат ждёт от станции. А то, каким идентификатором представляется сама программа, настраивается не в параметрах аппарата, а в настройках Mission Planner:
CONFIG → Planner → GCS ID, по умолчанию 255. Это настройка самой программы: она не пишется в автопилот и не требует нажатия Write Params.
Эти два числа должны совпадать.
GCS ID в самой программе. Результат выглядит загадочно: телеметрия идёт, HUD живой, а джойстик не работает и GCS-failsafe не срабатывает. Причина в том, что аппарат принимает пакеты, но не считает их пришедшими от «своей» станции.6. Практика
Задания выполняются в симуляторе SITL и не требуют реального аппарата.
Задание 6.1. Измерение канала
Выполняется в симуляторе SITL, реальный аппарат не требуется
- Откройте MAVLink Inspector и найдите
HEARTBEAT,ATTITUDEиVFR_HUD. Запишите фактические частоты. - Измените поле
Attitudeв Telemetry Rates с 4 на 10 Гц и посмотрите, какие сообщения ускорились вместе с ним. - Объясните, почему изменилась частота
VFR_HUD, хотя вы его не трогали. - Верните исходные значения.
Задание 6.2. Адресация
Выполняется в симуляторе SITL, реальный аппарат не требуется
- Найдите в Full Parameter List параметры адресации. Запишите, под какими именами они существуют в вашей прошивке.
- Измените идентификатор аппарата на 2, запишите параметры и перезагрузите автопилот.
- Проследите, что программа переподключилась и корректно показывает новый идентификатор.
- Найдите поле
GCS IDв настройках программы и объясните, чем оно отличается от параметра аппарата. - Верните идентификатор обратно на 1.
7. Проверьте себя
Сформулируйте ответ своими словами, прежде чем сверяться со справочником ответов.
- Почему оператор всегда видит прошлое состояние аппарата, а не текущее?
- Чем MAVLink 2 отличается от первой версии и каким параметром переключается версия?
- Почему нельзя поднять частоту обновления вибраций, не затронув другие величины?
- Что означает цифра в имени параметра частоты потока и почему её легко перепутать с номером порта?
- Где в программе найти параметры адресации и почему поиск по
SYSIDможет ничего не дать? - На что именно влияет идентификатор наземной станции и что он при этом не ограничивает?
- Чем поле
GCS IDв настройках программы отличается от параметра аппарата и что будет при их расхождении? - Какие параметры нужно задать каждому борту перед групповым полётом в общем радиоканале?
8. Чек-лист самопроверки
Урок освоен, если каждый пункт выполнен на практике:
- Знаю назначение HEARTBEAT, ATTITUDE, STATUSTEXT
- Умею открыть MAVLink Inspector и оценить фактические частоты
- Понимаю связь между полями Telemetry Rates и конкретными сообщениями
- Нашёл параметры адресации в Full Parameter List и знаю их имена для своей прошивки
- Понимаю разницу между идентификатором станции в параметрах аппарата и полем GCS ID в программе
- Понимаю роль идентификатора аппарата при полётах нескольких бортов
9. Что дальше
- Предыдущий урок: 5. Экраны PLAN, SETUP и CONFIG
- Следующий урок: 7. Система параметров ArduPilot
- Полный перечень тем: Содержание курса
- мод. : Воскресенье, 16 августа 2026


