СПО бортового контроллера Pixhawk - DRONE520/DRONE520-main GitHub Wiki

Цель

СПО бортового контроллера Pixhawk - предполагает написание программы, позволяющую не только управлять перемещением квадрокоптера и использовать уже реализованный в контроллере функционал, но и значительно расширить его, тем самым увеличивая диапазон задач, решаемых дроном.

Архитектура ПО бортового контроллера Pixhawk

Внешний вид ПК Pixhawk4 с перечислением назначения его модулей представлен на рисунке:

  1. Силовой модуль 1
  2. Силовой модуль 2
  3. Телеметрия 1 (подключение радиомодемов для связи с компьютером)
  4. USB (подключение к компьютеру (есть еще боковое гнездо со стандартным микро-юсб разъемом)
  5. Телеметрия 2 (система наложения полетных показателей на видеокартинку при полетах по камере)
  6. Цифровая шина для подключения устройств стандарта CAN
  7. Разъем подключения внешнего компаса
  8. Шина CAN2 (сеть контроллера)
  9. Выход S.Bus для сервоприводов
  10. Входной сигнал приемника радиоуправления (PPM)
  11. Основные выходы (выход I/O PWM)
  12. UART и 12C (для дополнительного GPS)
  13. Вход приемника радиоуправления (DSM/SBUS)
  14. Вход захвата и вход ADC
  15. Модуль GPS
  16. Шина SPI (последовательный периферийный интерфейс)
  17. Выходы AUX (выход FMU PMU)

Программное обеспечение PX4 построено на операционной системе Nuttx, и его общая структура показана на рисунке:

В соответствии с работой программного обеспечения PX4, его можно разделить на четыре уровня:

  1. API приложения: этот интерфейс предоставляется разработчикам, например, для использования ROS (Операционная система реального времени) или DroneAPI (DroneAPI - это библиотека Python для управления дронами, которую можно запускать отдельно на бортовом компьютере или других устройствах. Общаясь с платой управления полетом через последовательный порт или по беспроводной сети), этот слой разработан так, чтобы быть максимально простым, плоским и скрывать его сложность.
  2. Прикладная структура: это сборка по умолчанию (узел) для базового управления полетом. Например, управление ротором, управление вертолетом, управление самолетом и т. д., а также оценка местоположения, командное управление, навигационное управление и т. д.
  3. Библиотеки: этот уровень содержит все системные библиотеки и основные функции управления трафиком. Такие как математическая библиотека, управляющая библиотека, библиотека MAV и так далее.
  4. Операционная система: последний уровень обеспечивает поддержку операционной системы, такую как планирование задач, драйверы оборудования, сеть, UAVCAN и отказоустойчивые системы.

Сборка ПО бортового контроллера Pixhawk

Для модифицирования и дальнейшей сборки прошивки ПК в архитектуре Pixhawk4 предусмотрен PX4 Autopilot – так называемый «полетный стек» (в оригинале flight stack), представляющий из себя открытый исходный код, выложенный в виде git-репозитория и доступный для скачивания и модификации любому пользователю. Данный стек является основной частью общей платформы дрона, включающей также наземную станцию управления QGroundControl, оборудование Pixhawk и библиотеку MAVSDK для интеграции с компьютерами, камерами и сторонним оборудованием по протоколу MAVLink.

Сборка прошивки для ПК используемой нами версии (Pixawk4 v.1.12.3) осуществляется следующим образом (на примере Ubuntu-подобной ОС):

  1. Клонируется репозиторий PX4 Autopilot путем ввода команды:

git clone https://github.com/PX4/PX4-Autopilot.git --recursive

  1. При необходимости в склонированный код вносятся измененияю
  2. Собирается билд (прошивка) кода вместе с изменениями путем ввода команды:

make px4_fmu-v5_default

  1. По окончании вывода в консоль прогресса сборки прошивки она будет сформирована в виде бинарного файла
  2. Для загрузки полученного билда в ПК необходимо подключить его к компьютеру, на котором производилась сборка через USB порт и ввести команду:

make px4_fmu-v4_default upload

  1. Процесс загрузки также выводится в консоль до окончания прошивки ПК собранным билдом.

Способы расширения функциональности ПО бортового контроллера Pixhawk

Каталогическая структура исходного кода показана на рисунке:

Cmake - это инструмент компиляции, build_px4fmu-v2_default - промежуточный статический файл и окончательно сгенерированный файл загрузки после компиляции; src содержит основной код для управления полетом; nuttx-config - это файл конфигурации nuttx; папка tools содержит некоторые инструменты, такие как инструмент загрузки, Nuttx - исходный код операционной системы Nuttx, ROMFS содержит код запуска платы управления полетом. В src. systemcmds: в основном размещенные системные инструменты, инструменты, которые можно запустить через файл запуска или вызвать в nsh. Они включают в себя управление I2C, просмотр измененных параметров, просмотр версии программного обеспечения, калибровку ESC, просмотр производительности системы, обновление загрузчика и другие инструменты, драйверы в основном содержат код драйвера, относящийся к аппаратному обеспечению, такой как папка stm32, включая базовый класс adc.

Процедура создания простейшего функционального модуля ПК включает в себя следующие шаги(на примере модуля с именем hello_sky):

  1. Создание папки с именем, совпадающим с именем нового модуля в одной из директорий по пути PX4-Autopilot/src/. В рамках данной работы папки с тестовыми модулями мы создавали в директории examples. В данном случае создается папка:

PX4-Autopilot/src/examples/hello_sky

  1. Создание файла с расширением. с, куда помещается код, выполняемый модулем. В данном случае создается файл:

PX4-Autopilot/src/examples/hello_sky/hello_sky.c

  1. Создание cmake-файла, внутри которого объявляется модуль, с именем CMakeLists.txt. В соответствии с выбранным примером создается файл:

PX4-Autopilot/src/examples/hello_sky/ CMakeLists.txt

После создания модуля его необходимо добавить в default.cmake файл, находящийся по пути:

PX4-Autopilot/boards/*Платформа*/fmu-v5/default.cmake (в данном случае «Платформа» - px4)

Добавление модуля в указанный выше файл необходимо для того, чтобы он собирался как часть прошивки PX4 и мог вызываться из консоли во время управления дроном.

uORB (Micro Object Request Broker) - очень важный и критический модуль в системе PX4 / Pixhawk, отвечающий за задачу передачи данных всей системы: все данные датчиков, GPS, сигналы PPM и т. д. После того, как чип получен, он передается в каждый модуль через uORB для обработки вычислений. Фактически, uORB - это набор коммуникационных модулей IPC, которые пересекают «процессы».

Pixhawk использует систему ARM реального времени NuttX. UORB - это фактически несколько процессов, которые открывают один и тот же файл устройства, и данные обмениваются и разделяются между процессами через этот файловый узел. Сообщения, которыми процессы обмениваются через именованные шины, называются темами. В Pixhawk тема содержит только один тип сообщений. Общая точка - это тип данных. Каждый процесс может подписывать или публиковать темы, может быть несколько издателей или процесс может подписываться на несколько тем, но на шине всегда есть только одно сообщение

Автоматическая сборка собственного модуля

Для того, чтобы автоматически собирать новый модуль, можно написать .bat или .sh файл.

Нами был реализован .sh файл Install_DRONE520.sh, в нем происходит проверка наличия локального репозитория, если он существует, то можно выполнить следующие действия:

  • Выгрузки обновлений из глобального репозитория: pull
  • Удаления и выгрузки более нового экземпляра: clone
  • Пропуск действий: skip

Если локальный репозиторий не существует, то он автоматически клонируется из глобального репозитория.

Для того, чтобы модуль собирался вместе с прошивкой в .sh файле так же присутствует команда для копирования созданного модуля в ./PixHawk4/src/examples/, далее происходит проверка наличия модуля в ./PixHawk4/boards/px4/fmu-v5/default.cmake, если модуль отсутствует, то он копруется, если же нет .sh файл выводит сообщение о том, что модуль уже добавлен в данную папку. Если же мы собираемся проверить наш модуль в симуляторе, то директория изменяется на: ./PixHawk4/boards/px4/sitl/default.cmake.

Заключение

В ходе работы нами были изучены общие принципы построение архитектуры ПК Pixhawk4, а также получены практические навыки создания собственных функциональных модулей, расширяющих функциональность дрона.