Расширение функциональности бортового ПО БПЛА - DRONE520/RF-BAS-COMMON GitHub Wiki

1 Введение

Pixhawk [1] — это открытая аппаратная платформа для автономных летательных аппаратов, роботов и других систем. Бортовое ПО PX4 [2], разработанное для Pixhawk, является модульным, гибким и поддерживает широкий спектр аппаратных конфигураций. Оно используется в дронах, подводных аппаратах, наземных роботах и IoT-устройствах. Основная цель PX4 — предоставить надежную основу для автономных операций, включая навигацию, управление и коммуникацию. Открытость платформы позволяет разработчикам адаптировать и расширять её функционал под специфические задачи, что делает PX4 популярным в научных, коммерческих и любительских проектах.

2 Цели расширения функциональности бортового ПО БПЛА

Расширение функционала PX4 преследует следующие цели:

  1. Интеграция новых устройств: Подключение нестандартных датчиков, камер или исполнительных механизмов.
  2. Поддержка новых типов аппаратов: Адаптация ПО для работы с нестандартными дронами (например, винтокрылы или гибридные системы).
  3. Улучшение алгоритмов: Модификация алгоритмов навигации, управления или компьютерного зрения.
  4. Добавление пользовательских режимов полёта: Создание специализированных сценариев (например, автоматическая съёмка или доставка грузов).
  5. Оптимизация ресурсов: Настройка ПО для работы на ограниченных вычислительных мощностях.

3 Архитектура бортового ПО ArduPilot

Общая архитектура PX4

На рис. 1 показана архитектура PX4 [3] на базе контроллера полета.

image
Рис. 1. Архитектура PX4

В левой части рис. 1 показан программный стек, который горизонтально выровнен (приблизительно) с аппаратными частями. Наземная станция компьютера обычно работает под управлением QGroundControl (или другого программного обеспечения наземной станции).

Архитектура ПО

Архитектура ПО разделена на два ключевых слоя: Полетный стек (Flight Stack) и Промежуточное ПО (Middleware), связанные через высокоэффективную систему обмена сообщениями uORB [4].

Общая архитектура ПО

  1. Полетный стек (Flight Stack):
  • Управляет полетными алгоритмами: навигация, контроль позиции/скорости, планирование миссий.

  • Состоит из независимых модулей (например, mc_att_control для управления углами коптера, ekf2 для оценки положения).

  1. Промежуточное ПО (Middleware):
  • Обеспечивает инфраструктуру для связи модулей и работы с железом.

  • Включает драйверы датчиков, коммуникационные протоколы (MAVLink), и систему сообщений uORB.

  1. ОС (RTOS):
  • Запускается на реальном времени (NuttX) или Linux, управляя задачами и ресурсами.

uORB

uORB — легковесный механизм публикации/подписки (Pub-Sub), обеспечивающий обмен данными между модулями. Ключевые принципы:

  • Асинхронность: Модули не блокируются при ожидании данных.
  • Централизованный менеджмент: Брокер управляет топиками (каналами данных).
  • Кольцевые буферы: Для каждого топика создается буфер, хранящий последние сообщения.
  • Минимальные накладные расходы: Оптимизирован для ресурсо-ограниченных систем.

Обмен данными через uORB

  1. Определение топиков

Каждый тип данных (например, показания гироскопа, позиция дрона) имеет уникальный топик.

Топики описываются в .msg-файлах

  1. Публикация данных (Publisher)

Модуль-издатель (например, драйвер гироскопа) объявляет топик и отправляет данные

// Объявление топика
orb_advert_t pub = orb_advertise(ORB_ID(sensor_gyro), &gyro_data);

// Публикация данных
orb_publish(ORB_ID(sensor_gyro), pub, &new_gyro_data);
  1. Подписка на данные (Subscriber)

Модуль-подписчик (например, фильтр EKF2) запрашивает данные из топика

// Подписка на топик
int sub = orb_subscribe(ORB_ID(sensor_gyro));

// Чтение данных
sensor_gyro_s gyro_data;
orb_copy(ORB_ID(sensor_gyro), sub, &gyro_data);

Особенности:

  1. Множественные подписчики: Один топик может читаться несколькими модулями.
  2. Буферизация: uORB хранит несколько последних сообщений (защита от потерь данных).
  3. Периодичность: Модули могут опрашивать данные по таймеру или событию.
  4. Синхронизация: Данные автоматически защищаются от гонок (semaphore-based).

4 Возможности и порядок расширения функциональности бортового ПО БПЛА

Возможности:

  • Создание новых модулей (например, для обработки данных с кастомных датчиков).
  • Модификация существующих алгоритмов (PID-регуляторы, фильтры).
  • Добавление драйверов для периферии.
  • Внедрение новых режимов полёта через MAVLink-команды.

Настройка среды разработки:

Поддерживаемыми платформами для разработки PX4 являются:

  • Ubuntu Linux (22.04/20.04/18.04)
  • Windows (10/11) — через WSL2
  • Мак ОС

Скачать исходный код PX4 с Github [5]

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

Установить Visual Studio Code

Установить QGroundControl [6]

Создание модуля

Структура модуля:

Создайте папку в src/modules/your_module

Добавьте в созданную папку файлы:

  • your_module.cpp – основной код
  • CMakeLists.txt – конфигурация сборки

Заполните их, скопировав код из примера ниже или реализуйте свой код.

Сборка и загрузка новой прошивки

Для включения компиляции приложения в прошивку введите следующую команду

make px4_fmu-v5_default boardconfig

В открывшемся меню выберите examples и поставьте галочку напротив названия вашего модуля. Для сборки прошивки введите команду

make px4_fmu-v5_default

Если сборка прошла успешно, можно загружать новую прошивку в устройство. Для этого подключите полетный контроллер к ПК через USB кабель. Далее введите команду

make px4_fmu-v5_default upload

Далее будет произведен поиск подключенного полетного контроллера

Loaded firmware for X,X, waiting for the bootloader...

Если вы подключили его правильно начнется процесс загрузки новой прошивки

Erase  : [====================] 100.0%

Program: [====================] 100.0%

Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload

Остается только дождаться окончания загрузки.

Запуск нового модуля

Для запуска модуля можно воспользоваться MAVLink Console. Для ее запуска откройте QGroundControl, перейдите в раздел Analyze Tools. Воспользуйтесь командой

nsh> help

Вы увидите список модулей, среди которых должен быть ваш. Запустите его из консоли.

5 Пример реализации расширения функциональности бортового ПО БПЛА

Для примера реализуем модуль, осуществляющий подписку на датчики асселерометров и вывод значений в консоль.

1.Создайте папку

src/modules/accelerometers

  1. Создайте новый файл C в этом каталоге под названием accelerometers.c и скопируйте в него код
#include <poll.h>
#include <uORB/topics/sensor_combined.h>
..
int sensor_sub_fd = orb_subscribe(ORB_ID(sensor_combined));

/* one could wait for multiple topics with this technique, just using one here */
px4_pollfd_struct_t fds[] = {
    { .fd = sensor_sub_fd,   .events = POLLIN },
};

while (true) {
	/* wait for sensor update of 1 file descriptor for 1000 ms (1 second) */
	int poll_ret = px4_poll(fds, 1, 1000);
	..
	if (fds[0].revents & POLLIN) {
		/* obtained data for the first file descriptor */
		struct sensor_combined_s raw;
		/* copy sensors raw data into local buffer */
		orb_copy(ORB_ID(sensor_combined), sensor_sub_fd, &raw);
		PX4_INFO("Accelerometer:\t%8.4f\t%8.4f\t%8.4f",
					(double)raw.accelerometer_m_s2[0],
					(double)raw.accelerometer_m_s2[1],
					(double)raw.accelerometer_m_s2[2]);
	}
}
  1. Создайте и откройте новый файл определения Camake под названием CMakeLists.txt. Копируйте текст ниже:
px4_add_module(
	MODULE examples__accelerometers
	MAIN accelerometers
	STACK_MAIN 2000
	SRCS
		accelerometers.c
	DEPENDS
	)
  1. Создайте и откройте новый файл определения Kconfig под названием Kconfig
menuconfig EXAMPLES_ACCELEROMETRS
	bool "accelerometrs"
	default n
	---help---
		Enable support for accelerometrs

На этом этапе написание модуля завершено. Добавьте его в сборку, соберите и загрузите, как в предыдущем пункте. При запуске вы увидите в консоли

[accelerometrs] Accelerometer:   0.0483          0.0821          0.0332
[accelerometrs] Accelerometer:   0.0486          0.0820          0.0336
[accelerometrs] Accelerometer:   0.0487          0.0819          0.0327
[accelerometrs] Accelerometer:   0.0482          0.0818          0.0323
[accelerometrs] Accelerometer:   0.0482          0.0827          0.0331
[accelerometrs] Accelerometer:   0.0489          0.0804          0.0328

6 Заключение

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

7 Литература

  1. Pixhawk официальный сайт URL: https://pixhawk.org/
  2. PX4 официальный сайт URL: https://px4.io/
  3. Схема архитектуры PX4 URL: https://docs.px4.io/main/en/concept/px4_systems_architecture.html
  4. uORB URL: https://docs.px4.io/main/en/middleware/uorb.html
  5. Репозиторий PX4 на GitHub URL: https://github.com/PX4/PX4-Autopilot
  6. QGroundControl официальный сайт URL: https://qgroundcontrol.com/
⚠️ **GitHub.com Fallback** ⚠️