«Аэродинамический тупик». Часть 8: Цифровой мозг украинского БПЛА «Бобра» бомбившего под Уфой — архитектура ПО, RTOS и алгоритмы обхода РЭБ
Салют честной ИТ-публике vc.ru от уральского пчеловода! С вами снова КиберДед из Давлеканово. Сегодня мы со сверчками тушим свет, включаем отладчики и лезем в святая святых — в исходный код полетного контроллера вражеского БПЛА «Бобёр».
Если кто-то думает, что этот дрон летит на «андроиде» или каком-нибудь простом скрипте, спешу вас разочаровать. Здесь развернута полноценная отказоустойчивая система, умеющая налету фильтровать матрицы вероятностей и перехватывать управление у заклинивших датчиков. Разбираем по слоям.
Слой 1: Базовая операционная система (NuttX RTOS)
В качестве фундамента «мозга» (на базе процессоров STM32H7 или аналогичных ARM Cortex-M) используется NuttX — операционная система реального времени (RTOS), глубоко совместимая со стандартом POSIX.
- Реальное время (Hard Real-Time): В отличие от Windows или Linux, где плеер может «заикнуться», если процессор занят, в NuttX приоритеты задач жестко детерминированы. Задача стабилизации крыла в воздухе имеет наивысший приоритет. Если датчик выдал угловое отклонение, микроконтроллер гарантированно обработает его за фиксированные микросекунды, даже если в этот момент пишется лог на флешку.
- Модульность: Каждый элемент ПО (драйвер компаса, модуль чтения GPS, алгоритм удержания высоты) работает как изолированный легковесный поток (thread). Если из-за наводки РЭБ «отвалится» или зависнет драйвер внешнего магнитометра, ОС не упадет в синий экран — сторожевой таймер (Watchdog) перезапустит конкретный поток за миллисекунды, пока дрон даже не успеет клюнуть носом.
Слой 2:Прикладное ПО (Кастомизированный ArduPilot / PX4)
Поверх NuttX развернут стек управления PX4 или ArduPilot (написанный на C++). Для «Бобра» этот открытый код глубоко переработан под военные нужды: из него вырезаны все гражданские ограничения (вроде бесполетных зон No-Fly Zones вокруг гражданских аэропортов) и добавлены закрытые библиотеки интеграции с CRPA-антеннами (типа «Комета»).Программа делится на три ключевых контура (цикла): [ Датчики: ИНС, GPS, Барометр ] │ ▼ ┌──────────────────────────────────────────────┐ │ 1. Быстрый контур (Fast Loop, ~400 Гц) │ ──► Стабилизация углов (Тангаж, крен, рыскание) └──────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────┐ │ 2. Навигационный контур (Nav Loop, ~50 Гц) │ ──► Расчет траектории и путевых точек (Waypoints) └──────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────┐ │ 3. Финальный контур (Guidance, ~10 Гц) │ ──► Логика наведения и подрыва └──────────────────────────────────────────────┘
- Быстрый контур (Fast Loop, частота ~400 Гц): Опрашивает гироскопы и акселерометры. Его задача — мгновенно отдавать команды на цифровые сервоприводы Savöx/Futaba, чтобы удерживать аппарат в ровном полете, компенсируя порывы ветра.
- Навигационный контур (Nav Loop, частота ~50 Гц): Обсчитывает текущие географические координаты и сопоставляет их с планом полета.
- Контур наведения (Guidance, частота ~10 Гц): Логика верхнего уровня — переключение режимов, проверка достижения финальной точки, перевод в пикирование.
Слой 3: Математическое ядро навигации — Расширенный фильтр Калмана (EKF3)
Вот мы и добрались до самой главной математической «магии» ПО. Как дрон понимает, где он находится, если GPS врет, а гироскопы постепенно накапливают ошибку? За это отвечает алгоритм EKF3 (Extended Kalman Filter).В память контроллера заложена сложная матричная модель физики БПЛА. Фильтр Калмана в реальном времени решает задачу предсказания и коррекции:
- Шаг предсказания: Исходя из оборотов двигателя Mile, угла наклона крыльев и предыдущей скорости, EKF3 рассчитывает: «Через 0.02 секунды я должен быть в точке Х».
- Шаг коррекции: Фильтр опрашивает датчики — спутник говорит одно, барометрический высотомер — другое, инерциалка (ИНС) — третье.
- Нюанс борьбы с РЭБ: Каждому датчику в коде присвоен свой «коэффициент доверия» (допустимая дисперсия). Если дрон влетает в зону действия РЭБ с подменой координат (GPS-спуфинг), спутниковый чип u-blox резко выдает координату, отличающуюся от математической модели на 5 километров. Алгоритм EKF3 моментально видит этот аномальный скачок скорости и вектора, выставляет датчику GPS статус UNTRUSTED (недостоверный) и полностью отключает спутниковую коррекцию, переводя навигацию на чистое интегрирование данных ИНС.
Слой 4: Протоколы связи и полетное задание (Mission План)
Перед стартом в энергонезависимую память (EEPROM/Flash) контроллера через защищенный наземный софт (модифицированный QGroundControl или Mission Planner) загружается бинарный файл полетного задания.
- Формат данных: Каждая точка маршрута — это структура в памяти, содержащая: широту, долготу, целевую высоту (относительно уровня моря или рельефа), радиус принятия точки и команду (например, MAV_CMD_NAV_WAYPOINT).
- Радиомолчание: В ПО «Бобра» на программном уровне полностью заблокирована передача телеметрии по радиоканалам после взлета. Включен режим абсолютного радиомолчания (Stealth Mode). Никаких Wi-Fi, Bluetooth или стандартных радиомодемов MavLink на частотах 433/915 МГц, которые могли бы демаскировать дрон в воздухе. Бортовой приёмник активируется только на прием сигналов спутников через CRPA-антенну.
Слой 5: Алгоритм финального пикирования (Terminal Guidance)Когда EKF3 фиксирует, что дрон вышел на финишную точку над объектом (например, над сектором приемки склада в Чишмах), ПО переходит в финальную фазу:
- Отсечка стабилизации: Автопилот переводит рули высоты в максимальное положение вниз. Дрон переходит в крутое пикирование.
- Ввод поправки на ветер: Программа рассчитывает снос аппарата в последние секунды по разнице между воздушной скоростью (снимается с трубки Пито) и путевой скоростью (посчитанной ИНС). Сервоприводы компенсируют этот снос до самой земли.
- Взведение взрывателя: На определенной высоте (или по датчику перегрузки) логический модуль замыкает цепь питания исполнительного механизма боевой части КЗ-6.
Инженерный итог
Программное обеспечение БПЛА «Бобёр» — это жестко оптимизированный C++ код, где каждый такт процессора на счету. Главная заслуга его программистов — создание адаптивного фильтра Калмана, который способен вовремя распознать «цифровую ложь» систем РЭБ и довести аппарат до цели на одних лишь слепых внутренних гироскопах. И тут мы доходим до внешних ориентиров и как они работают. Но это уже в других частях расследования