Supported Targets ESP32 ESP32-C2 ESP32-C3 ESP32-S2 ESP32-S3

Aquila - проект самодельного квадрокоптера на ESP32

Вдохновленный в свое время трудами Joop Brokking и в самообразовательных целях пишу проект квадрокоптера на базе ESP32 и FreeRTOS. Современный софт для дронов развивался десятилетиями и разобраться в нем непрофессионалам непросто. Этот проект начинался с уровня "IMU + палка + 2 мотора" и постепенно развился до более-менее летающего уровня. Здесь Вы не найдете никаких прорывов и научной новизны, но если Вам интересно поразбираться как может быть построен софт на базе FreeRTOS для какого-либо робота - здесь можно найти несложные и рабочие конструкции для заимствования.

Элементная база

CPU ESP32-S3-mini
IMU MPU6000 2шт
память для логов W25N01GVZEIG
расширитель портов MCP23017
ШИМ-контроллер PCA9685
монитор напряжения и тока INA219
компас IST8310
лидар Benewake TFmini-S
GPS M9N
RGB LED FL3195
Барометр MS5611

Принципиальная схема всего этого хозяйства в сборе https://cloud.mail.ru/public/YBk3/L4gjcgRvh
Структура задач FreeRTOS https://cloud.mail.ru/public/YBk3/L4gjcgRvh

Дополнительно

По мере возможности комментирую сделанное на youtube-канале @well_techn, хотя в процессе развития проекта ранняя информация может отличаться от актуального кода, это, увы, неизбежно.

Изменения

Дата Изменения
2026/02 - в конце main_flying_cycle дописан кусок, детектирующий "аварию". При фиксации в полете угла по pitch или roll, превышающего установленный предел, или при фиксации акселерометром ускорения более заданного порога в течение заданного времени аварийно отключаются двигатели и запускается задача emergency_mode
- чуть изменена запись логов, чтобы можно было внепланово записывать снимок данных в момент активации emergency_mode
2025/12 - добавлена возможность что-нибудь отправлять по WiFi(telnet) в полете (задача sending_something_over_wifi), хотя это занимает значительную часть ресурсов ядра и нарушает стройность работы, так как WiFi работает на максимальном приоритете
- можно выбирать #define'ами из wt_alldef.h что пишется в логи во внешнюю флэш, чтобы не писать лишнее
- добавлена возможность выводить в telnet сохраненные калибровочные коэффициенты
2025/09 - добавлен Emergency mode - когда в полете теряется связь и железка (предположительно) падает - передатчик Ebyte перенастраивается на минимальную эфирную скорость 2400 и периодически отправляем свои координаты (типа маяк), плюс пищим и моргаем, чтобы легче было найти если что
- добавлен сбор данных с PX4FLow
- добавлена проверка напряжения питания и тока потребления при инициализации
- обновлены error коды
2025/07 - обновлен алгоримт проверки данных от IMU и разная косметика
2025/06 - добавлена опция вывода сервисного меню через WiFi - telnet. Это особенно удобно при калибровке, чтобы не запутываться в кабеле пока вращаем устройства.
В зависимости от определения TELNET_CONF_MODE при входе в режим конфигурации запускается WiFi, при подключении к которому сервисные меню отображаются через примитивный Telnet (задача tasks - configuration_mode_telnet). Все меню, организованные ранее через USB, можно смотреть, например, через Putty, в том числе скачивать логи. В режиме полета WiFi по прежнему не используется.
2025/05 - добавлен 2d фильтр Калмана для вычисления высоты и вертикальной скорости по показаниям барометра и акселерометра (на основе rblilja/AltitudeKF)
- добавлены калибровки акселерометра и магнетометра по методу Magneto на борту МК с сохранением результатов во флеш для последующего использования (на основе трудов bermerlin@gmail.com)
2025/04 - софт перегруппирован и разбит по файлам
- добавлен одноконтурный ПИД на удержание высоты по лидару
- добавлен "сервисный режим" и "сервисные задачи" - при старте с установленной перемычкой заходим в терминальное меню, откуда можно выполнять калибровки, считывание логов и тд
2025/03 - добавлена поддержка Mavlink в рамках вывода телеметрии на Minim-OSD