Робототехника
Дроны и БПЛА
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