ArduPilot
ArduPilot — пакет программ автопилота с открытым исходным кодом для беспилотных транспортных средств, способных к автономному управлению. Поддерживаются следующие типы:
- Мультикоптер
- Летательный аппарат с фиксированным крылом и VTOL
- Вертолёты
- Наземные транспортные средства
- Катера
- Подводные аппараты
- Антенные трекеры
Изначально ArduPilot разрабатывался энтузиастами для управления летательными аппаратами и транспортом, но впоследствии превратился в полнофункциональный и надёжный автопилот, применяемый в промышленности[3], исследовательских организациях[4] и среди любителей.
Общие сведения
| ArduPilot | |||
|---|---|---|---|
| Тип | встроенное программное обеспечение и структура[d] | ||
| Разработчики | Команда разработчиков ArduPilot и сообщество | ||
| Написана на | C++, Python | ||
| Операционная система | мультиплатформенная | ||
| Первый выпуск | 2009 | ||
| Аппаратная платформа | STM32 | ||
| Последняя версия | |||
| Репозиторий | github.com/ArduPilot | ||
| |||
| |||
| Лицензия | GPLv3 | ||
| Сайт | ardupilot.org | ||
Программное и аппаратное обеспечение
Программный пакет ArduPilot включает навигационное ПО (обычно именуемое прошивкой в виде бинарных файлов для микроконтроллера), которое работает непосредственно на борту (будь то вертолёт, самолёт, автомобиль, антенный трекер или подводный аппарат), а также ПО наземной станции управления: Mission Planner, APM Planner, QGroundControl, MavProxy, Tower и другие.
Исходный код ArduPilot размещён и поддерживается на GitHub, где над ним работали почти 400 участников[5].
Комплектация программного обеспечения собирается автоматически каждую ночь с использованием непрерывной интеграции и модульных тестов через Travis CI, а сборочная среда включает многоплатформенный GNU-компилятор и Waf. Готовые бинарные файлы под различные аппаратные платформы доступны для загрузки на подразделах сайта ArduPilot.
ПО для вертолётов, самолётов, автомобилей, антенных трекеров и подводных аппаратов работает на широком спектре встраиваемого оборудования (включая полноценные компьютеры на Linux), как правило — на одном или нескольких микроконтроллерах или микропроцессорах, к которым подключаются функциональные датчики навигации. Минимальный набор датчиков включает гироскопы и акселерометры MEMS, необходимые для мультикоптеров и стабилизации самолёта. Обычно также применяются одна или несколько компасов, барометрических высотомеров, GPS, а дополнительно — датчики оптического потока, датчики скорости воздуха, дополнительные альтиметры/дальныемеры (лазерные, сонары), а также различные камеры (моно, стерео, RGB-D). Все эти сенсоры могут находиться на одной печатной плате или быть внешними.
Программное обеспечение наземной станции (Ground Station) — для программирования и мониторинга — доступно для Windows, Linux, macOS, iOS и Android.
ArduPilot реализован для множества аппаратных платформ, перечисленных в алфавитном порядке:
- APM 2.X (микроконтроллер Arduino Atmel Mega), разработан Джорди Муньосом в 2010 году[6]. APM расшифровывается как ArduPilotMega; используются только для старых версий ArduPilot.
- BeagleBone Blue и PXF Mini (вариант BeagleBone Black).
- Edge, контроллер дронов с видеотрансляцией, разработан Emlid.
- Erle-Brain (на базе Linux), разработан Erle Robotics.
- Intel Aero (на базе Linux или STM32)
- Intel Minnowboard (на базе Linux)[7].
- Navio2 и Navio+ (на базе Linux для Raspberry Pi), разработан Emlid.
- Parrot Bebop и Parrot C.H.U.C.K., разработан Parrot, S.A.
- Pixhawk (микроконтроллер ARM Cortex), первоначально разработан Лоренцом Майером и ETH Zurich, доработан и запущен в 2013 году PX4, 3DRobotics и командой ArduPilot[8].
- PixRacer (микроконтроллер ARM Cortex), разработан AUAV.
- Qualcomm SnapDragon (на базе Linux).
- SoC Zynq от Xilinx (Linux, ARM и FPGA-модуль)[9]
- The Cube, официально названный Pixhawk 2 (микроконтроллер ARM Cortex), разработан ProfiCNC в 2015 году.
- Virtual Robotics VRBrain (микроконтроллер ARM Cortex).
Кроме перечисленных навигационных платформ, ArduPilot поддерживает интеграцию и взаимодействие с сопутствующими/дополнительными компьютерами для сложной навигации с большим объёмом вычислений: NVidia TX1 и TX2 (NVIDIA Jetson), Intel Edison, Intel Joule, HardKernel Odroid, Raspberry Pi.
Возможности
ArduPilot предлагает широкий перечень функций, общих для всех транспортных средств:
- Полностью автономные, полуавтономные и ручные режимы полёта; возможность программировать миссии с 3D-точками; поддержка геозон.
- Функции стабилизации без необходимости внешнего копилота.
- Имитация с использованием разных симуляторов, включая ArduPilot SITL.
- Поддержка множества навигационных датчиков: RTK GPS, традиционный GPS L1, барометры, магнитометры, лазерные дальномеры и сонары, оптический поток, транспондер ADS-B, ИК-сенсоры, воздушная скорость, системы компьютерного зрения/трекеры движений.
- Связь с сенсорами через SPI, I²C, CAN, UART, SMBus.
- Обнаружение и обработка отказов: потеря радиоконтроля, GPS-сигнала, превышение лимитов, понижение напряжения батареи.
- Навигация в условиях отсутствия GPS: визуальное позиционирование, оптический поток, SLAM, позиционирование по UWB.
- Поддержка парашютов, магнитных захватов.
- Управление как бесщёточными, так и коллекторными двигателями.
- Поддержка фото- и видеоплатформ (гимбалы).
- Интеграция и взаимодействие с внешними компьютерами/копроцессорами.
- Подробная документация на вики ArduPilot.
- Форумы, каналы чата Gitter, GitHub, сообщества Facebook.
- Поддерживаемые режимы: стабилизация, высотное удержание, зависание, RTL (Return-to-Launch), авто, акро, автонастройка, торможение, круг, дрейф, наведённый (guidance и guidance без GPS), посадка, удержание позиции, спорт, бросок, трекинг, простые и суперпростые режимы, обход ADS-B[10].
- Автонастройка параметров.
- Разнообразие шасси: три-, квадро-, гекса-, окто- (плоские и коаксиальные), а также кастомные двигательные установки.
- Поддержка электрических и традиционных ДВС-вертолётов, монокоптеров и тандемных вертолётов.
- Режимы «Fly By Wire», круговой патруль (loiter), автопилот, акро.
- Варианты взлёта: ручной, с резинкой (bungee), катапультный, вертикальное взлетание (VTOL).
- Варианты посадки: с регулируемым снижением, по спирали, с обратной тягой, на сетку, вертикальная посадка (VTOL).
- Автонастройка, работа с симуляторами JSBSIM, X-Plane, RealFlight.
- Поддержка различных схем VTOL: самолёты-квадрокоптеры, наклонные крылья/роторы, вертикальные хвосты, орнитоптеры.
- Оптимизация самолётов с 3 или 4 каналами управления.
- Режимы: ручной, обучение, авто, управление рулём, удержание, навигация.
- Поддержка как колёсных, так и гусеничных шасси.
- Удержание глубины: c помощью датчиков давления обеспечивается стабильность глубины до нескольких сантиметров.
- Управление светом: поддержка подводного освещения через контроллер.
Документация ArduPilot детально изложена на официальной вики (700+ страниц), разбита на шесть главных разделов: руководство по вертолётам, самолётам, наземным и подводным аппаратам для пользователей; отдельная часть для разработчиков (ПО/аппаратное обеспечение); и общее руководство по совместным вопросам, использующее материалы из первых четырёх разделов.
Применение ArduPilot
- Дрон-гонки
- Радиоуправляемое моделирование для хобби
- Фотограмметрия с воздуха
- Воздушная фотосъёмка и видеосъёмка
- Дистанционное зондирование
- Поиск и спасение
- Робототехнические приложения
- Научные исследования
- Логистика
История
Проект ArduPilot появился в конце 2007 года[11], когда Джорди Муньос (впоследствии сооснователь 3DRobotics с Крисом Андерсоном) написал код Arduino — «ArduCopter» — для стабилизации радиоуправляемого вертолёта. В 2009 году Муньос и Андерсон выпустили первую версию ArduPilot 1.0[12] (ПО для полётного контроллера), которую можно запускать на аппаратных платах. В том же году Муньос построил традиционный радиоуправляемый вертолёт, способный летать автономно, и выиграл первую гонку Sparkfun AVC[13]. Проект быстро разросся за счёт большого сообщества DIY-дроноводов, включая Криса Андерсона, который основал сообщество и форум в начале 2007 года[14][15].
Первая версия ArduPilot поддерживала только крылатые аппараты и работала на основе термопил, определяющих положение горизонта по разнице температуры неба и земли[14]. Позже систему усовершенствовали, заменив термопилы на инерционный измерительный блок (IMU), включающий акселерометры, гироскопы и магнитометры. Затем была расширена поддержка новой техники: появились отдельные подсистемы для вертолётов, самолётов, автомобилей и подводных аппаратов.
В 2011—2012 годах функциональность и кодовая база ArduPilot существенно возросли благодаря вкладу новых участников, таких как Эндрю «Tridge» Триджелл и автор HAL Пэт Хики. Среди заслуг Триджа — автоматическая проверка, поддержка симуляции, PyMavlink и Mavproxy. Пэт Хики интегрировал библиотеку AP_HAL (аппаратная абстракция HAL), что упростило и модульно разделило код и низкоуровневую работу с оборудованием. В 2012 году Рэнди Маккей стал ведущим по поддержке раздела Copter, а Тридж — поддержкой самолётов. Оба остаются главными поддерживающими проект.
ArduPilot как свободное ПО повторяет организационную модель Linux/проекта GNU, а также PX4/Pixhawk и Paparazzi UAV — открытость и невысокая цена позволили энтузиастам создавать микро- и мини-БПЛА, а впоследствии промышленность частично переняла код ArduPilot для профессиональных автономных решений.
Первые версии ArduPilot работали на контроллере APM с AVR-ЦПУ и языком Arduino (откуда «Ardu» в названии), но впоследствии код был переписан на C++, с поддержкой утилит на Python.
В 2013—2014 годах проект расширил поддержку оборудования и ОС (кроме изначальной архитектуры Arduino Atmel): впервые появился аппаратный контроллер Pixhawk (совместный проект PX4, 3DRobotics и ArduPilot), позже добавились контроллеры Bebop2 (Parrot) и Linux-контроллеры NAVIO2 (для Raspberry Pi) и ErleBrain (на BeagleBone). Ключевым событием стал первый полёт под управлением Linux середине 2014 года[16].
К концу 2014 года начали формировать DroneCode[17] — альянс ведущих ОС-проектов в сфере БПЛА для тесной интеграции, в первую очередь между ArduPilot и PX4. Участие ArduPilot в DroneCode завершилось в сентябре 2016 года[18]. 2015 год также отметился презентацией квадрокоптера Solo от 3DRobotics (ведущий спонсор разработки ArduPilot) — стандартной платформы с ArduPilot; однако продукт не имел коммерческого успеха[19].
Осенью 2015 прошёл знаковый эксперимент с роем из 50 самолётов под управлением ArduPilot в лаборатории ARSENL Военно-морской аспирантуры США.
База ArduPilot в этот период была кардинально рефакторизирована, и перестала походить на свою «Arduino»-версию прошлого.
Код ArduPilot продолжает активно развиваться: добавляется интеграция с копроцессорами для автономной навигации, поддержка новых схем VTOL, интеграция с ROS, поддержка планёров и расширение функций подводных аппаратов. Проект развивается под эгидой ArduPilot.org в структуре некоммерческой организации Software in the Public Interest (spi-inc.org). Финансируется партнёрами, список которых постоянно растёт.
В 2012 команда Canberra UAV заняла первое место в престижном соревновании UAV Outback, применив автопилот APM 2 и ArduPilot. В 2014 Canberra UAV и ArduPilot вновь стали чемпионами, успешно доставив «потерявшемуся» туристу бутылку воды. В 2016 году ArduPilot одержал победу в самой технически сложной версии состязания, обойдя сильных международных конкурентов.
Сообщество
Управление ArduPilot осуществляется группой добровольцев со всего мира, которые используют интернет-форумы (Discourse), канал Gitter для коммуникации, планирования, разработки и поддержки. Разработчики проводят еженедельные встречи в открытом чате через Mumble. Сотни пользователей вносят свой вклад — идеи, код, документацию. Программа распространяется под лицензией GPL версии 3 и свободно доступна для скачивания.
Настройка и расширение
Гибкость ArduPilot сделала его популярным в сообществе DIY и среди профессионалов и компаний. Например, квадрокоптер Solo от 3DRobotics работает на ArduPilot, а ряд профессиональных компаний, включая Boeing, также используют платформу[20]. Гибкость позволяет поддерживать разные типы и размеры шасси, сенсоры, камеры-гимбалы и RC-трансмиттеры в зависимости от требований оператора.
ArduPilot успешно интегрирован во множество самолётов (например, Bixler 2.0). Настраиваемость и простота установки позволяют использовать ArduPilot для различных задач: картографирование, поиск и спасение, инспекция территорий. Программа Mission Planner облегчает пользователю настройку, программирование, эксплуатацию и симуляцию плат ArduPilot для нужных целей.