PX4 vs ArduPilot: Битва прошивок
PX4 и ArduPilot — два самых популярных открытых автопилота, на которых построены тысячи беспилотных систем по всему миру. Но чем они отличаются? Как устроена их архитектура, какие алгоритмы управления и навигации используют, как работают MAVLink, EKF, ROS 2, компьютерное зрение и искусственный интеллект? В этой статье мы подробно сравним обе платформы, разберём их сильные и слабые стороны, а также выясним, в каких задачах каждая из них раскрывает свои преимущества. Материал рассчитан как на начинающих разработчиков БПЛА, так и на инженеров, создающих современные автономные беспилотные комплексы.
Администратор

PX4 и ArduPilot — подробное сравнение двух самых популярных автопилотов для беспилотных систем. Часть 1. История, философия и устройство современных автопилотов
Сегодня практически невозможно представить современный беспилотный летательный аппарат без сложной системы автоматического управления. Именно автопилот превращает набор двигателей, датчиков и аккумуляторов в интеллектуальную машину, способную самостоятельно удерживать курс, выполнять маршрут, обходить препятствия и возвращаться домой даже при потере связи с оператором.
В мире открытых беспилотных технологий существует два проекта, которые фактически стали отраслевым стандартом — ArduPilot и PX4. Именно они лежат в основе тысяч гражданских, научных, промышленных и исследовательских аппаратов по всему миру.
Несмотря на одинаковое назначение, эти проекты построены на совершенно разных принципах. У них различается архитектура программного обеспечения, подход к разработке, интеграция с внешними системами и даже философия развития.
Эта статья представляет собой подробный технический обзор обеих платформ. Мы разберём их устройство буквально «под капотом», сравним сильные и слабые стороны, рассмотрим алгоритмы управления, навигации, взаимодействие с ROS2, компьютерным зрением и перспективы дальнейшего развития.
Что вообще такое автопилот?
Когда начинающий разработчик впервые сталкивается с миром БПЛА, очень часто возникает распространённая ошибка.
Многие считают, что автопилот — это небольшая плата с процессором, устанавливаемая внутрь квадрокоптера. На самом деле это лишь часть общей системы.
Современный автопилот — это сложный программно-аппаратный комплекс, включающий:
- бортовой компьютер реального времени;
- операционную систему;
- алгоритмы стабилизации;
- математические модели движения;
- фильтрацию данных датчиков;
- навигацию;
- планировщик полёта;
- обработку отказов;
- обмен данными по MAVLink;
- интерфейсы подключения полезной нагрузки.
Проще говоря, если двигатель можно сравнить с мышцами человека, то автопилот является одновременно мозгом, внутренним ухом, глазами и нервной системой беспилотника.
Из чего состоит современный автопилот?
Любой современный беспилотник представляет собой набор взаимодействующих подсистем.
| Компонент | Назначение |
|---|---|
| IMU | Измеряет ускорения и угловые скорости |
| Барометр | Определяет относительную высоту |
| Магнитометр | Определяет направление на север |
| GPS/GNSS | Определяет глобальные координаты |
| Автопилот | Обрабатывает данные и управляет аппаратом |
| ESC | Управляют электродвигателями |
| Наземная станция | Настройка и контроль полёта |
| Радиомодем | Передача телеметрии |
Именно автопилот объединяет все эти устройства в единую систему управления.
Почему Pixhawk — это не ArduPilot?
Это один из самых распространённых вопросов среди начинающих инженеров.
Очень часто можно услышать фразу:
«Я купил ArduPilot».
На самом деле купить ArduPilot невозможно.
ArduPilot — это программное обеспечение.
А вот Pixhawk, Cube Orange, Holybro Durandal, CUAV X7 и десятки других устройств являются аппаратными платформами, на которые это программное обеспечение устанавливается.
Аналогично работает и PX4.
На один и тот же контроллер можно установить как PX4, так и ArduPilot. Аппаратная часть остаётся одинаковой, меняется только программный стек.
Это очень похоже на ситуацию с персональными компьютерами:
- ноутбук — аппаратная часть;
- Windows или Linux — программная часть.
В мире БПЛА Pixhawk играет роль компьютера, а PX4 и ArduPilot являются операционными системами и программной платформой управления полётом.
Что появилось раньше?
История современных открытых автопилотов начинается значительно раньше массового появления квадрокоптеров.
В середине 2000-х годов группа энтузиастов начала разрабатывать систему автоматического управления небольшими моделями самолётов на базе популярной тогда платформы Arduino.
Отсюда и произошло название ArduPilot.
Первые версии представляли собой весьма простые стабилизаторы, однако проект стремительно развивался. Со временем появились полноценная навигация, автоматические миссии, поддержка различных типов летательных аппаратов и огромное международное сообщество разработчиков.
Сегодня ArduPilot способен управлять не только квадрокоптерами и самолётами, но также:
- вертолётами;
- VTOL;
- автомобилями;
- надводными судами;
- подводными аппаратами;
- роботизированными платформами.
Именно универсальность стала одной из главных особенностей проекта.
Почему появился PX4?
По мере усложнения беспилотных систем стало очевидно, что классическая архитектура ArduPilot не всегда удобна для создания высокопроизводительных модульных решений.
В начале 2010-х годов в Швейцарии стартовал новый проект — PX4. Его целью было создание современной платформы с чистой модульной архитектурой, рассчитанной на многопоточную обработку данных, высокую скорость работы и удобную интеграцию с робототехническими системами нового поколения.
При разработке большое внимание уделялось качеству кода, тестированию, стандартизации интерфейсов и взаимодействию с исследовательским сообществом. В результате PX4 быстро получил распространение в университетах, лабораториях и компаниях, занимающихся автономными роботами.
Две разные философии
Хотя обе платформы решают одну и ту же задачу — управление беспилотником, подход к её решению различается.
| ArduPilot | PX4 |
|---|---|
| Максимальная универсальность | Максимальная модульность |
| Поддержка множества типов техники | Акцент на современной архитектуре |
| Огромное количество настроек | Чистая структура программного кода |
| Зрелость проекта | Удобство разработки новых функций |
| Практическая эксплуатация | Интеграция с робототехникой |
Именно поэтому инженеры нередко выбирают разные платформы для разных задач. Там, где важны проверенные временем алгоритмы и поддержка большого числа типов техники, часто предпочтение отдают ArduPilot. В проектах, ориентированных на современную робототехнику, тесную интеграцию с ROS 2 и активную разработку новых функций, нередко выбирают PX4.
Продолжение следует…
В первой части мы познакомились с историей двух крупнейших открытых автопилотов и разобрались, что на самом деле представляет собой современная система управления беспилотником.
Во второй части мы подробно рассмотрим внутреннюю архитектуру PX4 и ArduPilot: как организован их программный стек, какие модули входят в состав системы, каким образом выполняется обмен данными между компонентами и почему различия в архитектуре оказывают существенное влияние на возможности дальнейшего развития проектов.
Архитектура современных автопилотов
Чтобы понять различия между PX4 и ArduPilot, необходимо сначала разобраться, как вообще устроен современный программный стек беспилотного летательного аппарата. Несмотря на огромное количество функций, любой автопилот можно представить как несколько взаимосвязанных уровней, каждый из которых отвечает за строго определённую задачу.
Чем ниже уровень, тем ближе он к аппаратному обеспечению. Чем выше — тем ближе к логике полёта, выполнению миссий и взаимодействию с оператором.
| Уровень | Основная задача |
|---|---|
| Миссия | Выполнение маршрута, автоматические режимы, возврат домой |
| Навигация | Определение положения аппарата в пространстве |
| Контроллеры | Расчёт управляющих воздействий для удержания курса и положения |
| Драйверы | Работа с датчиками и исполнительными механизмами |
| Операционная система | Управление памятью, потоками и временем выполнения задач |
| Аппаратная плата | Микроконтроллер, память, интерфейсы связи |
Обе платформы используют эту общую модель, однако реализуют её совершенно по-разному.
Аппаратная часть: на чём работают PX4 и ArduPilot
Ещё несколько лет назад большинство автопилотов строились на микроконтроллерах семейства STM32F4. Их возможностей было достаточно для базовой стабилизации квадрокоптера, однако с появлением компьютерного зрения, сложной фильтрации и поддержки большого количества периферии вычислительной мощности стало не хватать.
Современные контроллеры чаще используют STM32F7, STM32H7 и их производные. Они работают на частотах до 480 МГц, имеют значительно больший объём оперативной памяти и позволяют выполнять десятки задач практически одновременно.
Типичный современный полётный контроллер включает:
- 32-битный микроконтроллер;
- оперативную память;
- Flash-память для хранения прошивки;
- несколько IMU для резервирования;
- барометр;
- магнитометр (иногда внешний);
- контроллеры CAN;
- UART для GPS и телеметрии;
- I²C и SPI для подключения датчиков;
- PWM и DShot для управления ESC.
Важно понимать, что ни PX4, ни ArduPilot не «зашиты» под конкретную плату. Один и тот же контроллер Cube Orange, Holybro Pixhawk 6X или CUAV X7 способен работать под управлением обеих платформ. Именно поэтому при выборе автопилота инженер фактически выбирает программную архитектуру, а не аппаратное обеспечение.
Операционная система реального времени
В отличие от обычного компьютера, автопилот не может позволить себе задержки или непредсказуемое выполнение задач. Если алгоритм стабилизации опоздает даже на несколько миллисекунд, аппарат может потерять устойчивость.
Поэтому практически все современные открытые автопилоты используют операционные системы реального времени (RTOS).
Главная задача RTOS — гарантировать выполнение критически важных процессов в строго определённые интервалы времени.
Например:
- считывание гироскопа — 1000 Гц;
- контроллер угловых скоростей — 1000 Гц;
- контроллер положения — 100–250 Гц;
- GPS — 5–20 Гц;
- телеметрия — 10–50 Гц;
- передача видео — независимо от полётного стека.
Такая организация позволяет системе одновременно выполнять десятки процессов без взаимного влияния.
NuttX — сердце PX4
Практически все современные сборки PX4 работают поверх операционной системы реального времени NuttX.
NuttX внешне напоминает небольшой POSIX-совместимый Linux, однако разработана специально для микроконтроллеров. Она поддерживает многозадачность, приоритеты потоков, файловую систему, драйверную модель и стандартные механизмы синхронизации.
Благодаря этому многие компоненты PX4 выглядят как независимые приложения, взаимодействующие между собой через внутреннюю систему обмена сообщениями.
Такой подход значительно упрощает сопровождение проекта. Разработчик может изменять один модуль, практически не затрагивая остальные части системы.
ArduPilot и собственная инфраструктура
ArduPilot также способен работать поверх NuttX на большинстве современных контроллеров, однако исторически проект развивал собственную программную инфраструктуру, известную как HAL (Hardware Abstraction Layer).
Главная идея HAL заключается в том, чтобы максимально изолировать прикладной код от особенностей конкретного оборудования.
Если заменить контроллер STM32 на совершенно другую архитектуру, большая часть алгоритмов полёта продолжит работать без изменений. Потребуется лишь реализовать новый слой аппаратной абстракции.
Именно благодаря такому подходу ArduPilot поддерживает огромное количество различных полётных контроллеров и даже нестандартных вычислительных платформ.
Hardware Abstraction Layer (HAL)
Представим, что инженер написал функцию чтения гироскопа. Без слоя абстракции ему пришлось бы отдельно работать с регистрами каждого конкретного микроконтроллера.
HAL скрывает эти различия.
Алгоритму стабилизации совершенно не важно, установлен ли гироскоп Bosch, InvenSense или Analog Devices. Он просто получает уже подготовленные данные через единый программный интерфейс.
Подобная архитектура делает код значительно более переносимым и существенно упрощает сопровождение проекта.
Монолитная и модульная архитектура
Именно здесь начинаются наиболее заметные различия между PX4 и ArduPilot.
ArduPilot исторически развивался как единая интегрированная система. Большинство подсистем тесно взаимодействуют между собой, что обеспечивает высокую зрелость проекта и огромное количество готовых функций.
PX4 изначально проектировался иначе.
Практически каждый компонент здесь представляет собой самостоятельный программный модуль:
- драйвер IMU;
- EKF;
- контроллер положения;
- контроллер скоростей;
- обработчик миссий;
- MAVLink;
- логирование;
- менеджер параметров.
Каждый из этих модулей имеет собственный жизненный цикл и взаимодействует с другими исключительно через стандартизированные интерфейсы.
Такой подход ближе к архитектуре современных робототехнических систем и значительно облегчает разработку новых компонентов.
Почему архитектура настолько важна?
На первый взгляд пользователю может показаться, что внутреннее устройство автопилота не имеет большого значения. Если аппарат летает, удерживает высоту и выполняет маршрут, то какая разница, как организован программный код?
На практике именно архитектура определяет, насколько легко добавить поддержку нового датчика, реализовать нестандартный алгоритм управления, встроить систему компьютерного зрения или интегрировать автопилот с внешним вычислительным модулем на базе NVIDIA Jetson, Raspberry Pi или Orange Pi.
Именно поэтому PX4 часто выбирают исследовательские лаборатории и разработчики автономной робототехники, тогда как ArduPilot остаётся одним из наиболее универсальных и проверенных временем решений для широкого спектра беспилотных платформ.
Внутреннее устройство PX4
Если рассматривать PX4 с точки зрения программной инженерии, то становится понятно, почему этот проект часто используют университеты, исследовательские центры и компании, занимающиеся автономной робототехникой. Его архитектура изначально проектировалась как набор независимых компонентов, каждый из которых отвечает только за свою область ответственности.
Разработчики PX4 придерживаются принципа Modular Flight Stack — модульного полётного стека. Это означает, что практически каждый элемент системы представляет собой отдельный процесс или задачу, взаимодействующую с другими через внутреннюю шину сообщений.
Такой подход напоминает архитектуру современных операционных систем, где множество небольших программ работают совместно, но остаются максимально независимыми друг от друга.
uORB — внутренняя шина данных PX4
Сердцем архитектуры PX4 является механизм обмена сообщениями uORB (micro Object Request Broker). Именно он связывает между собой десятки программных модулей.
Вместо того чтобы обращаться друг к другу напрямую, модули публикуют данные в специальные "топики", а остальные компоненты подписываются только на ту информацию, которая им необходима.
Например:
- драйвер гироскопа публикует угловые скорости;
- EKF подписывается на данные IMU;
- контроллер положения получает результат работы EKF;
- контроллер углов рассчитывает управляющее воздействие;
- микшер преобразует команды в сигналы двигателей.
Если заменить гироскоп новым устройством, остальные модули даже не заметят этого — формат публикуемых данных останется прежним.
Подобная схема значительно повышает масштабируемость проекта и позволяет разработчикам изменять отдельные части системы практически независимо.
Как проходит команда управления
Рассмотрим типичный сценарий полёта.
Оператор отклоняет правый стик вперёд.
Далее внутри PX4 происходит следующая последовательность событий:
- Приёмник получает команду управления.
- Модуль ввода преобразует её во внутренний формат.
- Команда публикуется через uORB.
- Контроллер положения вычисляет требуемую скорость.
- Контроллер скорости рассчитывает необходимый угол наклона.
- Контроллер углов определяет требуемые угловые скорости.
- Rate Controller вычисляет моменты по трём осям.
- Микшер распределяет тягу между двигателями.
- ESC изменяют обороты моторов.
Всё это происходит менее чем за несколько миллисекунд.
Цепочка контуров управления
PX4 использует каскадную систему PID-регуляторов. Каждый внешний контур формирует задание для следующего.
Последовательность выглядит следующим образом:
| Контур | Частота работы |
|---|---|
| Mission | 5–20 Гц |
| Position Controller | 50–100 Гц |
| Velocity Controller | 100–250 Гц |
| Attitude Controller | 250–500 Гц |
| Rate Controller | 800–1000 Гц |
| Motor Mixer | 1000 Гц и выше |
Такое разделение делает систему очень устойчивой и позволяет независимо настраивать каждый уровень управления.
Estimator — где находится беспилотник?
Одна из самых сложных задач любого автопилота — определить своё положение в пространстве.
Ни один датчик не способен сделать это самостоятельно.
GPS обновляется слишком медленно.
Гироскоп постепенно накапливает ошибку.
Барометр зависит от погоды.
Компас чувствителен к электромагнитным помехам.
Поэтому PX4 использует специальный модуль оценки состояния аппарата — Estimator.
На современных версиях практически всегда применяется EKF2.
Он объединяет информацию сразу от нескольких источников:
- гироскоп;
- акселерометр;
- магнитометр;
- GPS;
- барометр;
- дальномер;
- оптический поток;
- визуальная одометрия;
- внешние системы позиционирования.
Используя расширенный фильтр Калмана, система получает наиболее вероятную оценку положения, скорости и ориентации аппарата.
Mixer — последний этап перед двигателями
После того как контроллер вычислил необходимые управляющие моменты, возникает ещё одна задача — преобразовать их в конкретные обороты каждого двигателя.
Этим занимается модуль Mixer.
Для квадрокоптера X-схемы он распределяет тягу между четырьмя моторами таким образом, чтобы одновременно обеспечить:
- тягу вверх;
- тангаж;
- крен;
- рыскание.
Для самолёта алгоритм будет совершенно другим.
Для VTOL — ещё сложнее, поскольку необходимо одновременно управлять самолётными и коптерными двигателями.
PX4 поддерживает большое количество готовых микшеров, однако при необходимости разработчик может создать собственный.
Менеджер параметров
Одна из сильных сторон PX4 — централизованная система параметров.
Практически любой коэффициент системы хранится в виде параметра:
- PID-регуляторы;
- лимиты скорости;
- ограничения ускорений;
- параметры датчиков;
- настройки GPS;
- режимы отказоустойчивости;
- калибровочные коэффициенты.
Всего таких параметров насчитываются тысячи.
Они могут изменяться без перекомпиляции прошивки через QGroundControl или MAVLink.
Логирование
Во время каждого полёта PX4 записывает огромный объём диагностической информации.
В журнал попадают:
- показания всех датчиков;
- работа EKF;
- выходы PID-регуляторов;
- команды оператора;
- режимы полёта;
- ошибки системы;
- нагрузка процессора;
- использование памяти.
После посадки инженер может буквально "перемотать" весь полёт назад и увидеть, что происходило в каждый момент времени с точностью до миллисекунд.
Именно поэтому PX4 широко используется при разработке новых алгоритмов автономного управления, где анализ телеметрии является обязательной частью процесса.
Преимущества архитектуры PX4
- Чёткое разделение модулей.
- Современная программная архитектура.
- Удобная интеграция с ROS 2.
- Высокая масштабируемость.
- Простота добавления новых компонентов.
- Хорошая поддержка компьютерного зрения и автономной навигации.
- Развитые средства тестирования и симуляции.
Однако модульность имеет и обратную сторону. Большое количество независимых компонентов усложняет внутреннюю структуру проекта, увеличивает требования к квалификации разработчиков и делает самостоятельное внесение изменений более сложным для начинающих инженеров. Именно поэтому многие пользователи, впервые сталкивающиеся с PX4, отмечают более высокий порог входа по сравнению с ArduPilot.
Внутреннее устройство ArduPilot
Если PX4 можно сравнить с современным конструктором из независимых модулей, то ArduPilot больше напоминает зрелую инженерную систему, которая на протяжении почти двух десятилетий непрерывно совершенствовалась тысячами разработчиков по всему миру. Именно возраст проекта является одновременно его главным преимуществом и причиной некоторых архитектурных особенностей.
За годы развития ArduPilot превратился из простого автопилота для авиамоделей в универсальную платформу, способную управлять практически любым беспилотным транспортным средством — от небольшого квадрокоптера до тяжёлого самолёта, вертолёта, надводного катера или автономного подводного аппарата.
Один проект — множество транспортных средств
В отличие от PX4, который долгое время был ориентирован преимущественно на летательные аппараты, ArduPilot изначально развивался как семейство специализированных решений, объединённых общей программной базой.
Сегодня проект включает несколько основных направлений:
- ArduCopter — мультикоптеры всех типов.
- ArduPlane — самолёты.
- ArduHeli — классические вертолёты.
- ArduRover — наземные роботы.
- ArduSub — подводные аппараты.
- ArduBoat — надводные беспилотные суда.
- QuadPlane — гибридные VTOL-системы.
Несмотря на различие платформ, большая часть базового кода используется повторно. Это позволяет быстро переносить новые алгоритмы между различными типами техники.
Основная архитектура ArduPilot
Хотя внутри проекта присутствуют сотни файлов и библиотек, логически его можно представить в виде нескольких крупных подсистем.
| Подсистема | Назначение |
|---|---|
| AP_HAL | Абстракция аппаратного обеспечения |
| AP_InertialSensor | Работа с IMU |
| AP_GPS | Поддержка спутниковых приёмников |
| AP_Baro | Барометрическая высота |
| AP_Compass | Работа с магнитометрами |
| AP_AHRS | Определение ориентации аппарата |
| AP_NavEKF | Фильтр Калмана и навигация |
| AP_Motors | Управление двигателями |
| GCS_MAVLink | Обмен данными с наземной станцией |
Такое разделение делает код достаточно понятным: каждая библиотека отвечает за одну конкретную область, а взаимодействие между ними строится через внутренние интерфейсы проекта.
AP_HAL — фундамент переносимости
Одной из самых важных частей ArduPilot является библиотека AP_HAL (Hardware Abstraction Layer).
Она скрывает особенности конкретного оборудования и предоставляет единый интерфейс для всех остальных компонентов системы.
Например, независимо от модели полётного контроллера любой модуль может получить доступ к:
- UART;
- SPI;
- I²C;
- PWM;
- таймерам;
- GPIO;
- энергонезависимой памяти.
Благодаря этому перенос ArduPilot на новую аппаратную платформу требует значительно меньше изменений, чем если бы код напрямую работал с регистрами микроконтроллера.
Библиотечная архитектура
Одной из характерных особенностей ArduPilot является активное использование независимых библиотек.
Практически каждый функциональный блок реализован как отдельная библиотека, которую могут использовать сразу несколько типов аппаратов.
Например:
- GPS используется коптером, самолётом и катером одинаково;
- барометр работает практически без изменений во всех проектах;
- магнитометр имеет единый программный интерфейс;
- MAVLink применяется абсолютно всеми типами техники.
Такой подход позволил за годы разработки накопить огромную базу хорошо протестированного кода.
Главный цикл управления
В отличие от PX4, где множество задач выполняются как отдельные процессы, ArduPilot традиционно использует централизованный цикл управления с тщательно спланированным расписанием выполнения функций.
Во время каждого прохода цикла система последовательно выполняет:
- чтение датчиков;
- обновление фильтра навигации;
- вычисление положения аппарата;
- работу контроллеров;
- проверку отказов;
- обновление миссии;
- формирование команд двигателям;
- логирование;
- передачу телеметрии.
Такой подход отличается высокой предсказуемостью и хорошо подходит для систем реального времени, где важно заранее знать порядок выполнения всех операций.
Планировщик задач
Несмотря на использование единого цикла, внутри ArduPilot работает собственный планировщик задач.
Каждая функция вызывается с заранее заданной периодичностью.
| Подсистема | Типичная частота |
|---|---|
| IMU | 1000 Гц |
| Контроллеры | 400–1000 Гц |
| Навигация | 50–100 Гц |
| GPS | 5–20 Гц |
| Телеметрия | 10–50 Гц |
| Запись логов | по мере появления данных |
Подобная организация позволяет эффективно использовать ресурсы микроконтроллера даже на относительно слабом оборудовании.
Работа с датчиками
Одной из сильнейших сторон ArduPilot считается исключительно широкая поддержка оборудования.
Проект умеет работать с десятками моделей:
- гироскопов;
- акселерометров;
- барометров;
- магнитометров;
- GPS-приёмников;
- лазерных дальномеров;
- лидаров;
- воздушных датчиков скорости;
- RTK-модулей;
- датчиков уровня топлива и питания.
Во многих случаях новый датчик начинает поддерживаться всего лишь после добавления нового драйвера без изменения остальных частей проекта.
Система параметров
Как и PX4, ArduPilot содержит огромное количество настраиваемых параметров. Однако здесь их ещё больше.
Для опытного инженера это огромное преимущество: практически любой аспект поведения аппарата можно изменить без перекомпиляции прошивки.
С другой стороны, новичков такое количество настроек нередко пугает. В зависимости от типа аппарата пользователю могут быть доступны несколько тысяч параметров, многие из которых требуют хорошего понимания принципов управления беспилотником.
Логирование DataFlash
Одной из наиболее известных возможностей ArduPilot является система журналов DataFlash.
Во время полёта записываются:
- все показания датчиков;
- команды пилота;
- работа фильтра Калмана;
- состояние двигателей;
- режимы полёта;
- потребление энергии;
- ошибки системы;
- события FailSafe.
Журналы DataFlash считаются одним из самых информативных инструментов анализа полётов. Они позволяют детально расследовать практически любое происшествие — от кратковременной потери GPS до полного отказа двигателя.
Сильные стороны архитектуры ArduPilot
- Огромная зрелость проекта.
- Поддержка практически всех типов беспилотной техники.
- Очень широкая совместимость с оборудованием.
- Большое количество готовых функций.
- Гибкая система параметров.
- Мощные средства диагностики.
- Огромное мировое сообщество пользователей.
Именно благодаря этим качествам ArduPilot остаётся одним из наиболее популярных открытых автопилотов в мире. Во многих коммерческих и промышленных проектах он выбирается не из-за самой современной архитектуры, а благодаря своей универсальности, стабильности и огромному количеству накопленного опыта эксплуатации в самых разных условиях.
Практическая разработка под PX4 и ArduPilot
До этого момента мы рассматривали архитектуру обеих платформ с точки зрения пользователя и системного инженера. Однако настоящие различия становятся заметны тогда, когда возникает необходимость изменить исходный код, добавить поддержку нового оборудования или реализовать собственный алгоритм управления.
Именно на этом этапе большинство разработчиков впервые понимают, что PX4 и ArduPilot отличаются значительно сильнее, чем кажется после первых полётов.
Открытый исходный код
Одной из главных причин популярности обеих платформ является полностью открытый исходный код.
Это означает, что разработчик может:
- изучить любую часть программы;
- изменить существующие алгоритмы;
- добавить поддержку собственного оборудования;
- создать новый режим полёта;
- скомпилировать собственную прошивку;
- использовать проект как основу для коммерческого продукта (при соблюдении условий лицензии).
Фактически PX4 и ArduPilot являются не просто автопилотами, а полноценными программными платформами для разработки беспилотных систем.
Структура проекта PX4
Репозиторий PX4 организован достаточно строго и логично. Уже после первого знакомства становится заметно стремление разработчиков разделить проект на независимые подсистемы.
Основные каталоги:
| Каталог | Назначение |
|---|---|
| /src | Основной программный код |
| /drivers | Драйверы оборудования |
| /modules | Основные программные модули |
| /lib | Библиотеки общего назначения |
| /boards | Описание поддерживаемых плат |
| /msg | Описание сообщений uORB |
| /ROMFS | Скрипты запуска системы |
Даже без глубокого знания проекта опытный разработчик обычно достаточно быстро понимает назначение основных компонентов.
Структура проекта ArduPilot
ArduPilot развивался значительно дольше, поэтому его структура отражает многолетнюю эволюцию проекта.
На верхнем уровне располагаются отдельные приложения:
- ArduCopter;
- ArduPlane;
- ArduHeli;
- ArduRover;
- ArduSub.
Общие библиотеки находятся в каталоге Libraries.
Именно там располагаются практически все основные подсистемы:
- AP_HAL;
- AP_GPS;
- AP_Motors;
- AP_Baro;
- AP_Compass;
- AP_InertialSensor;
- AP_NavEKF;
- AP_Mission;
- AP_Scripting.
Подобная организация сначала кажется менее очевидной, однако после знакомства становится понятно, что проект построен вокруг переиспользуемых библиотек.
Система сборки
Для компиляции обе платформы используют современные инструменты автоматической сборки.
PX4 основан на CMake и Ninja.
ArduPilot использует систему Waf.
Для разработчика это означает, что после установки необходимых зависимостей прошивка собирается одной командой.
Во время сборки автоматически:
- компилируются библиотеки;
- собираются драйверы;
- формируется итоговый бинарный файл;
- проверяются зависимости;
- генерируются необходимые служебные файлы.
SITL — разработка без настоящего беспилотника
Одним из важнейших преимуществ обеих платформ является режим Software In The Loop (SITL).
Он позволяет полностью запустить автопилот на обычном компьютере без подключения реального полётного контроллера.
В результате разработчик получает полноценный виртуальный беспилотник.
Можно:
- запускать миссии;
- изменять параметры;
- испытывать новые алгоритмы;
- отлаживать код;
- анализировать логи;
- не опасаться разбить настоящий аппарат.
Именно SITL сегодня является основным инструментом разработки практически всех новых функций.
Добавление нового датчика
Предположим, производитель выпустил новый лазерный дальномер.
Что необходимо сделать разработчику?
В PX4 обычно создаётся отдельный драйвер, который публикует данные через uORB. После этого все остальные компоненты автоматически получают доступ к новой информации.
В ArduPilot новый драйвер интегрируется в соответствующую библиотеку AP_RangeFinder. После регистрации устройства остальные части проекта начинают работать с ним через единый интерфейс.
Оба подхода эффективны, однако отражают различную философию архитектуры.
Добавление собственного режима полёта
Иногда стандартных возможностей оказывается недостаточно.
Например, требуется реализовать:
- полностью автономное сопровождение цели;
- специализированный режим поиска;
- алгоритм управления роем;
- автоматическую посадку на движущуюся платформу;
- нестандартную кинематику аппарата.
В обоих проектах это возможно, однако способы реализации различаются.
В PX4 новый режим обычно оформляется как отдельный программный модуль с использованием существующих интерфейсов управления.
В ArduPilot разработчик чаще интегрирует новую функциональность в существующую систему режимов полёта, используя уже имеющиеся библиотеки проекта.
Какой проект проще изучать разработчику?
Ответ зависит от опыта инженера.
Если разработчик хорошо знаком с современными принципами программной инженерии, многопоточностью и модульной архитектурой, PX4 обычно кажется более понятным.
Если же основная задача заключается в создании практического беспилотного комплекса с использованием большого количества уже готовых возможностей, многие инженеры быстрее начинают эффективно работать именно с ArduPilot.
На практике обе платформы требуют серьёзного погружения. Их кодовая база насчитывает миллионы строк кода, а изучение внутреннего устройства занимает не недели, а месяцы. Однако именно открытый исходный код, развитое сообщество и большое количество документации делают PX4 и ArduPilot уникальными инженерными платформами, позволяющими создавать беспилотные системы практически любого уровня сложности.
Алгоритмы управления полётом
Внешне управление беспилотником кажется достаточно простой задачей: необходимо лишь изменить обороты двигателей, чтобы аппарат наклонился в нужную сторону или удерживал высоту. Однако за этой простотой скрывается огромное количество вычислений, выполняемых сотни и тысячи раз в секунду.
И PX4, и ArduPilot используют каскадную систему управления, состоящую из нескольких взаимосвязанных контуров. Каждый из них решает свою задачу и передаёт результат следующему уровню. Такой подход считается классическим для современной авиации и позволяет добиться высокой устойчивости даже при сильном ветре, резких манёврах или изменении массы аппарата.
Каскадная система управления
Вместо одного универсального регулятора используется несколько специализированных контуров.
Например, если оператор отклоняет стик вперёд, автопилот не отправляет эту команду напрямую двигателям. Сначала вычисляется требуемая скорость полёта, затем необходимый угол наклона, после этого — угловая скорость вращения аппарата, и только затем формируются команды для каждого двигателя.
Упрощённая схема выглядит следующим образом:
| Контур | Что контролирует |
|---|---|
| Mission | Выполнение маршрута |
| Position | Координаты аппарата |
| Velocity | Линейную скорость |
| Attitude | Угол крена, тангажа и рыскания |
| Rate | Угловые скорости вращения |
| Motor Mixer | Обороты отдельных двигателей |
Каждый внутренний контур работает значительно быстрее предыдущего. Благодаря этому даже если внешние команды приходят редко, аппарат продолжает стабильно удерживать своё положение.
PID-регуляторы
Основой большинства контуров управления являются PID-регуляторы. Несмотря на появление современных методов управления, именно PID остаётся главным инструментом авиационной автоматики благодаря своей простоте, эффективности и высокой вычислительной скорости.
Аббревиатура PID расшифровывается следующим образом:
- P (Proportional) — пропорциональная составляющая;
- I (Integral) — интегральная составляющая;
- D (Derivative) — дифференциальная составляющая.
Каждая из них отвечает за определённый аспект управления.
Пропорциональная составляющая (P)
Она реагирует на текущую ошибку между требуемым и фактическим положением аппарата.
Чем больше ошибка, тем сильнее управляющее воздействие.
Если коэффициент P слишком мал, беспилотник становится «вялым» и медленно реагирует на команды пилота. Если же он слишком велик, аппарат начинает быстро раскачиваться и может потерять устойчивость.
Интегральная составляющая (I)
Даже при хорошем коэффициенте P могут существовать небольшие постоянные ошибки. Например, сильный боковой ветер заставляет квадрокоптер постоянно отклоняться в сторону.
Интегральная составляющая постепенно накапливает эту ошибку и компенсирует её, позволяя аппарату точно удерживать заданное положение.
Избыточное значение коэффициента I приводит к медленным колебаниям и так называемому «перерегулированию».
Дифференциальная составляющая (D)
Коэффициент D оценивает скорость изменения ошибки.
По сути он пытается предсказать будущее поведение аппарата и заранее уменьшить управляющее воздействие, предотвращая резкие колебания.
Слишком большое значение D делает систему чувствительной к шумам гироскопа, поэтому его настройка требует особой осторожности.
Feed Forward — управление на опережение
Современные версии PX4 и ArduPilot уже давно не ограничиваются классическими PID-регуляторами.
Важную роль играет механизм Feed Forward, который можно перевести как «управление с упреждением».
Вместо того чтобы ждать появления ошибки, система заранее знает, какое воздействие потребуется после команды пилота, и начинает выполнять его практически мгновенно.
Благодаря этому:
- уменьшается задержка управления;
- аппарат становится более отзывчивым;
- снижается нагрузка на PID-регуляторы;
- повышается точность выполнения резких манёвров.
Именно Feed Forward во многом отвечает за ощущение «живого» управления современными спортивными FPV-дронами.
Ограничения ускорений и скоростей
Если выполнять любые команды мгновенно, аппарат будет испытывать огромные перегрузки. Это может привести к потере устойчивости, повреждению полезной нагрузки или даже разрушению конструкции.
Поэтому перед передачей команды следующему контуру автопилот проверяет её на соответствие установленным ограничениям.
Контролируются:
- максимальная скорость;
- максимальное ускорение;
- максимальная угловая скорость;
- предельные углы крена;
- максимальная вертикальная скорость;
- скорость снижения.
Особенно важны эти ограничения для тяжёлых промышленных беспилотников массой в десятки килограммов.
Антивиндап (Anti-Windup)
Одной из классических проблем PID-регуляторов является накопление интегральной ошибки в ситуациях, когда исполнительные механизмы уже достигли своего предела.
Например, при сильном боковом ветре двигатели работают почти на максимальной мощности, но интегральная составляющая продолжает увеличиваться. После исчезновения ветра это приводит к резкому броску аппарата в противоположную сторону.
Для предотвращения подобных ситуаций в PX4 и ArduPilot реализованы механизмы Anti-Windup, ограничивающие накопление интегральной составляющей при насыщении исполнительных органов.
Фильтрация сигналов
Любой датчик генерирует шумы. Особенно это касается гироскопов, работающих рядом с мощными электродвигателями и винтами.
Если передавать такие данные непосредственно в PID-регуляторы, аппарат начнёт постоянно реагировать на случайные колебания.
Для устранения этой проблемы используются цифровые фильтры:
- Low Pass Filter (LPF);
- Notch Filter;
- Dynamic Notch Filter;
- Harmonic Notch Filter.
Особенно эффективным оказался динамический режекторный фильтр, автоматически отслеживающий частоту вращения двигателей и подавляющий именно те вибрации, которые возникают в данный момент.
Эта технология позволила значительно повысить качество стабилизации современных высокооборотистых мультикоптеров.
Автоматическая настройка (AutoTune)
Ручная настройка PID-регуляторов требует большого опыта и занимает много времени. Поэтому обе платформы поддерживают автоматическую процедуру настройки.
Во время специального тестового полёта автопилот намеренно создаёт небольшие возмущения, анализирует реакцию аппарата и рассчитывает оптимальные коэффициенты управления.
Несмотря на эффективность AutoTune, опытные инженеры нередко выполняют дополнительную ручную доводку параметров с учётом особенностей конкретной конструкции, двигателей, винтов и предполагаемого режима эксплуатации.
Сравнение подходов PX4 и ArduPilot
С точки зрения базовой теории управления обе платформы используют схожие принципы. Однако реализация и философия настройки различаются.
| Параметр | PX4 | ArduPilot |
|---|---|---|
| Структура контуров | Максимально унифицированная | Адаптирована под каждый тип аппарата |
| Настройка PID | Более компактная | Максимально гибкая |
| Feed Forward | Широко используется | Широко используется |
| AutoTune | Есть | Есть |
| Количество настраиваемых параметров | Меньше | Значительно больше |
На практике это означает, что PX4 зачастую проще освоить и быстрее привести к стабильному полёту, тогда как ArduPilot предоставляет инженеру гораздо больше возможностей для тонкой настройки поведения аппарата под конкретную задачу. Именно поэтому выбор между ними нередко определяется не качеством алгоритмов, а требованиями проекта и опытом команды разработки.
Навигация и определение положения в пространстве
Управление беспилотником невозможно без понимания того, где он находится, в каком направлении движется и как ориентирован относительно поверхности Земли. На первый взгляд может показаться, что эту задачу полностью решает GPS, однако это одно из самых распространённых заблуждений.
Спутниковая навигация — лишь один из источников информации. Современный автопилот постоянно объединяет данные сразу от нескольких датчиков, формируя единую модель окружающего пространства. Именно этот процесс называется оценкой состояния аппарата (State Estimation).
Без него невозможны автоматический взлёт, удержание позиции, возврат домой, полёт по маршруту, посадка и практически все современные автономные режимы.
Почему одного GPS недостаточно?
Многие начинающие разработчики считают, что координаты, полученные со спутников, полностью описывают положение беспилотника. На практике GPS имеет ряд фундаментальных ограничений.
- Низкая частота обновления — обычно от 5 до 20 Гц.
- Погрешность от одного до нескольких метров.
- Задержка вычисления координат.
- Возможность потери сигнала.
- Подверженность воздействию помех и спуфингу.
Для стабилизации квадрокоптера, где управляющие команды формируются с частотой около тысячи раз в секунду, таких данных совершенно недостаточно.
IMU — главный источник информации
Основным датчиком любого автопилота является инерциальный измерительный модуль (IMU, Inertial Measurement Unit). Именно он позволяет аппарату сохранять устойчивость даже при полном отсутствии спутниковой навигации.
В состав IMU обычно входят:
- трёхосевой гироскоп;
- трёхосевой акселерометр;
- иногда встроенный магнитометр.
Гироскоп измеряет угловые скорости вращения по трём осям. Акселерометр фиксирует линейные ускорения. Совместная обработка этих данных позволяет определить изменение ориентации аппарата практически мгновенно.
Современные IMU работают с частотой от 1000 до 8000 Гц, обеспечивая автопилот практически непрерывным потоком информации.
Барометр
Высота также не определяется исключительно по GPS. Для этого используется барометр, измеряющий атмосферное давление.
При увеличении высоты давление уменьшается, и по этой зависимости можно достаточно точно определить вертикальное положение аппарата.
Преимущества барометра:
- высокая частота обновления;
- малый уровень шума;
- независимость от спутниковой навигации.
Недостатком является зависимость от погодных условий. Изменение атмосферного давления в течение дня может привести к накоплению ошибки, поэтому барометр всегда используется совместно с другими источниками данных.
Магнитометр
Для определения курса автопилоту необходим компас. Его роль выполняет трёхосевой магнитометр, измеряющий направление магнитного поля Земли.
Однако именно этот датчик считается одним из самых проблемных.
На него влияют:
- силовые кабели;
- электродвигатели;
- ESC;
- металлические элементы конструкции;
- внешние электромагнитные поля.
Поэтому на крупных беспилотниках магнитометр часто выносится в отдельный модуль, расположенный на высокой мачте вдали от источников помех.
Фильтр Калмана
Все перечисленные датчики обладают собственными достоинствами и недостатками.
Гироскоп очень быстрый, но постепенно накапливает ошибку.
GPS точен на больших расстояниях, но работает медленно.
Барометр хорошо определяет относительную высоту, но зависит от погоды.
Магнитометр позволяет определить направление, однако чувствителен к помехам.
Чтобы объединить преимущества всех датчиков и минимизировать их недостатки, современные автопилоты используют расширенный фильтр Калмана (Extended Kalman Filter, EKF).
Фильтр непрерывно решает две задачи:
- Предсказывает следующее состояние аппарата на основе математической модели движения.
- Корректирует расчёт при поступлении новых измерений.
В результате получается значительно более точная оценка положения, чем могла бы дать любая отдельная система.
EKF2 и EKF3
В PX4 основной системой оценки состояния является EKF2, разработанный специально для высокодинамичных беспилотников. Он оптимизирован для минимальных задержек и эффективной работы на микроконтроллерах.
В ArduPilot используется семейство фильтров NavEKF. Наиболее современной реализацией является EKF3, обладающий значительно большей гибкостью.
Главное отличие EKF3 заключается в возможности одновременно использовать несколько экземпляров фильтра, работающих с различными наборами датчиков. Если один источник информации становится недостоверным, система может автоматически переключиться на другой без потери устойчивости.
Такой подход особенно ценится на крупных промышленных и исследовательских платформах, где требования к отказоустойчивости значительно выше.
RTK — сантиметровая навигация
Для задач картографирования, геодезии, строительства и высокоточной посадки обычного GPS уже недостаточно.
В этих случаях используются системы RTK (Real-Time Kinematic).
Они работают совместно с базовой станцией, координаты которой известны заранее. База вычисляет ошибки спутниковых измерений и передаёт поправки беспилотнику по радиоканалу.
При благоприятных условиях точность позиционирования увеличивается с нескольких метров до 2–3 сантиметров.
И PX4, и ArduPilot поддерживают работу с RTK-приёмниками через протоколы RTCM и широко применяются в профессиональных геодезических комплексах.
Двойные и резервированные датчики
Современные полётные контроллеры всё чаще оснащаются несколькими экземплярами критически важных датчиков.
Например:
- два или три гироскопа;
- несколько акселерометров;
- два барометра;
- несколько компасов;
- два GPS-приёмника.
Автопилот непрерывно сравнивает их показания между собой. Если один из датчиков начинает выдавать значения, существенно отличающиеся от остальных, система распознаёт его как неисправный и автоматически исключает из расчётов.
Такая схема значительно повышает надёжность и является обязательной для многих профессиональных и промышленных беспилотных платформ.
Сравнение навигационных возможностей
| Возможность | PX4 | ArduPilot |
|---|---|---|
| GPS/GNSS | Полная поддержка | Полная поддержка |
| RTK | Да | Да |
| Несколько GPS | Поддерживается | Поддерживается |
| Оптический поток | Да | Да |
| Внешняя навигация | Да | Да |
| Резервирование датчиков | Есть | Более развитое |
| Гибкость настройки EKF | Высокая | Очень высокая |
С точки зрения базовых навигационных возможностей различия между PX4 и ArduPilot невелики. Обе платформы поддерживают современные GNSS-приёмники, RTK, инерциальную навигацию и внешние системы позиционирования. Однако ArduPilot традиционно предлагает больше вариантов конфигурации и резервирования, тогда как PX4 делает акцент на более простой архитектуре и удобной интеграции с современными робототехническими системами.
Полёт без GPS: современная автономная навигация
Ещё десять лет назад потеря сигнала GPS практически означала потерю беспилотника. Автопилот переходил в аварийный режим, прекращал выполнение миссии или требовал немедленного вмешательства оператора. Сегодня ситуация кардинально изменилась.
Современные беспилотные системы всё чаще проектируются с расчётом на работу в условиях, где спутниковая навигация отсутствует, недоступна или намеренно подавляется. Это актуально не только для полётов внутри зданий, тоннелей и густых лесных массивов, но и для районов с активным применением средств радиоэлектронной борьбы.
И PX4, и ArduPilot за последние годы значительно расширили возможности автономной навигации, однако реализуют её разными способами.
Почему GPS перестал быть основным источником навигации?
Спутниковая навигация обладает рядом фундаментальных ограничений, которые невозможно устранить исключительно программными средствами.
- GPS легко подавляется средствами радиоэлектронной борьбы.
- Сигнал может быть подменён (спуфинг).
- В городской застройке возникают многолучевые отражения.
- В помещениях спутниковый сигнал практически отсутствует.
- Под плотной растительностью точность резко снижается.
- При выполнении точных задач погрешность в несколько метров уже неприемлема.
Поэтому современные автопилоты рассматривают GPS лишь как один из множества источников информации, а не как единственный способ определения координат.
Optical Flow — оптический поток
Первым шагом к автономной навигации без GPS стало использование датчиков оптического потока (Optical Flow).
Принцип их работы достаточно прост. Камера направлена вниз и непрерывно анализирует смещение элементов поверхности между соседними кадрами.
Если аппарат переместился на несколько сантиметров, изображение также смещается. Измеряя величину этого смещения, автопилот определяет собственную скорость относительно земли.
Для перевода пикселей изображения в реальные метры необходима информация о высоте полёта. Поэтому Optical Flow почти всегда используется совместно с лазерным дальномером или лидаром.
Такой подход позволяет уверенно удерживать позицию внутри помещений и на малых высотах даже при полном отсутствии спутниковой навигации.
Visual Odometry (VO)
Следующим этапом развития стала визуальная одометрия (Visual Odometry).
В отличие от Optical Flow, здесь анализируется уже не только смещение поверхности под аппаратом, а изменение положения большого количества характерных объектов в окружающем пространстве.
Алгоритм работает следующим образом:
- Камера получает очередной кадр.
- Выделяются устойчивые особенности изображения (углы, линии, текстуры).
- На следующем кадре система ищет те же самые объекты.
- По их взаимному смещению вычисляется перемещение аппарата.
Фактически беспилотник начинает самостоятельно измерять собственное движение, используя окружающий мир как естественную систему координат.
Visual-Inertial Odometry (VIO)
Наиболее распространённым решением сегодня является визуально-инерциальная одометрия (VIO).
Здесь объединяются данные:
- камер;
- гироскопов;
- акселерометров.
IMU обеспечивает очень высокую частоту измерений, но постепенно накапливает ошибку. Камера, наоборот, работает медленнее, однако способна регулярно корректировать накопленный дрейф.
Совместная обработка этих данных позволяет получить значительно более устойчивую навигацию по сравнению с использованием каждого датчика по отдельности.
Именно VIO сегодня применяется во многих современных автономных роботах, складской технике и беспилотных летательных аппаратах.
SLAM — построение карты окружающего мира
Если Visual Odometry определяет только собственное перемещение аппарата, то технология SLAM (Simultaneous Localization and Mapping) идёт значительно дальше.
Во время движения система одновременно решает две задачи:
- строит карту окружающего пространства;
- определяет собственное положение на этой карте.
Это одна из самых сложных задач современной робототехники.
Используя камеры, лидары или глубинные сенсоры, беспилотник постепенно формирует трёхмерную модель окружающей среды. Затем эта карта применяется для последующей навигации даже в полностью неизвестных помещениях.
Именно SLAM делает возможными автономные полёты в шахтах, складах, тоннелях, промышленных цехах и других местах, где GPS недоступен.
Внешняя навигация (External Vision)
Не всегда вычисления выполняются непосредственно на полётном контроллере.
Во многих современных системах используется отдельный вычислительный модуль:
- NVIDIA Jetson;
- Raspberry Pi;
- Orange Pi;
- Intel NUC;
- другие одноплатные компьютеры.
На внешнем компьютере работают сложные алгоритмы компьютерного зрения, нейронные сети, SLAM и распознавание объектов. После обработки вычисленное положение аппарата передаётся автопилоту через MAVLink по сообщениям семейства VISION_POSITION_ESTIMATE, ODOMETRY или ATT_POS_MOCAP.
Для самого автопилота источник координат уже не имеет принципиального значения. Он получает готовые данные о положении аппарата и использует их так же, как координаты GPS.
Поддержка в PX4
PX4 изначально разрабатывался с расчётом на тесную интеграцию с современными робототехническими платформами. Поэтому поддержка внешней навигации реализована максимально естественно.
Особенно хорошо поддерживаются:
- ROS 2;
- MAVSDK;
- MAVROS;
- VIO;
- Motion Capture;
- Visual SLAM.
Поэтому большинство университетских проектов и исследовательских лабораторий используют именно PX4 при разработке автономных систем навигации.
Поддержка в ArduPilot
ArduPilot также способен работать с внешними системами позиционирования и поддерживает передачу данных по MAVLink. Более того, за последние годы возможности проекта в этой области значительно выросли.
Поддерживаются:
- Visual Odometry;
- Optical Flow;
- Motion Capture;
- Beacon-системы;
- UWB-позиционирование;
- внешние фильтры навигации.
Однако настройка подобных систем зачастую требует большего количества параметров и более глубокого понимания внутренней архитектуры автопилота.
Можно ли сегодня полностью отказаться от GPS?
Технически — да. Уже существуют беспилотные комплексы, которые месяцами работают без использования спутниковой навигации.
Однако на практике большинство современных аппаратов используют комбинированный подход. GPS остаётся одним из источников информации, но его данные постоянно сверяются с инерциальной навигацией, визуальной одометрией, лидарами, радарами и другими сенсорами.
Именно объединение нескольких независимых источников информации сегодня считается главным направлением развития автономной навигации. Поэтому вопрос постепенно меняется с «может ли беспилотник летать без GPS?» на «какие источники информации следует объединить, чтобы обеспечить устойчивую навигацию в любых условиях».
MAVLink — язык общения современных беспилотных систем
Если автопилот можно назвать мозгом беспилотника, то MAVLink является его языком. Именно этот протокол обеспечивает обмен информацией между всеми компонентами современной беспилотной системы: полётным контроллером, наземной станцией, внешним компьютером, полезной нагрузкой, системой машинного зрения и даже другими беспилотниками.
Сегодня практически невозможно встретить открытый автопилот, который не поддерживал бы MAVLink. Он стал фактическим мировым стандартом обмена данными для беспилотных летательных аппаратов.
История появления MAVLink
Протокол MAVLink (Micro Air Vehicle Link) был создан в 2009 году разработчиком Лоренцем Майером (Lorenz Meier) как лёгкий, быстрый и универсальный способ передачи информации между компонентами беспилотных систем.
Главной задачей было создать протокол, который:
- не требует больших вычислительных ресурсов;
- подходит для микроконтроллеров;
- работает по медленным радиоканалам;
- легко расширяется новыми сообщениями;
- не зависит от конкретной операционной системы.
Эта задача была успешно решена. Сегодня MAVLink поддерживается сотнями программных и аппаратных проектов по всему миру.
Как устроен MAVLink
Передача данных организована в виде небольших сообщений фиксированного формата.
Каждое сообщение содержит:
- служебный заголовок;
- идентификатор системы;
- идентификатор компонента;
- тип сообщения;
- полезные данные;
- контрольную сумму CRC.
Такой подход позволяет быстро обрабатывать сообщения даже на микроконтроллерах с ограниченной производительностью.
Что передаётся через MAVLink?
Практически всё, что связано с управлением беспилотником.
| Тип информации | Примеры сообщений |
|---|---|
| Телеметрия | Положение, скорость, высота, ориентация |
| Состояние батареи | Напряжение, ток, остаток заряда |
| GPS | Координаты, количество спутников, точность |
| IMU | Ускорения и угловые скорости |
| Команды пилота | RC_CHANNELS, MANUAL_CONTROL |
| Управление миссией | MISSION_ITEM, MISSION_COUNT |
| Параметры | PARAM_REQUEST, PARAM_VALUE |
| Команды | COMMAND_LONG, COMMAND_INT |
Благодаря универсальному формату одна и та же наземная станция может одинаково работать как с PX4, так и с ArduPilot.
MAVLink 1 и MAVLink 2
Сегодня используются две версии протокола.
MAVLink 1 был максимально простым и компактным, однако со временем его возможностей стало недостаточно.
Поэтому появилась версия MAVLink 2, которая принесла несколько важных улучшений:
- поддержку цифровой подписи сообщений;
- расширенное адресное пространство;
- увеличенное количество типов сообщений;
- возможность совместимости со старыми версиями.
В настоящее время практически все современные проекты используют именно MAVLink 2.
Наземные станции управления
Большинство пользователей взаимодействуют с MAVLink, даже не подозревая об этом.
Когда оператор открывает карту в наземной станции и видит положение беспилотника, уровень заряда батареи или маршрут полёта — вся эта информация поступает именно по MAVLink.
Наиболее известные наземные станции:
- QGroundControl — основной инструмент для PX4.
- Mission Planner — наиболее популярная станция для ArduPilot.
- APM Planner 2.
- MAVProxy — консольная станция управления.
- Многочисленные мобильные приложения.
Все они используют один и тот же протокол обмена данными.
Управление миссиями
Одной из самых мощных возможностей MAVLink является поддержка автоматических миссий.
При создании маршрута оператор фактически загружает в память автопилота последовательность команд:
- взлёт;
- полёт к заданной точке;
- изменение скорости;
- ожидание;
- фотографирование;
- запуск полезной нагрузки;
- посадка.
После загрузки миссии дальнейшее выполнение происходит уже без участия наземной станции.
Управление параметрами
Практически каждый коэффициент автопилота может быть изменён через MAVLink.
Когда инженер изменяет PID-регулятор в Mission Planner или QGroundControl, происходит следующий процесс:
- Наземная станция формирует MAVLink-сообщение.
- Сообщение передаётся по радиоканалу.
- Автопилот проверяет его корректность.
- Параметр сохраняется во внутренней памяти.
- Автопилот отправляет подтверждение.
Весь процесс занимает доли секунды.
MAVLink и компьютерное зрение
Одним из важнейших достоинств протокола стала возможность интеграции внешних вычислительных модулей.
Например, NVIDIA Jetson обнаружила препятствие при помощи нейронной сети.
Вместо непосредственного управления двигателями внешний компьютер просто отправляет автопилоту новые координаты или команды через MAVLink.
Благодаря этому вычислительно сложные задачи отделяются от критически важного контура управления полётом.
Именно таким образом сегодня строится большинство современных автономных беспилотных комплексов.
MAVSDK — современный API
Хотя MAVLink представляет собой низкоуровневый протокол обмена сообщениями, большинству разработчиков неудобно работать непосредственно с отдельными пакетами.
Для решения этой задачи создан MAVSDK — высокоуровневая библиотека, позволяющая управлять беспилотником при помощи привычных языков программирования.
Поддерживаются:
- C++;
- Python;
- Swift;
- Kotlin.
Используя MAVSDK, разработчик может буквально несколькими строками кода выполнить взлёт, посадку, построение маршрута или получение телеметрии, не задумываясь о внутреннем устройстве протокола.
MAVROS и ROS 2
Для интеграции автопилотов с робототехническими системами широко используется пакет MAVROS (для ROS) и его современные аналоги для ROS 2.
Они преобразуют сообщения MAVLink в стандартные топики ROS, благодаря чему любой алгоритм машинного зрения, навигации или искусственного интеллекта может работать с беспилотником как с обычным роботом.
Именно эта возможность сделала PX4 и ArduPilot полноценными платформами для создания интеллектуальных автономных систем, а не просто программами управления квадрокоптерами.
Подход PX4 и ArduPilot
С точки зрения поддержки MAVLink различия между платформами минимальны — обе реализуют практически полный набор сообщений протокола. Однако существуют различия в экосистеме.
PX4 традиционно ориентирован на использование QGroundControl, MAVSDK и ROS 2, что делает его особенно привлекательным для исследовательских проектов и разработки автономных роботов.
ArduPilot, сохраняя полную совместимость с этими инструментами, дополнительно предлагает глубокую интеграцию с Mission Planner и большое количество специализированных функций для настройки, диагностики и эксплуатации различных типов беспилотных платформ.
Компьютерное зрение, искусственный интеллект и внешние вычислительные модули
До середины 2010-х годов практически вся логика беспилотного летательного аппарата выполнялась непосредственно полётным контроллером. Однако развитие нейронных сетей, компьютерного зрения и автономной робототехники резко увеличило вычислительные требования. Даже самые современные микроконтроллеры семейства STM32H7 не способны в реальном времени выполнять задачи распознавания объектов, построения трёхмерных карт местности или работы больших языковых моделей.
Именно поэтому современный беспилотник всё чаще представляет собой распределённую вычислительную систему, где автопилот отвечает за безопасное управление полётом, а отдельный высокопроизводительный компьютер решает интеллектуальные задачи.
Почему автопилот не может выполнять искусственный интеллект?
Полётный контроллер проектируется совершенно для других целей.
Его основные требования:
- предсказуемое время выполнения команд;
- работа в режиме реального времени;
- минимальное энергопотребление;
- максимальная надёжность;
- устойчивость к отказам.
Нейронные сети обладают противоположными свойствами:
- огромный объём вычислений;
- неравномерная нагрузка на процессор;
- необходимость использования GPU или NPU;
- большой объём оперативной памяти.
Если попытаться выполнять сложную нейронную сеть непосредственно внутри автопилота, возникнет риск нарушения критически важных циклов управления. Даже кратковременная задержка может привести к потере устойчивости аппарата.
Разделение ответственности
Поэтому практически все современные беспилотные комплексы используют двухуровневую архитектуру.
| Автопилот | Внешний компьютер |
|---|---|
| Стабилизация | Компьютерное зрение |
| PID-регуляторы | Нейронные сети |
| Работа двигателей | SLAM |
| Навигация | Распознавание объектов |
| FailSafe | Планирование маршрутов |
| MAVLink | Высокоуровневая логика миссии |
Такое разделение позволяет каждой системе выполнять именно ту работу, для которой она была создана.
Какие вычислительные модули используются сегодня?
Выбор платформы зависит от сложности проекта и требуемой производительности.
Наиболее распространёнными являются:
- NVIDIA Jetson Nano;
- NVIDIA Jetson Orin Nano;
- NVIDIA Jetson Orin NX;
- NVIDIA Jetson AGX Orin;
- Raspberry Pi 5;
- Orange Pi 5 Plus;
- Intel NUC;
- AMD Ryzen Embedded;
- другие ARM и x86-платформы.
Для небольших проектов достаточно одноплатного компьютера, тогда как тяжёлые автономные комплексы могут использовать полноценные промышленные вычислительные станции с несколькими ускорителями искусственного интеллекта.
Какие задачи выполняет искусственный интеллект?
Современные алгоритмы машинного обучения позволяют беспилотнику воспринимать окружающий мир значительно сложнее, чем это возможно при помощи традиционных методов обработки сигналов.
Наиболее распространённые задачи:
- обнаружение людей;
- распознавание транспортных средств;
- поиск объектов;
- обнаружение препятствий;
- анализ дорожной инфраструктуры;
- классификация местности;
- автоматическое сопровождение цели;
- семантическая сегментация изображения;
- поиск безопасной площадки для посадки.
При этом нейронная сеть не управляет двигателями напрямую. Она лишь передаёт результаты анализа автопилоту, который принимает окончательное решение.
Компьютерное зрение
Не все алгоритмы компьютерного зрения основаны на искусственном интеллекте.
Многие задачи успешно решаются классическими методами обработки изображений:
- определение особенностей изображения;
- оптический поток;
- визуальная одометрия;
- стереозрение;
- определение глубины;
- калибровка камер;
- поиск линий и контуров.
Такие алгоритмы работают значительно быстрее нейронных сетей и часто используются совместно с ними.
Глубинные камеры и лидары
Для построения трёхмерной модели окружающего пространства одной RGB-камеры недостаточно.
Поэтому современные беспилотники всё чаще используют:
- стереокамеры;
- ToF-камеры;
- лидары;
- трёхмерные лидары;
- миллиметровые радары.
Каждый из этих датчиков имеет свои преимущества и ограничения.
Например, лидар отлично измеряет расстояние, но практически не различает тип объектов. Камера хорошо определяет внешний вид предметов, однако значительно хуже оценивает их точное расстояние. Именно поэтому наиболее эффективными считаются мультисенсорные системы, объединяющие данные нескольких источников.
ROS 2 как объединяющая среда
Практически все современные проекты автономной робототехники используют Robot Operating System 2 (ROS 2).
В типичной архитектуре происходит следующее:
- Камеры передают изображения в ROS 2.
- Нейронные сети выполняют распознавание объектов.
- SLAM строит карту окружающей среды.
- Планировщик рассчитывает безопасную траекторию.
- Команды передаются автопилоту через MAVLink.
- Автопилот управляет исполнительными механизмами.
Подобная архитектура позволяет независимо развивать интеллектуальные алгоритмы и систему управления полётом.
PX4 и ROS 2
Именно тесная интеграция с ROS 2 считается одной из сильнейших сторон PX4.
Благодаря использованию современных механизмов обмена сообщениями разработчики могут достаточно быстро подключать новые алгоритмы навигации, машинного зрения и искусственного интеллекта без серьёзных изменений самого автопилота.
По этой причине большинство исследовательских лабораторий, университетов и компаний, разрабатывающих автономные воздушные роботы, используют именно PX4 как основу экспериментальных проектов.
ArduPilot и интеллектуальные системы
ArduPilot также поддерживает интеграцию с внешними вычислительными модулями, MAVROS, ROS 2 и современными системами компьютерного зрения.
Однако исторически развитие проекта было ориентировано прежде всего на надёжную эксплуатацию широкого спектра беспилотных платформ, а не исключительно на исследовательскую робототехнику.
Тем не менее за последние годы возможности ArduPilot значительно выросли. Сегодня проект успешно применяется в системах автономной доставки, инспекции инфраструктуры, сельском хозяйстве, морской робототехнике и других областях, где используются элементы искусственного интеллекта и компьютерного зрения.
Куда движется отрасль?
Ещё несколько лет назад автопилот воспринимался как самостоятельное устройство. Сегодня ситуация изменилась. Всё чаще он становится частью более крупной интеллектуальной системы, включающей камеры, лидары, радары, нейронные сети, внешние вычислительные модули и облачные сервисы.
И PX4, и ArduPilot постепенно эволюционируют именно в этом направлении. Их основная задача уже не заключается в выполнении сложных вычислений искусственного интеллекта. Вместо этого они становятся высоконадёжными исполнительными системами реального времени, которые обеспечивают безопасный полёт, принимают команды от интеллектуальных алгоритмов верхнего уровня и гарантируют устойчивость аппарата даже в случае отказа отдельных компонентов вычислительного комплекса.
Практический выбор: PX4 или ArduPilot?
После подробного знакомства с архитектурой, алгоритмами управления, навигацией и современными технологиями автономного полёта становится очевидно, что вопрос «какой автопилот лучше?» поставлен не совсем корректно.
И PX4, и ArduPilot являются зрелыми проектами мирового уровня, которые развиваются уже более пятнадцати лет. Оба имеют открытый исходный код, поддерживаются тысячами разработчиков, используются университетами, промышленными предприятиями и государственными организациями во многих странах мира.
Однако философия этих проектов существенно различается.
Философия PX4
PX4 создавался как современная программная платформа с модульной архитектурой, удобной интеграцией с робототехническими системами и возможностью быстрого внедрения новых технологий.
Для разработчика это означает:
- логичную структуру проекта;
- современную архитектуру программного обеспечения;
- простую интеграцию с ROS 2;
- отличную поддержку внешних вычислительных модулей;
- удобную разработку собственных алгоритмов.
Поэтому PX4 особенно популярен в университетах, исследовательских лабораториях и компаниях, работающих над автономными роботами нового поколения.
Философия ArduPilot
ArduPilot развивался иначе.
Главной целью проекта всегда была универсальность и практическая эксплуатация.
За годы развития он превратился в огромную библиотеку готовых инженерных решений, поддерживающую практически все существующие типы беспилотной техники.
Преимущества такого подхода:
- огромное количество готовых функций;
- поддержка практически любого оборудования;
- исключительно гибкая настройка;
- зрелая система диагностики;
- многолетний опыт эксплуатации в самых разных условиях.
Именно поэтому ArduPilot широко используется в промышленности, сельском хозяйстве, картографии, логистике, морской робототехнике и многочисленных коммерческих проектах.
Сравнение возможностей
| Критерий | PX4 | ArduPilot |
|---|---|---|
| Архитектура | ★★★★★ | ★★★★☆ |
| Простота разработки новых модулей | ★★★★★ | ★★★★☆ |
| ROS 2 | ★★★★★ | ★★★★☆ |
| Компьютерное зрение | ★★★★★ | ★★★★☆ |
| Поддержка самолётов | ★★★★☆ | ★★★★★ |
| Поддержка VTOL | ★★★★★ | ★★★★★ |
| Наземные роботы | ★★★☆☆ | ★★★★★ |
| Подводные аппараты | ★★☆☆☆ | ★★★★★ |
| Настройка параметров | ★★★★☆ | ★★★★★ |
| Диагностика | ★★★★☆ | ★★★★★ |
| Поддержка оборудования | ★★★★☆ | ★★★★★ |
| Порог входа | Ниже | Выше |
Когда выбрать PX4?
PX4 станет удачным выбором, если основная задача проекта связана с разработкой новых технологий автономного управления.
Он особенно хорошо подходит для:
- университетских исследований;
- разработки алгоритмов искусственного интеллекта;
- компьютерного зрения;
- SLAM и Visual Odometry;
- экспериментальных беспилотных платформ;
- интеграции с ROS 2;
- разработки собственной робототехники.
Современная архитектура PX4 значительно упрощает сопровождение сложных программных проектов, где постоянно появляются новые алгоритмы и датчики.
Когда выбрать ArduPilot?
Если же основной задачей является создание надёжной рабочей системы с максимально широкими возможностями настройки, то ArduPilot зачастую оказывается более предпочтительным вариантом.
Он особенно эффективен для:
- промышленных БПЛА;
- сельскохозяйственной авиации;
- картографических комплексов;
- морских беспилотных систем;
- наземных роботов;
- долговременной эксплуатации;
- нестандартных конфигураций летательных аппаратов.
Благодаря огромному количеству накопленных функций многие задачи в ArduPilot уже имеют готовое решение, тогда как в других системах их пришлось бы реализовывать самостоятельно.
Главная тенденция развития
Несмотря на конкуренцию между проектами, последние годы демонстрируют интересную тенденцию.
PX4 и ArduPilot постепенно заимствуют сильные стороны друг друга.
PX4 активно расширяет поддержку различных типов техники, совершенствует средства диагностики и увеличивает количество готовых функций.
ArduPilot, в свою очередь, развивает интеграцию с современными робототехническими платформами, улучшает поддержку ROS 2, внешней навигации и систем компьютерного зрения.
В результате различия между проектами постепенно сокращаются, хотя их базовая философия остаётся неизменной.
Будущее открытых автопилотов
Следующее десятилетие, вероятно, станет периодом самых серьёзных изменений в истории беспилотных технологий.
Уже сегодня можно выделить несколько ключевых направлений развития:
- массовое применение искусственного интеллекта;
- полёты без использования спутниковой навигации;
- интеграция с роями беспилотников;
- распределённые вычислительные системы;
- автоматическое планирование маршрутов;
- адаптивные алгоритмы управления;
- использование цифровых двойников и высокоточной симуляции;
- широкое применение многосенсорной навигации.
При этом роль самого автопилота останется неизменной. Он по-прежнему будет отвечать за безопасное управление полётом в режиме реального времени, тогда как интеллектуальные вычисления всё чаще будут выполняться внешними специализированными вычислительными модулями.
Заключение
Сегодня PX4 и ArduPilot являются двумя наиболее зрелыми и функциональными открытыми автопилотами в мире. Каждый из них прошёл долгий путь развития и доказал свою эффективность в тысячах реальных проектов.
Выбор между ними должен определяться не популярностью, а требованиями конкретной задачи. Если проект ориентирован на исследования, робототехнику и современные программные архитектуры, PX4 предоставляет широкие возможности для разработки и интеграции. Если же приоритетом являются универсальность, гибкость настройки, поддержка разнообразной техники и проверенная временем надёжность, ArduPilot остаётся одним из лучших решений.
Важно понимать, что обе платформы продолжают активно развиваться, а их сообщества регулярно внедряют новые алгоритмы, расширяют поддержку оборудования и совершенствуют средства автономной навигации. Именно благодаря открытому исходному коду эти проекты стали фундаментом современной индустрии беспилотных систем и продолжают определять направление её развития.
Продолжение темы на портале «Технологии Победы»: в следующих публикациях мы подробно рассмотрим протокол MAVLink, внутреннее устройство EKF, алгоритмы SLAM, работу ROS 2, а также практическую интеграцию искусственного интеллекта и компьютерного зрения в современные беспилотные комплексы.






