Skip to content

About

Open-source flight controller & autopilot for RC airplanes — 12 flight modes, RTH failsafe, black box, MAVLink. ESP32-S3 and STM32H743. Header-only C++, 387 tests.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🇷🇺 Читать на русском  ·  🇬🇧 Read this in English  ·  🇨🇳 阅读中文版  ·  🇪🇸 Lee esto en español

🇮🇳 हिन्दी में पढ़ें  ·  🇸🇦 اقرأ بالعربية  ·  🇧🇷 Leia em português  ·  🇫🇷 Lire en français

🇩🇪 Auf Deutsch lesen  ·  🇯🇵 日本語で読む  ·  🇰🇷 한국어로 읽기  ·  🇸🇪 Läs på svenska

OpenPlane — открытый автопилот для самолётов

522 теста покрытие 94% 33 сборки без предупреждений
ESP32 STM32H743: управляется с пульта MAVLink Лицензия OpenPlane: MIT с условиями — указать автора, без военного применения

Выключили пульт — самолёт сам вернулся домой и кружит над вами.

Это не мультфильм: вся прошивка ведёт модель самолёта в замкнутом контуре — те же байты iBUS на входе, тот же ШИМ на выходе.

Потеря связи: самолёт сам возвращается домой и кружит


⚡ За 30 секунд

Что это Открытый полётный контроллер и автопилот для радиоуправляемых самолётов. Основная плата — STM32H743 (класс плат Pixhawk): на плате DevEBox прошивка уже запущена и управляется с пульта — есть видео, сейчас подключаются датчики. Прежняя основа — ESP32-S3 за ~$10, на ней пройден стенд со всеми датчиками.
Что умеет 12 режимов полёта — от стабилизации до возврата домой, кругов по GPS, запуска с руки, автопосадки и парения в термиках. Трубка Пито из двух дешёвых барометров. Телеметрия MAVLink в QGroundControl и Mission Planner.
Мультикоптеры Та же прошивка — для квадро, гексы, окты, Y6 и X8: описываете раму, винты, моторы и батарею, а PID и фильтры прошивка выводит сама по физической модели. Пока проверено в симуляторе — COPTER.md.
Главная фишка Любой тумблер или крутилка пульта = любая функция. Одна строка в Controls.h — и SwD уже не реверс мотора, а сброс груза.
Почему можно верить 522 автотеста (плюс 9 на самой плате с настоящей SD-картой), 94 % кода под тестами, 33 сборки «плата × датчики» без единого предупреждения, замкнутые симуляции каждого режима.
Честно В воздухе пока был ручной режим (первый прототип). STM32H743 пока проверена на столе, без датчиков. Автопилот проверен на стенде, тестами и симуляциями и ждёт лётных испытаний — статус ниже.

🎛️ Тумблер = функция. Одна строка.

// include/config/Controls.h
constexpr Binding BINDINGS[] = {
    Bind::modes  (Channels::SWC, MODE_MANUAL, MODE_STABILIZE, MODE_AUTO_TAKEOFF),
    Bind::feature(Channels::SWB, Feature::FLAPS),
    Bind::feature(Channels::SWD, Feature::MOTOR_REVERSE),// реверс мотора — только в DISARM
    Bind::knob   (Channels::VRA, Knob::STAB_GAIN),       // "мягче / жёстче" прямо в полёте
    Bind::knob   (Channels::VRB, Knob::CRUISE_SPEED),
};

Хотите на SwD парение в термиках вместо реверса? Bind::mode(Channels::SWD, MODE_SOARING). Сброс груза на SwB? Bind::feature(Channels::SWB, Feature::PAYLOAD_DROP). Ошиблись — например, повесили два режима на один тумблер или заняли стик — сборка не пройдёт: таблицу проверяет компилятор (static_assert). При включении борт сам печатает, что на каком тумблере.

12 режимов · 11 функций · 8 крутилок — всё с примерами в справочнике автопилота.


✈️ Что умеет автопилот

Режим Суть
🕹️ MANUAL рули = стики, как без полётника
🧭 STABILIZE стик задаёт угол; отпустил — самолёт сам в горизонте
📏 ALT_HOLD + держит высоту по барометру
🌀 ACRO стик задаёт скорость вращения — для фигур
🛣️ CRUISE курс, высота и скорость держатся сами; стики только поправляют
⭕ LOITER круги над точкой по GPS (радиус — крутилкой)
🏠 RTH домой на 40 м и круги над головой; сам включается при потере связи
🛫 AUTO_TAKEOFF взлёт с полосы: хвостовое или носовое колесо, хвост вверх, отрывает крыло
🤾 LAUNCH запуск с руки: мотор после броска, набор высоты
🛬 AUTO_LAND планирование и выравнивание у земли
🦅 SOARING мотор выключен, находит термики и кружит в них
🆘 RESCUE «спасите»: крылья ровно, нос вверх — из любой спирали

Плюс: калибровка самолёта на земле с пульта (горизонт и стояночный угол, этапы — сигналами мотора и рулей), геозабор, автотриммер «кривого» самолёта, координация разворота, защита от сваливания по трубке Пито, закрылки и воздушный тормоз, сброс груза, стабилизированная камера, пищалка «ищите меня в траве».


📈 Каждый режим летает — в замкнутом контуре

Не «функция вернула число», а полёт: пульт → кадр iBUS → прошивка → ШИМ → отклонения рулей → модель самолёта с подъёмной силой, сваливанием, ветром и термиками → датчики → снова прошивка. 17 таких полётов — часть обычных тестов (pio test -e native).

RTH, LOITER, геозабор и потеря связи — вид сверху

Парение: набор высоты в термике без мотора Выход из крена и из спирали
🦅 Нашёл термик сам и набрал высоту с выключенным мотором — вариометр полной энергии не путает «ручку на себя» с восходящим потоком. 🆘 Крен 60° — и через секунды горизонт. RESCUE вытаскивает из спирали с креном 70° и носом −40°.
Запуск с руки и автопосадка Трубка Пито на двух барометрах
🤾 Бросок с руки → мотор только после того, как рука ушла от винта → набор. 🛬 Посадка: планирование и выравнивание на 3 м. 🌬️ Скорость по трубке из двух шумных барометров со сдвигом 150 Па между чипами — ошибка меньше 0.5 м/с.

🚁 Мультикоптеры: описал коптер — настройка готова

Квадро, гекса, окта, Y6, X8 — на тех же платах. PID, фильтры, холостые и расходы руками не подбираются: в CopterConfig.h — рама, винт, мотор, батарея и масса (или готовая сборка из каталога: от вупа 65 мм до гексы с винтами 15"), остальное прошивка выводит сама по модели мотора и винта — с запасом, который держит коптер, у которого тяга и инерция вдвое «не те». В полёте сама учит газ висения и ведёт режекторы за оборотами моторов.

Режимы ACRO (airmode), HORIZON, ANGLE, ALT_HOLD; на тумблерах — таблица aux как в Betaflight (по умолчанию ARM — SwA, режим — SwC), порядок каналов — map
Настройки как в Betaflight CLI: set/get/diff/save, 4 PID-профиля и 4 профиля расходов, PID в единицах BF, diff из BF вставляется целиком; описание коптера — тоже настройки; протокол @params/@set для приложения
Защиты ARM только при всех проверках (каждая причина отказа — кодом, как в status BF, и словами), потеря связи → горизонт, снижение и DISARM на земле, переворот и отказ мотора → моторы стоп
Регуляторы PWM, OneShot125/42, Multishot; DShot — следующий этап
Полётники Matek H743, DevEBox H743 и почти любой F405 из-под Betaflight (ICM-42688-P, SPL06/DPS310): распиновку tools/bf_board.py снимает с самой платы — даже если её таргета нет ни в одном репозитории; родная прошивка сохраняется по DFU
FPV видеопередатчик по SmartAudio/Tramp с потолком мощности и уровнем с тумблера, OSD (AT7456E): батарея, ток, мА·ч, время, дом, предупреждения; телеметрия в пульт по CRSF; GPS, компас и точка дома; Li-ion с его порогами; PINIO (камеры, 12 В); пищалка
Проверено 12 сборок × 3 варианта «не той» физики в симуляторе с 6 степенями свободы: висение ±0.3 м, наклон по стику за 0.14–0.35 с, посадка при потере связи. В воздухе — ещё нет
pio run -e matek-h743-quad -t upload    # потом в консоли: t — настройка, m — моторы (без пропеллеров!)

Подробно — COPTER.md.


🌬️ Трубка Пито за копейки

Нормальный датчик воздушной скорости стоит как половина полётника. Здесь — два барометра: BMP581 в трубке (полное давление) и основной барометр в фюзеляже (статика). Прошивка сама обнуляет разницу чипов на земле, фильтрует, считает плотность воздуха по высоте и температуре и замечает перепутанные шланги. Что это даёт: CRUISE держит воздушную скорость, а не газ; защита от сваливания; честная скорость в телеметрии. Сборка — в справочнике.


📡 Наземная станция: браузер или QGroundControl

Веб-дашборд: датчики, автопилот, навигация ESP32 — веб-дашборд прямо с борта. Точка доступа OpenPlane-Debug, адрес 192.168.4.1: каналы пульта, выходы, все датчики, режим, навигация, смена режима и ПИД на лету. Без приложений и лишнего железа.

STM32H743 — MAVLink по радиомодему. QGroundControl и Mission Planner видят борт как самолёт ArduPilot: горизонт, карта с домом, скорость по трубке, режимы именами ArduPlane, ПИД из окна параметров, смена режима кнопкой. ARM с земли — нельзя, только тумблером: так безопаснее.

Кадры MAVLink побайтно сверены с эталонной pymavlink.

📼 Чёрный ящик

Плата пишет каждый полёт: IMU на 500 Гц, углы и решения автопилота, ПИД, все выходы, стики, барометр, компас, GPS, батарея и события — с ARM и газа до посадки, с 10 секундами до старта. ESP32-S3 — во встроенный флеш (13.9 МБ, около 11 минут), STM32H743 — на SD-карту (64 МБ — около часа; карта остаётся обычной FAT32, прошивка пишет в заранее созданный файл BLACKBOX.BIN). Стирание — только на земле. После полёта python tools/blackbox.py download скачивает полёт по USB и раскладывает в CSV; с SD-карты полёты разбираются и без платы: python tools/blackbox.py ring E:/BLACKBOX.BIN. Подробно — BLACKBOX.md.


🔩 Железо: одна прошивка — пять плат, тринадцать датчиков

Плата Статус Что проверено
STM32H743VIT6 ✅ основная · 🔧 DevEBox, датчики подключаются + 🧪 тесты на плате: загрузка, консоль по USB, SD-карта и чёрный ящик (тесты на плате), приём iBUS, ARM и управление сервами и мотором с пульта (запуск на видео); на ПК — вся прошивка: задачи FreeRTOS, флеш, MAVLink, I2C и SPI. Датчики к плате ещё не подключали
Matek H743-WING V3 🧪 тесты · готовый полётник вся прошивка на ПК с датчиками платы (ICM-42688-P, DPS310), внешней шиной I2C и калибровкой установки IMU; на настоящей плате ещё не проверяли
ESP32-S3 N16R8 ✅ прежняя основная, на стенде все датчики, сервы, iBUS, OLED, дашборд вживую; прошивка целиком — в тестах
ESP32 38-pin 🧪 тесты прошивка целиком в тестах с набором ICM-45686
ESP32-C3 SuperMini ✈️ летал (ручной) первый прототип; сборка всех наборов
Датчик Что это Шины
LSM6DSV + QMC6309 IMU + компас (модуль) I2C / SPI
ICM-45686 + QMC6309 IMU + компас (замена) I2C / SPI
SPL06-001 барометр фюзеляжа I2C / SPI
DPS310 барометр на плате Matek H743 I2C
BMP581 основной барометр и барометр в трубке Пито I2C / SPI
MPU6050/6500, ICM-42688, BMP388, BME280, QMC5883P/L стендовые и прежние I2C / SPI
u-blox M10 GPS, 10 Гц, UBX UART
iBUS · SBUS · CRSF приёмник пульта: FlySky, FrSky, Futaba, RadioMaster, ExpressLRS, TBS Crossfire UART

Датчик меняется одной строкой (SENSOR_KIT_LSM6DSV_PITOT), плата — одним флагом сборки. Все 4 платы × 7 наборов датчиков и Matek H743 со своим набором собираются без предупреждений: tools/build_matrix.sh.

Стенд: ESP32-S3 со всеми датчиками Тест тяги мотора
Стенд на ESP32-S3: IMU, барометр, компас, OLED, сервы, приёмник. Тест винтомоторной группы.

🎥 STM32H743 ожила на плате

Прошивка для STM32H743 запущена на плате DevEBox без единого датчика и управляется с обычного пульта: приёмник по iBUS, ARM, сервы и мотор отвечают на стики и тумблеры в ручном режиме. Весь запуск снят на видео.

▶️ Смотреть запуск на видео

Что это доказывает: тракт «пульт → iBUS → прошивка → ШИМ» работает на настоящем железе, а не только в тестах. Что ещё не доказано: датчики (IMU, барометр, GPS) к этой плате не подключали, поэтому режимы автопилота на ней пока не пробовались.


🧪 Качество, которое можно проверить

522 автотеста модули, драйверы по регистрам чипов, замкнутые полёты, прошивка ESP32 и STM32 целиком на ПК; плюс 9 тестов на самой плате STM32 с настоящей SD-картой
94.1 % строк, 85.2 % ветвлений покрытие gcovr, включая код STM32
33/33 сборки 4 платы × 7 наборов датчиков + Matek H743, -Wall -Wextra, ноль предупреждений; плюс 2 сборки коптера
0 замечаний cppcheck и clang-tidy по всему коду
Эталоны, а не копии кода формулы датчиков — по датащитам (Bosch, ST, TDK, Goertek), MAVLink — по pymavlink
pio test -e native -e native-stm32   # все тесты, ~1.5 минуты, железо не нужно

Подробно — TESTING.md.


🧠 Как устроено

flowchart LR
    RC["Пульт FS-i6<br/>iBUS"] --> SW["PilotSwitches<br/>Controls.h"]
    SENS["IMU · барометры · компас<br/>GPS · трубка Пито"] --> AP
    SW --> AP["Autopilot<br/>12 режимов · навигация<br/>failsafe · геозабор"]
    AP --> FC["FlightController<br/>ARM · микшер · закрылки"]
    FC --> OUT["Сервы · ESC<br/>груз · камера"]
    AP -.-> TLM["Дашборд Wi-Fi<br/>MAVLink · OLED"]
Loading
  • Header-only C++, одна единица трансляции, никакой динамической памяти в полётном контуре. Любитель .h/.cpp? Для вас — параллельная ветка feature/split-headers: генерируется из этой скриптом, прошивка с LTO того же размера.
  • HAL — единственный слой, знающий MCU: новая плата — это новый Board, а не переписанный автопилот.
  • Драйвер датчика не знает шину: один класс работает по I2C и по SPI.
  • Безопасность — порядком операций: потеря связи > ARM > режим > газ; ни один режим не протащит газ мимо ARM.

Подробно — ARCHITECTURE.md.


🚀 Быстрый старт

Проще всего — OpenPlane Studio: приложение для Windows настраивает плату под ваш самолёт по шагам, собирает прошивку и прошивает её одной кнопкой, а потом помогает наладить всё на земле по живым данным с платы. Из командной строки:

pip install platformio
git clone https://github.com/damir-lebedev/OpenPlaneProject && cd OpenPlaneProject
pio run -e stm32h743-devebox -t upload                    # DevEBox H743: USB DFU, консоль по USB
pio run -e matek-h743 -t upload                           # Matek H743-WING V3: кнопка BOOT + USB
pio run -e esp32-s3 -t upload && pio device monitor     # ESP32-S3
pio run -e stm32h743 -t upload                            # STM32H743 (ST-Link)
pio run -e matek-h743-quad -t upload                      # мультикоптер на Matek H743 (docs/COPTER.md)

DevEBox: на плате нет кнопки BOOT0 — перед первой заливкой соедините пин BT0 с 3V3 и нажмите RST; потом клавиша D в консоли сама перезагружает плату в загрузчик (подробно).

В мониторе порта: h — меню, b — какие чипы видны на шинах, s — датчики, p — проверка выходов (пропеллер снять!). Дальше — гайд пилота.


🟢 Честный статус

Что Где проверено
Ручное управление, микшер ✈️ в полёте (первый прототип, C3)
ARM, failsafe, закрылки, сервы, мотор 🔧 на стенде (S3)
Двунаправленный ESC BLHeli 80A, реверс только в DISARM 🧪 тесты; с регулятором ещё не проверяли
Автовзлёт с хвостовым и носовым колесом, калибровка на земле с пульта, сигналы мотором и рулями 🧪 тесты и симуляции с моделью шасси; мелодию ESC после паузы импульсов — проверить на стенде
STABILIZE 🔧 на стенде: рули отвечают на наклоны в правильную сторону
Датчики стенда (MPU6500, BMP388, QMC5883P), OLED, дашборд 🔧 на стенде
Остальные режимы, навигация, трубка Пито, MAVLink 🧪 тесты и замкнутые симуляции
Новые датчики (LSM6DSV, ICM-45686, QMC6309, SPL06, BMP581) 🧪 регистровые эмуляторы по датащитам
STM32H743: SD-карта, чёрный ящик, консоль по USB 🔧 на плате DevEBox (тесты на плате)
STM32H743: iBUS, ARM, ШИМ на серво и мотор, ручное управление 🔧 на плате без датчиков, снято на видео
Приёмники SBUS и CRSF (ExpressLRS) 🧪 тесты: разбор кадров, failsafe, UART с инверсией; с настоящим приёмником ещё не проверяли
Matek H743-WING V3: датчики на плате, внешняя шина I2C, калибровка установки IMU 🧪 вся прошивка на ПК; на настоящей плате ещё не проверяли
STM32H743: датчики (IMU, барометр, компас, GPS) и режимы автопилота 🧪 вся прошивка на ПК; к плате датчики ещё не подключали
Мультикоптеры: настройка из описания, режимы, failsafe, защиты 🧪 симулятор с 6 степенями свободы (12 сборок × 3 физики) и вся прошивка на ПК; в воздухе ещё не было

Модель самолёта в симуляциях упрощённая, коэффициенты — стартовые. Каждый новый режим сначала пробуется на высоте, с пальцем на тумблере MANUAL.


🗺️ Дорожная карта

  • Ручное управление, ARM, failsafe, объектная прошивка, веб-дашборд
  • Стенд ESP32-S3 со всеми датчиками — вживую
  • 12 режимов, навигация по GPS, RTH при потере связи, геозабор
  • Тумблеры и крутилки одной строкой, сброс груза, камера, автотриммер
  • Трубка Пито из двух барометров, защита от сваливания
  • Новые датчики: LSM6DSV, ICM-45686, QMC6309, SPL06, BMP581
  • STM32H743: полная прошивка, MAVLink, настройки во флеше
  • Замкнутые симуляции всех режимов, прошивка целиком в тестах
  • Чёрный ящик: полёт во флеш (ESP32-S3) и на SD-карту (STM32H743), выгрузка и разбор в CSV
  • STM32H743 запущена на плате: пульт → iBUS → сервы и мотор (без датчиков, на видео)
  • Приложение OpenPlane Studio: настройка по шагам, прошивка одной кнопкой, наладка на земле
  • Приёмники SBUS и CRSF (ExpressLRS, TBS Crossfire) рядом с iBUS — выбор в Config.h или в OpenPlane Studio
  • Готовый полётник Matek H743-WING V3: датчики на плате, прошивка одной кнопкой (на железе ещё не проверяли)
  • Мультикоптеры (квадро, гекса, окта, Y6, X8): настройка из описания коптера, проверено в симуляторе
  • STM32H743: подключить датчики и пройти стенд так же, как ESP32-S3
  • Коптер: DShot, цикл 4 кГц, чёрный ящик и MAVLink, лётные испытания
  • Популярные полётники на STM32F405: SpeedyBee F405 WING, Matek F405-WTE
  • Лётные испытания автопилота на новом планере
  • Своя плата полётника (FC_BOARD.md) на STM32H743
  • Полёт по маршрутным точкам, миссии MAVLink
  • Адаптивная обратная связь (заготовка уже проверена в симуляции)
  • Датчик тока и батареи, телеметрия на пульт (iBUS-SENS)
  • Автономная доставка: маршрут → сброс груза → домой

Подробно — ROADMAP.md.


💼 Для партнёров и инвесторов

Небольшие самолёты-доставщики и мониторинговые борта — это либо закрытые дорогие платформы, либо разрозненные хобби-проекты. OpenPlane целится в середину: открытый, проверяемый автопилот на массовом железе, где каждая функция покрыта тестами и может быть адаптирована под задачу — доставка медикаментов в труднодоступные места, мониторинг полей и лесов, поисковые работы.

Что уже сделано на свои: архитектура, которая переносится между платами без переписывания; автопилот с полным набором режимов; инфраструктура тестов, на которой новые функции появляются быстро и не ломают старые. Что ускорят ресурсы: лётные испытания, своя плата полётника на STM32H743, полёт по маршруту и сброс груза. Куда и зачем — ROADMAP.md.


📚 Документация

Документ Для кого
COPTER.md мультикоптеры: каталог сборок, свой коптер, первый запуск, режимы, защиты, как проверено
AUTOPILOT_GUIDE.md пилоту: каждый режим, функция и крутилка, как повесить на тумблер, трубка Пито, наземная станция
PILOT_GUIDE.md сборка, распиновка, пульт, failsafe, первый полёт
DEVELOPER_GUIDE.md разработчику: файлы, знаки, API, как добавить датчик, режим, плату
ARCHITECTURE.md слои, задачи, такт управления, автоматы
TESTING.md тесты, симуляции, покрытие, анализ
reference/ справочник по каждому классу
FC_BOARD.md · ROADMAP.md плата полётника · куда движется проект
airframe/ планер Astro-Cargo: проект Fusion 360 и STL для печати, известные недостатки версии v2

Приложение: OpenPlane Studio — настройка платы по шагам, сборка и прошивка одной кнопкой, наладка на земле по живым данным; интерфейс на русском и английском.

Связанный проект: esp32-rc-joystick — пульт FS-i6 как USB-джойстик для симулятора на той же ESP32-S3: сначала налетать часы в симуляторе, потом — в поле.


🤝 Участие

Нужны руки и головы: аэродинамика и авиамоделизм, 3D-печать и прочность, встраиваемый C++, датчики и автопилоты, наземные интерфейсы. Issues и pull request'ы — в ветку main; начать — с DEVELOPER_GUIDE.md.

📜 Лицензия

OpenPlane License — лицензия на основе MIT с дополнительными условиями. Код, документацию и файлы модели можно использовать, копировать, менять и продавать, в том числе в коммерческих продуктах. Условия такие:

  1. Укажите автора — Damir Lebedev (Damn / Проклятый). Имя должно стоять там, где его увидят пользователи вашего продукта: в документации, README или на странице «О проекте». Текст лицензии оставляйте вместе с кодом.
  2. Военное применение запрещено. Нельзя использовать проект для армий и военизированных организаций, на войне, при создании оружия, боеприпасов, систем доставки и наведения.
  3. Нельзя намеренно вредить людям и имуществу без их предварительного письменного согласия на этот вред. Свою собственную технику ломать можно, если это никому не угрожает: например, стрелять из пневматического пистолета по собственному дрону. Калечить и убивать людей нельзя.
  4. Соблюдайте технику безопасности и законы при сборке, испытаниях и полётах.

Если условия нарушены, разрешение на использование прекращается. Из-за запретов на отдельные виды использования это не «открытая» лицензия в понимании OSI: код доступен для чтения, копирования и изменения, но формально проект относится к source-available, а не к open source.

Юридическую силу имеет только английский текст в файле LICENSE: переводы лицензии на другие языки даны для удобства.

Прошивка управляет летательным аппаратом и не сертифицирована. Всё, что вы с ней делаете, — на ваш страх и риск; автор ответственности не несёт.

OpenPlane © 2026 Damir Lebedev (Damn / Проклятый) — https://github.com/damir-lebedev/OpenPlaneProject

Первый прототип сломался в первом же полёте — поэтому здесь всё на виду: код, тесты, проблемы. Собирайте, ломайте, чините вместе с нами.

About

Open-source flight controller & autopilot for RC airplanes — 12 flight modes, RTH failsafe, black box, MAVLink. ESP32-S3 and STM32H743. Header-only C++, 387 tests.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages