Описание разработанного программного обеспечения Программное обеспечение (далее ПО) для дрона «гексакоптерного» типа в своей основе работает с микроконтроллером STM32F407. В основу архитектуры заложены сильно модифицированные исходники полетного контроллера INAV. Трудоемкость ПО приблизилось к 10 000 чел.\час на разработку основной, «релизной» версии, доработки же ведутся по настоящее время. При разработке ПО, в основном, были задействованы специалисты уровня «Senior», разработка велась на языке программирования С++. ПО представляет собой несколько модулей: 1) 2) 3) 4) 5) 6) Модуль управления полетом и стабилизации летательного аппарата; Модуль настройки чувствительности управляющих механизмом на основе нейросети; Модуль навигации; Модуль связи с наземной станцией; Модуль наземной станции; Модуль автоматического взлета и посадки; Описание модулей: 1) Модуль управления полетом. Данный модуль создан на языке С++ для контроллера STM32F407. В основу архитектуры заложены сильно модифицированные исходники полетного контроллера INAV. Передача информации с датчиков (гироскоп, акселерометр, барометр и др.) происходит по последовательной асимметричной шине «I2C», используя собственно разработанные библиотеки. В основе алгоритмов фильтрации («Процесс фильтрации заключается в удалении лишнего шума из сигнала от гироскопа») заложены принципы, используемые в открытом программном обеспечении контроллера полета «BetaFlight» и адаптированы для нашего полетного контроллера. 2) Модуль настройки чувствительности управляющих механизмов на основе нейросети. Данный модуль создан на языке С++ для контроллера STM32F407. Разработан полностью с нуля, сторонних библиотек не использовалось. В основе используется алгоритм настройки и подстройки PID-параметров в режиме реального времени прямо в полете. Так как дрон планировался грузовым, чувствительность элементов управления должна быть разная, в зависимости от внешних факторов, а также от загрузки дрона. Табличный метод плохо подходил для данной задачи, так как необходимо было провести тесты всех вариантов загрузок, и множества вариантов внешних воздействий. Наше решение – разработать эмулятор, в котором нейросеть научиться реагировать на внешние воздействия и загрузку летательного аппарата в режиме реального времени. Для связи между модулями нейросети и модулем управления полетом используется последовательный синхронный стандарт передачи данных в режиме полного дуплекса (далее «шина SPI»). 3) Модуль навигации. Данный модуль создан на языке С++ для контроллера STM32F407. В основу архитектуры заложены сильно модифицированные исходники полетного контроллера INAV. Для связи с GPS и GLONASS блоками используется физический протокол передачи данных УАПП (универсальный асинхронный приемопередатчик, далее «шина UART»). Связь с модулем управления полетом происходит по шине SPI. 4) Модуль связи с наземной станцией. Для связи с наземной станцией, получением команд и передачей параметров используется специализированный модем (433 МГц), связанный с контроллером по шине UART. Библиотека для управления модемом и протокол обмена с наземной станцией написан полностью с нуля. Для передачи данных используется шифрование, используемая библиотека: Legacy STM32 cryptographic library. 5) Модуль наземной станции. Наземная станция представляет собой кресло оператора с двумя стиками управления и двумя мониторами 40 дюймов fullHD. Всем процессом управляет микроконтроллер STM32F407, для связи с дроном используется специализированный модем (433 МГц). Библиотеки для работы со стиками и процесс прямого вывода на экраны (формирование fullHD изображения) выполнены самостоятельно, чужие алгоритмы не использовались. Из особенностей можно отметить формирование изображения непосредственно на микроконтроллере и вывод через VGA-адаптер прямо на мониторы. Для вывода и формирования изображения не используются сторонние библиотеки. Также не используются операционные системы Linux, Windows и прочие подобные системы, так как они долго грузятся и обладают низкой надежностью. Для создания полетного задания используется программное обеспечение, написанное на языке программирования C++ с использованием фреймворка для разработки кроссплатформенного программного обеспечения «Qt». В основе – карта местности (за счет спутниковой карты Яндекса), где реперными точками устанавливаются зоны посадки и, линиями, маршрут дрона. Оператор настраивает маршрут и выдает команду дрону на исполнение. Дрон принимает этот пакет команд, и начинает выполнение, а именно – полет по программе. Со стороны оператора – ПО на базе ubuntu, со стороны дроны – модули управления, навигации и посадки. 6) Модуль автоматического взлета и посадки В основе модуля камера, связанная с микроконтроллером. Происходит wavelet-анализ кадра и выявляются маячки, установленные на площадке для посадки дрона. Алгоритмами CV (Computer Vision) удерживается площадка в поле зрения, а также в нужной ориентации. Также данный модуль управляет режимом аварийной посадки. В случае сбоя по показанием какого-либо из датчиков (детонация двигателя, давление в системе гидравлики), происходит поиск мест для аварийной посадки, с помощью специальной камеры, установленной на подвесе снизу дрона и алгоритмов ИИ. Ищется относительно ровный участок поверхности подходящего размера, на который можно осуществить посадку. Данная часть модуля пока не протестирована. 1. Разработан исходный программный продукт и оборудование для его применения в составе летательного аппарата. 2. Спроектирован и изготовлен стенд для испытаний программного обеспечения системы управления силовой установки; 3. Изготовлен прототип дрона с гидромеханической трансмиссией для испытаний программного обеспечения системы управления. P.S. В изначальных презентациях для ПО для полетного контроллера упоминается микроконтроллер К1986ВЕ92QI производства компании АО «ППК Миландр»». В данной справке упоминается контроллер STM32F407. Это разные, но совместимые контроллеры. Изначально должен быть отечественный. Но после связи с АО «ППК Миландр», мы отказались от использования отечественного контроллера.