Дрон для любителя: устройство и принципы программирования
Для программирования дрона сегодня не надо разбираться в физике полета и прочих тонкостях, поскольку эти вопросы за вас уже решили разработчики контроллеров и SDK. Тем не менее, тема остается не такой простой. И в этом посте мы хотим рассказать, с какой стороны к ней подступиться.
Фото с омского «Хакатона по применению малых БПЛА»
Под катом — из чего состоит дрон, какие бывают комплекты и как начать с ними работу.
Есть два уровня программирования
Если рассуждать о глубине погружения в тему программирования беспилотных летательных аппаратов, можно выделить два «уровня»:
- Планирование и закладка в аппарат полетного плана для готового решения, а также последующий контроль его исполнения. Этот уровень позволяет решать множество очень интересных задач, хотя и ограничен возможностями используемой платформы;
- Создание собственной системы управления — своего рода «системное программирование» в мире БПЛА.
На Хабре любят DIY и тут довольно много рассказов о деталях второго уровня (например вот этот пост), в то время как первый до сих пор охвачен слабо. В основном обсуждают детали программирования в определенном SDK или сравнивают аппараты, что понятно лишь тем, кто в теме. Так что далее будем говорить именно про первый уровень.
Программирование под готовые платформы выводит летательные аппараты далеко за рамки класса «игрушек». Это полноценная разработка, которая просто использует библиотеки и функции автопилота для серийно выпускаемого дрона (или для open source полетного контроллера), так что создатель программы может сосредоточиться на решении своей задачи, будь то аэрофотосъемка или воздушные световые шоу.
Самое важное: программирование позволяет снять с оператора часть задач по управлению в режиме реального времени, что на самом деле упрощает применение БПЛА. Не у каждого любителя фотосъемки найдется время и желание учиться пилотировать дрон в сложных условиях.
Типы БПЛА
Исторически сложилось так, что беспилотники классифицируют по исполнению — самолетному и мультироторному. Мультироторные можно разделить по количеству винтов: монокоптеры, квадрокоптеры, гексакоптеры и т.д. Такие БПЛА получили широкое распространение, поскольку им не нужны дополнительные устройства для взлета и посадки. Недавно появился третий класс БПЛА — конвертопланы. Но такая конструкция чаще встречается в специализированных разработках.
Для чего используются
Конструкция определяет возможное применение. Сфер, где успели «засветиться» беспилотные летательные аппараты уже довольно много. Даже если говорить только о «гражданских» машинах (не ориентированных на военных или спасателей), это:
- геодезия и картография;
- сельское хозяйство (в части контроля и обработки полей);
- фермерство;
- аэрофотосъемка,
- обычная фото и видео съемка;
- предпроектные исследования и контроль объектов строительства;
- доставка товаров;
- мониторинг протяженных объектов.
Применение беспилотника во многом определяется тем, какую полезную нагрузку он способен нести: может ли поднять посылку с грузом или вынужден ограничиться экшн-камерой.
Есть комплекты для обучения
Доступность обучающих комплектов уже потянула за собой массовое появление как кружков по работе с дронами, так и всевозможных мероприятий — семинаров, мастер-классов, олимпиад.
Обучающий набор DJI EDU
Например, в конце января в Точке кипения Омского технического университета (ОГТУ) проходил хакатон, посвященный программированию дронов.
Один из организаторов хакатона — Александр Голунов — помогал нам в подготовке этого поста
Любопытно, что до мероприятия ребята, принимавшие в нем участие, не были знакомых с беспилотниками. Некоторые из них увидели дрон вживую первый раз в жизни. Но после знакомства — блочной сборки, настройки, калибровки БПЛА, а также построения виртуального полетного плана — они смогли предложить новые способы применения дронов в быту. Как бы это о том, что ничего сложного тут, в целом, нет.
Железо дрона
С точки зрения железа дрон состоит из:
- рамы, на которой крепятся агрегаты и защитный кожух. Последний, кстати, присутствует не всегда, но какая-то защита движущихся частей аппарата, а заодно и окружающих от удара этими движущимися частями, есть почти везде;
- необходимого количества роторов;
- аккумулятора;
- набора датчиков. Самый простой дрон может летать с трехосевым акселерометром, но управлять им будет сложно. Заметно упрощают этот процесс: трехосевой акселерометр, трехосевой датчик угловой скорости (ДУС), барометр и магнитометр. Также в списке датчиков могут присутствовать: компас, гироскоп, GPS или приемник любой другой системы глобального позиционирования;
- модуля связи. Это может быть радиосвязь с пультом управления (наземной станцией) или 4G-модем для получения команд и отправки телеметрии через интернет;
- полезной нагрузки, например камеры на подвесе, сонара, дальномера и т.п.;
- сердца дрона — полетного контроллера, который всем этим управляет.
Пример состава оборудования программируемого дрона с полетным контроллером pixhawk
Чем занимается полетный контроллер
Насколько легко или сложно управлять конкретным дроном, в том числе и программировать его, определяет полетный контроллер и его программное обеспечение. Именно на него ложится задача управления физикой полета. Благодаря контроллеру оператору достаточно знать только базовые понятия и определения, и нет необходимости защищать докторскую по аэродинамике, чтобы совершить первый полет.
Контроллер решает классические задачи по:
- ориентации беспилотника вокруг его центра масс;
- ориентации центра масс беспилотника в пространстве;
- движению БПЛА по маршруту;
- избежанию коллизий с другими беспилотниками, если это групповой полет, или с иными объектами. Например, есть много разработок безопасных дронов, которые не сталкиваются с людьми, — все зависит от конкретной задачи;
- управлению полезной нагрузкой — камерой, захватами для груза и т.п.;
- передаче информации, в частности, приему команд с пульта, если управление осуществляется вручную;
- корректировке полета, в т.ч. в больших формациях.
Полетный контроллер Arducopter
Полетный контроллер DJI A3
Полетные контроллеры присутствуют на рынке как самостоятельно, так и в составе готовых дронов.
Среди готовых решений широко известны китайские DJI. Вслед за полетным контроллером, шесть лет назад, китайцы предложили SDK, с которым можно создавать вполне профессиональные решения. Вот лишь небольшой список уже решенных задач:
- контроль неправильно припаркованных автомобилей и дорожного движения в целом;
- обследование и обработка территорий в сельском хозяйстве (в том числе, поля и виноградники);
- 3D-реконструкция модели поверхности земли — маркшейдерские работы, трехмерная реконструкция природных туристических объектов и т.п.;
- контроль флотилии дронов для развлекательных целей или быстрого прочесывания местности.
В 2018 году полиция Нью-Йорка обзавелась 14 дронами (фото: CNN)
SDK и комплекты
Понятно, DJI — не единственный пример. SDK есть у Parrot, 3DR, Skydio, Yuneec (правда 3DR, Yuneec и Parrot работают с open-source-платформами, о них мы поговорим далее).
По сути сейчас мы наблюдаем процесс формирования целого рынка программного обеспечения для таких программируемых дронов.
Некоторое ПО, в т.ч. на DJI (несмотря на то, что он не open-source) можно найти на GitHub.
Кстати, образовательные решения тут тоже есть. Например, тот же DJI выпускает специальный комплект из нескольких дронов, рассчитанный на обучение целой группы студентов программированию на Scratch, Python и Swift.
Помимо проприетарных, есть множество DIY-решений, основанных на популярных универсальных полетных контроллерах. Откровенно говоря, DIY-сообщество в свое время и стало родоначальником всего рынка управляемых дронов. Компании с рынка радиоуправляемых моделей взялись за разработку БПЛА лишь тогда, когда идея стала популярна в народе и можно было построить какие-то бизнес-прогнозы.
DIY-решения обычно опираются на какую-то из доступных систем управления (автопилотов), например Ardupilot или Pixhawk. А контроллер подбирается из списка поддерживаемых для выбранного автопилота. Впоследствии его можно даже доукомплектовать оборудованием (если прошивка позволяет это сделать). Под такие решения есть свои универсальные платформы разработки, например MAVSDK (его поддерживают 3DR, Yuneec и Parrot).
По аналогии с 3D-принтерами некоторые производители выпускают кит-комплекты для DIY дронов. К примеру, в упомянутом выше хакатоне ребята работали с дронами «Иволга» отечественного производства. Есть и другие примеры, например, Ardupilot, как производитель, предлагает на рынке собственные наборы, цена на которые варьируется в зависимости от комплектации.
Пример комплекта с Aliexpress
На базе open source контроллеров встречаются и промышленные решения.
Начиная с самосборных решений под управлением готового автопилота, некоторые энтузиасты переходят к разработкам собственного автопилота. Так мир open source в этой части постоянно расширяется. Однако это задача не для новичка. Поскольку суть заключается не столько в самом программировании, сколько в решении инженерных задач.
Языки и среды разработки
В двух словах программирование дрона сводится к контролю координат промежуточных точек и высоты над землей с одновременным управлением полезной нагрузкой в зависимости от поставленной задачи.
Используемый для программирования язык, как и среда разработки, определяется системой управления, а в случае с проприетарными решениями — производителем контроллера.
Но пока на рынке царит настоящий зоопарк подходов и языков.
Часть производителей вообще предлагает собственные среды — как упомянутый выше DJI.
Сообщества, разрабатывающие опенсорсные полетные контроллеры, от них не отстают. Исторически сложилось, что большинство DIY решений основано на среде Arduino. Тот же Ardupilot в свое время разрабатывался для управления дроном с контроллером ATMega 2560, а в качестве среды разработки использовал оболочку Arduino. Но сегодня этого уже недостаточно. Задачи, возложенные на беспилотники, усложняются, а вслед за этим растут требования к железу и ПО. Так что аппаратная составляющая меняется. Даже опенсорсные решения уже базируются не на контроллерах, а на полноценных процессорах с ARM-архитектурой (по аналогии со смартфонами). Среды разработки, соответственно, также дорабатываются и усложняются. Они становятся кроссплатформенными, но пока все еще ориентированы на конкретный автопилот. И хотя на данный момент существуют общепринятые частные стандарты (например, передачи данных или взаимодействия беспилотников с наземными станциями), до выявления лидера среди языков разработки и SDK пока далеко.
С точки зрения гарантированного выбора направления развития этот этап становления рынка абсолютно непредсказуем. Однако именно сейчас время самых интересных проектов, ведь столько задач еще не решено!
Примеры программирования дронов
Учитывая разнообразие решений на рынке, мы не имеем возможности рассказать о всех вариациях в программировании дронов, но покажем, как это происходит на паре примеров.
Пример 1: DJI
Для программирования проприетарного дрона DJI необходимо зарегистрировать девелоперский аккаунт.
Далее необходимо скачать SDK с сайта производителя. У DJI предусмотрены разные SDK в зависимости от того, что планируется программировать — наземную станцию, управление полезной нагрузкой или самим полетом. Важно выбрать правильный и убедиться, что имеющееся оборудование (будь то дополнительные датчики дрона или мобильное устройство) поддерживается. Дальнейший процесс рассмотрим на примере мобильного SDK (по прочим SDK на сайте производителя есть подробная документация).
SDK включает:
- фреймворк и необходимые библиотеки, которые импортируются в мобильное приложение дрона под Android или iOS;
- инструмент симуляции и визуализации полета;
- вспомогательные инструменты для iOS;
- примеры кода и документацию.
В своем приложении разработчик может контролировать полет, использовать данные с камеры или датчиков на борту дрона, следить за состоянием систем на борту. При этом SDK берет на себя заботу о низкоуровневом функционале — стабилизации полета, управлении питанием.
Логическая схема подключения к дрону представлена на картинке:
Прежде чем приступать к разработке, необходимо сгенерировать для приложения уникальный App Key, который активирует SDK.
Сам процесс разработки зависит от рассматриваемой платформы (iOS или Android). Подробно и для Android, и для iOS он описан в документации, а на GitHUB есть примеры простейших приложений для каждой из этих платформ. Есть замечательное видео, описывающее весь процесс создания простейшего приложения.
Для запуска скомпилированное приложение необходимо перенести на мобильное устройство. Непосредственно перед запуском устройство также надо подключить к дрону по Wi-Fi или через USB-кабель (тип подключения зависит от конкретного устройства).
Пример 2: Pixracer R14
Pixracer — одно из поколений полетного контроллера Pixhawk, который широко используется в DIY-проектах.
Для программирования этого полетного контроллера используется библиотека ROS (Robot Operating System), которая позволяет управлять дронами с помощью MAVLink (пакет называется MAVROS). Писать можно на Python, используя клиент для этой библиотеки под названием rospy.
Для запуска приложения необходимо подключиться по SSH к полетному контроллеру.
С DIY-проектами процедуру программирования в общем виде описать гораздо сложнее, нежели с проприетарными решениями, поскольку слишком многое зависит от деталей прошивки. Для kit-комплектов, которые зачастую построены именно на открытых разработках, обычно есть подробная инструкция по программированию.