87. Контроллеры полёта: PX4, ArduPilot; прошивка и параметры #
ФК (статья 86) — это «железо» + прошивка. Здесь — два открытых стандарта: PX4 и ArduPilot (характеристики, режимы, параметры), как устроены контуры управления (PID, фильтр Калмана) и как работать с прошивкой: выбор версии, обновление, параметры, логи, failsafe. После этой статьи — можно открыть QGC (статья 88) и не потерять его в 1 500+ параметрах.
Содержание
1. Цели статьи
Практика работы с полётным контроллером: выбор/понимание PX4 и ArduPilot, режимы полёта, контуры управления (PID + фильтр Калмана), регламент прошивки и параметров. Материал рассчитан на инженера и оператора: настроить ФК, прочитать логи, не «сломать» параметры.
- Различать PX4 и ArduPilot (железо, режимы, параметры, сообщество).
- Знать режимы: Stabilize/Accro, AltHold/AltCtrl, PosHold, Auto, RTL, Land.
- Понимать контур: PID (P/I/D), 1–4 кГц, фильтр Калмана (EKF2).
- Управлять прошивкой: версия, обновление (\(16 МБ \approx 20\ \text{мин} \) на 115 200), параметры (бэкап/категории).
- Читать логи (100 Гц, 20+ каналов), настраивать failsafe (статья 89).
2. Глоссарий величин
Полный перечень величин с единицами измерения.
| Величина | Обозначение | Единицы | Типичные значения |
|---|---|---|---|
| Частота контура управления | f_к | Гц (кГц) | 1 000–4 000 |
| Период шага | T | мс | 0,25–1 |
| Коэффициент P (пропорциональный) | Kp | безразмерный (1/с) | 1–100 (по контуру) |
| Коэффициент I (интегральный) | Ki | 1/с | 0,1–20 |
| Коэффициент D (дифференциальный) | Kd | с | 0,001–0,1 |
| Ошибка (rate-контур) | e | рад/с (°/с) | 0–100 |
| Число параметров | — | шт | 1 000–2 500 |
| Размер прошивки (флеш) | — | МБ | 8–32 |
| Лог: частота / каналы | f_лог | Гц / шт | 50–100 Гц / 20–100 |
| Сигнал радиоканала (RSSI) | RSSI | дБм | −60…−110 (порог −100…−105) |
| Напряжение failsafe (батарея) | Vfs | В | 6S: 19,8 (3,3 В/ячейка × 6) |
3. ФК: железо и прошивка
Аппаратная часть ФК (статья 86):
- Процессор (MCU): ARM Cortex-M4/M7, 400–800 МГц (одиночный или двойной — «дублированный» для безопасности, тяжёлые БПЛА).
- IMU: 1–2 блока (gyro/accel/магнито), SPI 1–8 МГц (опрос 1–8 кГц, статья 86).
- Память: флеш 8–64 МБ (прошивка + параметры + логи), DDR 32–256 МБ (логи, навигация, RTK).
- Интерфейсы: UART 6–10 (связь, телеметрия, GNSS, камера), CAN 1–2 (дальние ESC/приводы), I2C/SPI (датчики), PWM 8–16 (приводы), SD-карта (логи).
- Питание: 4,8–5,5 В (BEC/PDB, статья 86), ток 0,5–3 А.
Требования к железу по классу БПЛА: мультиротор лёгкий (до 20 кг) — 1 IMU, 1 UART-резерв; тяжёлый/крылатый (50+ кг) — 2 IMU, CAN, DDR 256, «дублированный» MCU (отказоустойчивость: при отказе одного MCU второй продолжает контур).
↑ К оглавлению4. PX4 и ArduPilot
Два открытых стандарта ФК (PX4 — DLR и сообщество; ArduPilot — международное сообщество). [ArduPilot — ArduPilot (рисунок — Wikipedia)]
| Критерий | PX4 | ArduPilot |
|---|---|---|
| Ядро | POSIX (NuttX/RTOS), C++ | RTOS (ChibiOS), C |
| Фильтр | EKF2 (ECL) | EKF2 (интегрирован) |
| Железо | Pixhawk (Pixhawk 4, CubeOrange/Black, CubeYellow) | Pixhawk, Cube, и другие по стандарту |
| Режимы (коптер) | Offboard, AltCtrl, PosHold, Auto, RTL, Land, Terminate | Stabilize, Acro, AltHold, PosHold, Land, RTL, Auto, Guided, Loiter, Circle, Drift, Brake, Flip |
| Параметры | ~1 000–1 500 | ~1 500–2 500 (по платформе: Copter/Plane/Rover) |
| API | MAVLink, uXRCE-DDS | MAVLink, uXRCE-DDS |
| Типовое применение | Исследования, промышленность, мультиротор/крылатый | Любители/профи, мультиротор/крылатый/лодочный (Rover) |
Общее: MAVLink (статья 88), EKF2, QGroundControl и ArduPilot Mission Planner (наземная станция управления, ГНС, статья 88), параметр-менеджеры. Различия: PX4 — «чище» API (Offboard — внешний код), ArduPilot — больше режимов «из коробки». Для промышленного БПЛА (РФ) — чаще PX4 (OpenDroneID, интеграция), для любительских/средних — ArduPilot (сообщество, форумы).
↑ К оглавлению5. Контур управления
Структура: датчики → EKF2 (фильтр Калмана) → планировщик (миссия/режим) → контуры (rate/attitude/velocity/position) → приводы.
Фильтр Калмана (EKF2). [Фильтр Калмана — Kalman_filter / Фильтр Калмана] «Склеивает» IMU (быстро, дрейфует) + баро (высота) + GNSS (позиция) + магнито (азимут): оценивает 14–25 состояний (позиция, скорость, ориентация, смещения датчиков). Выход: позиция/скорость/ориентация на каждом шаге (1–4 кГц). Ошибки: GNSS «прыгает» → фильтр «сглаживает» (но запаздывает); IMU «дрейфует» → GNSS «подтягивает».
Каскад контуров (4 уровня).
- Position (позиция): «где хочу» (миссия/оператор) → скорость заданная. Частота 25–100 Гц.
- Velocity (скорость): «насколько быстро» → наклон/тяга. Частота 100–500 Гц.
- Attitude (ориентация): «какой крен/тангаж/рыскание» → угловая скорость. Частота 100–500 Гц.
- Rate (угловая скорость): «как быстро вращаюсь» → тяга моторов/рули. Частота 1–4 кГц.
ПИД (ПИД-регулятор). \(U = Kp\cdot e \) + Ki·∫e·dt + Kd·de/dt: P — «сразу» (быстро, но «перелетает» в нуль), I — «накопленное» (убирает остаточную ошибку), D — «предупреждение» (гасит колебания). Настройка: Kp (основной) → Kd (демпфер) → Ki (последний, 0,1–20). «Качка» → Kp/Kd; «дрейф» → Ki. 20–40 итераций (по логам, статья 94: анализ).
↑ К оглавлению6. Прошивка и параметры
Выбор версии. PX4/ArduPilot: «stable» (v1.13/v4.4.x) — для полётов; «nightly» — для тестов (не для миссий!). Версия фиксируется в логе (статья 94). Обновление: через GCS (QGC/MP) — \(16 МБ \approx 20\ \text{мин} \) на 115 200 бит/с (статья 86, задача 5); резервная копия параметров — перед обновлением.
Параметры (категории). ~1 500–2 500 параметров; группы:
- Frame/моторы: тип рамы (X/+/H), порядок ESC, KV (статья 39), ограничение тока.
- GPS/датчики: GNSS-тип, баро, IMU-калибровки, фильтр EKF2.
- Контур (PID): rate/attitude/velocity — P/I/D (статья 87 §5).
- Батарея: S-конфигурация, напряжения (номинал/пустой/failsafe), K/I (статьи 36–38, 93).
- Failsafe (статья 89): RSSI/телеметрия/батарея/геозона — действия (RTL/Loiter/Land/Terminate).
- Миссия: высота, скорость, RTL-высота, геозона.
Логирование. SD-карта: 50–100 Гц, 20–100 каналов (позиция, скорость, ориентация, ток, напряжение, IMU-сырые, EKF-статусы). Размер: 28,8 МБ/ч (статья 87, задача 3) → 32 ГБ ≈ 1 000 ч. Анализ: QGC/MP — графики (дрейф, качка, отказы датчиков).
Failsafe-«цепочка». [Failsafe — Failsafe / Отказобезопасность] «Что делать при отказе»: (1) радиоканал (RSSI ниже −100 дБм) → Loiter/RTL; (2) телеметрия (потеря пакетов) → RTL; (3) батарея (V ниже Vfs) → Land/RTL (по остатку); (4) GNSS (нет фикса) → Loiter/IMU; (5) GEOfence (выход из зоны) → RTL. Приоритет: батарея → радиоканал → GNSS → геозона (статья 89 — детально).
↑ К оглавлению7. Практика: типовые задачи
Задача 1. PID: вклад P
Задача. Rate-контур: Kp = 10, ошибка \(e = 0{,}05\ \text{рад/с} \). Определить вклад P в управляющее воздействие.
Заданные параметры:
| Параметр | Значение |
|---|---|
| Kp | 10 |
| e | 0,05 рад/с |
Искомые параметры: UP (безразмерное/ед. привода).
Решение.
- UP = Kp·e = 10·0,05 = 0,5.
Вывод. P — «пропорционально ошибке»: 0,05 рад/с (2,9°/с) — «маленький» сдвиг, 0,5 — «мягкая» коррекция. При \(e = 1\ \text{рад/с} (57\ \text{°/с}) \) — \(U_{P} = 10 \): «жёсткая». Kp 10 — типично для rate; для attitude — 0,5–2 (медленнее); для velocity — 0,1–1.
Задача 2. Период контура
Задача. Rate-контур: \(f_{к} = 2\ \text{кГц} \). Определить период шага и число шагов за 1 с манёвра.
Заданные параметры:
| Параметр | Значение |
|---|---|
| f_к | 2 000 Гц |
| t_манёвра | 1 с |
Искомые параметры: T (мс); число шагов.
Решение.
- T = 1/f_к = 1/2000 = 0,0005 с = 0,5 мс.
- Число шагов за 1 с: 1/0,0005 = 2 000.
Вывод. 2 000 решений/с — контур «не видит» манёвр целиком, а «добирает» по 0,5 мс: при запаздывании привода 1–2 мс (статья 86: ESC 8–16 кГц) — 2–4 шага «пустые» (задержка компенсируется D-членом). При 4 кГц — 1–2 шага: быстрее, но нагрузка на MCU ×2.
Задача 3. Размер лога
Задача. Лог: \(f_{лог} = 100\ \text{Гц} \), 20 каналов (32-бит), полёт 1 ч. Определить размер лога.
Заданные параметры:
| Параметр | Значение |
|---|---|
| f_лог | 100 Гц |
| Каналы | 20 (× 4 байта) |
| t | 3 600 с |
Искомые параметры: размер (МБ).
Решение.
- Скорость: \(100\cdot 20\cdot 4 = 8\,000\ \text{байт/с} \).
- Размер: \(8\,000\cdot 3\,600 = 28\,800\,000\ \text{байт} = 28{,}8 МБ \).
Вывод. \(SD 32 ГБ \approx 1\,000 \) ч полёта; 64 ГБ ≈ 2 000 ч. При 100 каналах (полный EKF) — 288 МБ/ч: 100 ГБ ≈ 350 ч. «Полёт + анализ» — 50–100 МБ на 30-минутный миссионный полёт (статья 94).
Задача 4. Запас по RSSI
Задача. Failsafe: RSSI = −95 дБм на 10 км; порог −100 дБм. Определить RSSI на 5 км и запас.
Заданные параметры:
| Параметр | Значение |
|---|---|
| RSSI (10 км) | −95 дБм |
| Порог | −100 дБм |
| Новая дистанция | 5 км |
Искомые параметры: RSSI (5 км); запас (дБ).
Решение.
- Дальность ×0,5 → затухание −6 дБ (закон обратных квадратов, статья 47).
- RSSI \((5\ \text{км}) = -95 + 6 = -89 \) дБм.
- Запас: \(-89 - (-100) = 11\ \text{дБ} \).
Вывод. 11 дБ — «комфортный» запас (порог −100: «почти обрыв»). На 10 км запас 5 дБ — мал (на пределе): failsafe (Loiter/RTL) может сработать на границе зоны. Практика: порог −100 + запас 5–10 дБ = «предупреждение» при −90 (статья 89: 2 уровня).
Задача 5. Обновление прошивки
Задача. Прошивка: 16 МБ, канал 115 200 бит/с. Определить время обновления.
Заданные параметры:
| Параметр | Значение |
|---|---|
| Размер | 16 МБ = 16 777 216 байт |
| R | 115 200 бит/с |
Искомые параметры: время (с, мин).
Решение.
- Биты: \(16\,777\,216\cdot 8 = 134\,217\,728\ \text{бит} \).
- Время: \(\frac{134\,217\,728}{115\,200} = 1\,165\ \text{с} \approx 19{,}4\ \text{мин} \).
Вывод. 20 мин — «запланировать» в регламенте (статья 91: пре-флайт). На 921 600 бит/с — 2,5 мин (но UART ФК обычно 115 200 — ограничение MCU). Резервная копия параметров — 5–10 с (50 КБ на 115 200): всегда перед обновлением.
8. Чек-лист самопроверки знаний
Отметьте пункты, которые вы действительно понимаете и можете применить без подсказок.
| ✓ | Навык | Проверка |
|---|---|---|
| ФК | MCU 400–800 МГц, IMU 1–2, флеш 8–64 МБ, DDR 32–256, UART 6–10, CAN 1–2. | |
| PX4 против ArduPilot | Offboard/EKF2/POSIX против 13 полётных режимов, EKF2 и собственной RTOS. | |
| Каскад | position → velocity → attitude → rate (25 Гц → 4 кГц). | |
| ПИД | Kp (быстро) → Kd (демпфер) → Ki (остаточная ошибка). | |
| Лог | 100 Гц × 20 ch × 4 B = 28,8 МБ/ч; 32 ГБ ≈ 1 000 ч. | |
| Failsafe-цепочка | батарея → радиоканал → GNSS → геозона (статья 89). |
9. Источники
- Wikipedia, «ArduPilot» — полётный контроллер. en.wikipedia.org/wiki/ArduPilot
- Wikipedia, «Kalman filter» — фильтр Калмана. en.wikipedia.org/wiki/Kalman_filter / ru.wikipedia.org/wiki/Фильтр_Калмана (Фильтр Калмана)
- Wikipedia, «Failsafe» — резервный режим. en.wikipedia.org/wiki/Failsafe / ru.wikipedia.org/wiki/Отказобезопасность (Отказобезопасность) Fail-safe / Отказобезопасность / ru.wikipedia.org/wiki/Отказобезопасность (Отказобезопасность)
Проверено: 05.09.2026.
↑ К оглавлению- мод. : Воскресенье, 13 сентября 2026