Расширение функциональности бортового ПО БПЛА - DRONE520/RF-BAS-COMMON GitHub Wiki
Pixhawk [1] — это открытая аппаратная платформа для автономных летательных аппаратов, роботов и других систем. Бортовое ПО PX4 [2], разработанное для Pixhawk, является модульным, гибким и поддерживает широкий спектр аппаратных конфигураций. Оно используется в дронах, подводных аппаратах, наземных роботах и IoT-устройствах. Основная цель PX4 — предоставить надежную основу для автономных операций, включая навигацию, управление и коммуникацию. Открытость платформы позволяет разработчикам адаптировать и расширять её функционал под специфические задачи, что делает PX4 популярным в научных, коммерческих и любительских проектах.
Расширение функционала PX4 преследует следующие цели:
- Интеграция новых устройств: Подключение нестандартных датчиков, камер или исполнительных механизмов.
- Поддержка новых типов аппаратов: Адаптация ПО для работы с нестандартными дронами (например, винтокрылы или гибридные системы).
- Улучшение алгоритмов: Модификация алгоритмов навигации, управления или компьютерного зрения.
- Добавление пользовательских режимов полёта: Создание специализированных сценариев (например, автоматическая съёмка или доставка грузов).
- Оптимизация ресурсов: Настройка ПО для работы на ограниченных вычислительных мощностях.
На рис. 1 показана архитектура PX4 [3] на базе контроллера полета.
![]() |
---|
Рис. 1. Архитектура PX4 |
В левой части рис. 1 показан программный стек, который горизонтально выровнен (приблизительно) с аппаратными частями. Наземная станция компьютера обычно работает под управлением QGroundControl (или другого программного обеспечения наземной станции).
Архитектура ПО разделена на два ключевых слоя: Полетный стек (Flight Stack) и Промежуточное ПО (Middleware), связанные через высокоэффективную систему обмена сообщениями uORB [4].
Общая архитектура ПО
- Полетный стек (Flight Stack):
-
Управляет полетными алгоритмами: навигация, контроль позиции/скорости, планирование миссий.
-
Состоит из независимых модулей (например, mc_att_control для управления углами коптера, ekf2 для оценки положения).
- Промежуточное ПО (Middleware):
-
Обеспечивает инфраструктуру для связи модулей и работы с железом.
-
Включает драйверы датчиков, коммуникационные протоколы (MAVLink), и систему сообщений uORB.
- ОС (RTOS):
- Запускается на реальном времени (NuttX) или Linux, управляя задачами и ресурсами.
uORB — легковесный механизм публикации/подписки (Pub-Sub), обеспечивающий обмен данными между модулями. Ключевые принципы:
- Асинхронность: Модули не блокируются при ожидании данных.
- Централизованный менеджмент: Брокер управляет топиками (каналами данных).
- Кольцевые буферы: Для каждого топика создается буфер, хранящий последние сообщения.
- Минимальные накладные расходы: Оптимизирован для ресурсо-ограниченных систем.
- Определение топиков
Каждый тип данных (например, показания гироскопа, позиция дрона) имеет уникальный топик.
Топики описываются в .msg-файлах
- Публикация данных (Publisher)
Модуль-издатель (например, драйвер гироскопа) объявляет топик и отправляет данные
// Объявление топика
orb_advert_t pub = orb_advertise(ORB_ID(sensor_gyro), &gyro_data);
// Публикация данных
orb_publish(ORB_ID(sensor_gyro), pub, &new_gyro_data);
- Подписка на данные (Subscriber)
Модуль-подписчик (например, фильтр EKF2) запрашивает данные из топика
// Подписка на топик
int sub = orb_subscribe(ORB_ID(sensor_gyro));
// Чтение данных
sensor_gyro_s gyro_data;
orb_copy(ORB_ID(sensor_gyro), sub, &gyro_data);
Особенности:
- Множественные подписчики: Один топик может читаться несколькими модулями.
- Буферизация: uORB хранит несколько последних сообщений (защита от потерь данных).
- Периодичность: Модули могут опрашивать данные по таймеру или событию.
- Синхронизация: Данные автоматически защищаются от гонок (semaphore-based).
- Создание новых модулей (например, для обработки данных с кастомных датчиков).
- Модификация существующих алгоритмов (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
Вы увидите список модулей, среди которых должен быть ваш. Запустите его из консоли.
Для примера реализуем модуль, осуществляющий подписку на датчики асселерометров и вывод значений в консоль.
1.Создайте папку
src/modules/accelerometers
- Создайте новый файл 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]);
}
}
- Создайте и откройте новый файл определения Camake под названием
CMakeLists.txt
. Копируйте текст ниже:
px4_add_module(
MODULE examples__accelerometers
MAIN accelerometers
STACK_MAIN 2000
SRCS
accelerometers.c
DEPENDS
)
- Создайте и откройте новый файл определения 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
Расширение функционала PX4 открывает широкие возможности для кастомизации автономных систем. Благодаря модульной архитектуре и подробной документации, разработчики могут адаптировать ПО под любые задачи, от научных исследований до коммерческих решений.
- Pixhawk официальный сайт URL: https://pixhawk.org/
- PX4 официальный сайт URL: https://px4.io/
- Схема архитектуры PX4 URL: https://docs.px4.io/main/en/concept/px4_systems_architecture.html
- uORB URL: https://docs.px4.io/main/en/middleware/uorb.html
- Репозиторий PX4 на GitHub URL: https://github.com/PX4/PX4-Autopilot
- QGroundControl официальный сайт URL: https://qgroundcontrol.com/