Робототехника

Дроны и БПЛА

Demo квадрокоптер на хобби-форуме - 200 строк кода, PID на Arduino и пропеллеры на 4 моторах. Продакшн-дрон Skydio 2+ - 30 камер, ИИ-обход препятствий, automatic flight, follow-me, и всё это сертифицировано FAA для коммерческого использования. Между этими полюсами - PX4 на 600 000 строк, EKF на 30 переменных состояния, MAVLink-стек на 200 типов сообщений, swarm-алгоритмы из 100 публикаций IEEE. Дрон выглядит простой летающей платформой, но реально это многоуровневая система с hard real-time core, который держит небо, и slow autonomy outer-loops, который решает задачу. Понимание этой архитектуры - условие для построения чего-либо сложнее хобби-проекта.

  • **Intel Drone Light Show 2018**: 2018 дронов одновременно над PyeongChang - centralized swarm, мировой рекорд
  • **Skydio 2+**: 30 камер, ИИ обход препятствий в реальном времени, follow-me без GPS, $1099
  • **DJI Mavic Pro Series**: 75% мирового рынка коммерческих дронов, проприетарный flight stack на базе кастомного RTOS
  • **DARPA OFFSET program**: 250 беспилотников (UAS + UGV) для городских операций - showcase decentralized swarm
  • **Zipline (Руанда, Гана)**: медицинский UAV-доставщик крови и вакцин в труднодоступные регионы - 800 000+ доставок к 2024

Flight Control: каскадный PID и attitude estimation

Квадрокоптер - это нестабильная система: оставленный без управления, он переворачивается за 200-300 мс. Стабилизация требует управляющего цикла 250-1000 Hz, который читает гироскоп, акселерометр, магнитометр, оценивает текущую ориентацию через **complementary filter** или **EKF**, и выдаёт thrust на 4 мотора. **Cascade PID** - канонический контроллер: внешний цикл (50-100 Hz) держит позицию, средний цикл (100-250 Hz) - скорость, внутренний (500-1000 Hz) - angular rate. Каждый уровень получает setpoint от верхнего и выдаёт setpoint нижнему. Без жёсткого real-time на внутреннем цикле дрон физически не летит - джиттер 5 мс на 500 Hz уже даёт качающуюся траекторию.

Attitude estimation на дроне = sensor fusion гироскопа (точный краткосрочно, плывёт долгосрочно) + акселерометра (даёт абсолютную gravity vector, но шумный при ускорениях) + магнитометра (yaw, но искажается металлом). EKF - стандарт для production-автопилотов, complementary filter (Madgwick/Mahony) - lightweight альтернатива для CPU-ограниченных микроконтроллеров. Allocation matrix переводит desired torque + thrust в 4 мотор-команды: для quadrotor X-конфигурации это 4x4 матрица, инвертируемая один раз при настройке.

Почему rate controller квадрокоптера должен работать на 500-1000 Hz, а position controller достаточно 50-100 Hz?

PX4: модульный автопилот с uORB и NuttX

**PX4** - open-source автопилот, развиваемый ETH Zurich с 2012 года, ныне поддерживаемый Dronecode Foundation. Архитектура - модульный набор процессов на RTOS NuttX, общающихся через шину **uORB** (Object Request Broker) - publish/subscribe механизм для real-time IPC. Каждый модуль (estimator, controller, mavlink, gps_driver) - отдельный поток с собственным cycle rate. Поддерживаемое железо: Pixhawk (STM32H7, 480 MHz), Cube Orange, NXP RDDRONE. Лицензия BSD-3 разрешает коммерческое использование без копирования исходников - это причина, почему Skydio, Auterion, Yuneec строят продукты на PX4.

Стек коммуникации PX4: модуль `ekf2` (EKF attitude+position) публикует topic `vehicle_attitude`; модуль `mc_att_control` (multicopter attitude controller) подписан на него и публикует `actuator_setpoints`; модуль `pwm_out` подписан на это и пишет в железо. **MAVLink** - внешний протокол связи с ground station (QGroundControl, Mission Planner). Симуляция - через **Gazebo** или **jMAVSim**, что позволяет тестировать flight stack до сборки железа.

Зачем PX4 использует uORB вместо прямых вызовов функций между модулями?

ArduPilot: монолитный автопилот для широкого спектра платформ

**ArduPilot** - вторая ветвь open-source автопилотов, начавшаяся в 2010 году на Arduino (отсюда название). Сейчас работает на ChibiOS или Linux, поддерживает не только мультикоптеры (ArduCopter), но и самолёты (ArduPlane), машины (ArduRover), катамараны (ArduSub), вертолёты традиционной схемы. Лицензия GPLv3 - вирусная: модификации обязаны быть открыты. Это плюс для сообщества и проблема для коммерческих продуктов. Architecturally ArduPilot - монолит: единый main loop с фиксированным расписанием задач, без отдельных потоков на модуль.

PX4 vs ArduPilot - типичный выбор: PX4 удобнее для R&D и кастомных платформ (модульность, BSD), ArduPilot - для production-машин с проверенной кинематикой (зрелость алгоритмов, широкая база vehicle frames). Mission Planner для ArduPilot часто предпочитают над QGroundControl за продвинутые tuning-функции. Оба используют MAVLink, что даёт общий ground-station ecosystem. **Lua scripting** в ArduPilot даёт расширение логики без перекомпиляции прошивки - частая практика для специфичных манёвров.

Коммерческая компания строит UAV-продукт с проприетарной логикой mission planning. Какой автопилот предпочтительнее?

Swarm: координация роёв и distributed mission

**Drone swarm** - группа от 10 до 10 000 дронов, координирующих движение и задачу. Шоу Intel Drone Light Show (2018) подняли 2018 дронов одновременно с одного оператора - но это был **centralized swarm**: каждый дрон следует жёсткой preplanned траектории, как один большой марионетка. **Decentralized swarm** - другая парадигма: каждый дрон принимает локальные решения на основе наблюдений за соседями, без центрального контроля. Военные применения (DARPA OFFSET), search-and-rescue, формация в опасных средах - типичные кейсы. Алгоритмы вдохновлены биологией: rules Boids от Craig Reynolds (1986) - separation, alignment, cohesion - дают эмерджентное формирование стаи.

Communication topology - ключевая характеристика swarm: **star** (все через лидера) - простая, но точка отказа; **mesh** (точка-точка по 802.11s или LoRa) - отказоустойчивая, но сложная маршрутизация; **gossip** (рандомизированный broadcast) - масштабируется до тысяч узлов. Latency и dropouts терпимы только для slow-changing setpoints - для real-time formation flight требуется sub-100 ms reaction. Open-source стек: **MAVSwarm**, **Crazyswarm** (для Bitcraze Crazyflie nano-drones), **ROS 2 + DDS** для middleware.

Дрон - это летающий компьютер с пропеллерами; основная задача - удержать его в воздухе через PID

Дрон - это многоуровневая система: hard real-time control loop (1 kHz) внутри slow autonomy layer (mission, planning), внутри ещё более медленного layer операторских команд и safety overrides. Каждый уровень имеет свой timing budget, failure modes и сертификационные требования. Падение одного уровня компенсируется верхним

PID на 1 kHz - 5% работы flight stack. Остальное: state estimation через EKF/sensor fusion, mission management, geofencing, return-to-launch, communication redundancy, allocation matrix для конкретного airframe, ESC калибровка, защита от windup. Производственный автопилот - PX4 или ArduPilot - содержит сотни тысяч строк именно из-за этой многослойности

Чем decentralized swarm принципиально отличается от centralized показа из 2018 дронов Intel?

Ключевые идеи

  • **Flight control** - каскадный PID на 50-1000 Hz с attitude estimation через EKF или complementary filter; внутренний rate-цикл должен быть в 5-10 раз быстрее внешнего position-цикла
  • **PX4** - модульный автопилот на NuttX с uORB publish/subscribe, BSD-лицензия для коммерческого использования
  • **ArduPilot** - монолитный автопилот для широкого спектра платформ (copter, plane, rover, sub), GPLv3 ограничивает закрытые форки
  • **Decentralized swarm** через Boids-правила даёт эмерджентное формирование стаи без центрального координатора - устойчиво к отказам, но требует sub-100 мс latency между соседями
  • **Drone - многослойная система**: hard real-time control inside slow autonomy inside operator commands; failure одного слоя компенсируется верхним

Связанные темы

Дроны - между autonomous vehicles из rob-13 и более широкой темой robotics architecture; стек технологий пересекается с control theory, sensor fusion и distributed systems:

  • Autonomous Vehicles — Та же четырёхуровневая архитектура (perception/prediction/planning/control), но без V2X и с другим failure budget - дрон при отказе падает, машина останавливается
  • PID-контроллер — Cascade PID в дроне - канонический пример многоуровневого контроля; tuning требует понимания постоянных времени системы
  • Sensor Fusion — EKF в drone attitude estimation - частный случай sensor fusion; те же принципы для camera+LiDAR+radar в machine-учат

Вопросы для размышления

  • PX4 (BSD) vs ArduPilot (GPLv3): за какими ещё компромиссами лицензии скрывается архитектурный выбор для коммерческого продукта?
  • Centralized swarm даёт точность, decentralized - устойчивость. Какая гибридная архитектура могла бы давать оба свойства?
  • Дрон проводит 95% времени в режиме hover без задач - есть ли архитектурный смысл переключаться между разными flight stacks (стабильный legacy vs experimental ML-based) в зависимости от режима?

Связанные уроки

  • rob-13 — Дроны - частный случай автономных систем
  • rob-15 — Дроны открывают понимание роевой робототехники
  • opt-13 — Многокритериальная оптимизация траектории дронов
  • prob-17 — Цепи Маркова в предсказании движения БПЛА
  • net-14-udp — UDP для RT-телеметрии дронов с низкой задержкой
  • la-01-vectors-intro
Дроны и БПЛА

0

1

Войти