ArduPilot

ArduPilot — пакет программ автопилота с открытым исходным кодом для беспилотных транспортных средств, способных к автономному управлению. Поддерживаются следующие типы:

Изначально 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

Любительское использование

  • Дрон-гонки
  • Радиоуправляемое моделирование для хобби

Профессиональное использование

История

2007—2012

Проект 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 для профессиональных автономных решений.

2013—2016

Первые версии 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»-версию прошлого.

2018 года

Код ArduPilot продолжает активно развиваться: добавляется интеграция с копроцессорами для автономной навигации, поддержка новых схем VTOL, интеграция с ROS, поддержка планёров и расширение функций подводных аппаратов. Проект развивается под эгидой ArduPilot.org в структуре некоммерческой организации Software in the Public Interest (spi-inc.org). Финансируется партнёрами, список которых постоянно растёт.

Соревнования UAV Outback

В 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 для нужных целей.

Примечания

Ссылки