Дрон для любителя: устройство и принципы программирования

    Для программирования дрона сегодня не надо разбираться в физике полета и прочих тонкостях, поскольку эти вопросы за вас уже решили разработчики контроллеров и SDK. Тем не менее, тема остается не такой простой. И в этом посте мы хотим рассказать, с какой стороны к ней подступиться.


    Фото с омского «Хакатона по применению малых БПЛА»

    Под катом — из чего состоит дрон, какие бывают комплекты и как начать с ними работу.

    Есть два уровня программирования


    Если рассуждать о глубине погружения в тему программирования беспилотных летательных аппаратов, можно выделить два «уровня»:

    1. Планирование и закладка в аппарат полетного плана для готового решения, а также последующий контроль его исполнения. Этот уровень позволяет решать множество очень интересных задач, хотя и ограничен возможностями используемой платформы;
    2. Создание собственной системы управления — своего рода «системное программирование» в мире БПЛА.

    На Хабре любят 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-комплектов, которые зачастую построены именно на открытых разработках, обычно есть подробная инструкция по программированию.
    Leader-ID
    Компания

    Комментарии 11

      +2

      Тема радиосвязи с дроном не раскрыта. Между тем, для FPV дальность действия и её надёжность — это один из самых критичных параметров.

        +3
        Для связи с ЛА я использую 2 варианта (сейчас только второй из-за надежности):
        1. Стоковый передатчик и приемник FrSky (на частоте 2.4 ГГц) — надежностью связи не отличаются, постоянно теряются пакеты и ловлю RX Lost, приемлемо работает в глуши, летать фристайл в таком режиме, не приятно, но не критично — дрон на время замирает и летит по инерции в том положении в котором оторвалась связь — после восстановления можно «вырулить», но для гонок такое недопустимо.
        2. Связку TBS Crossfire (работает на частоте 868/915 МГц) т.к. интересуют дальние полеты, забыл что такое RX Lost и краши дрона, дальность для моего модуля производитель заявляет 40 км, далее 5 км я пока не отлетал от себя.

        У FrSky есть дальнобойный модуль R9m (на частоте 868/915 МГц) их две ревизии, более старая в ранних версиях прошивки была крайне ненадежна, сейчас поправили и стало лучше.

        Еще коллеги собирают QCZEK LRS (LongRangeSystem) на модулях Lora (на частотах 433 и 868/915 МГц), про них ничего сказать не могу, сам не испытывал.

        Протоколы TX передатчик-приемник конечно проприетарные, со стороны полетного контроллера (опыт работы с прошивками Betaflight и iNAV) поддерживается множество RX протоколов, основные SBUS и CRSF.
          +2
          Вы правы, но тема эта настолько обширная, что заслуживает как минимум отдельной статьи. Поэтому ее и не трогали.
          0
          Del
            +1
            Для программирования дрона сегодня не надо разбираться в физике полета и прочих тонкостях

            нет необходимости защищать докторскую по аэродинамике, чтобы совершить первый полет

            Даже для готового контроллера нужно понимать как работают законы управления и происходит полёт по маршруту т.к. зачастую их приходится настраивать и довольно подробно разбираться в их устройстве.
              +2
              Подразумевалось, что для готовых комплектов нет нужды, например, в низкоуровневом управлении роторами, чтобы выполнять полет / разворот или стабилизировать дрон с учетом влияния внешних факторов. Базовое понимание управления иметь нужно, но быть высококлассным экспертом в этих областях не обязательно. Само собой, при сложных внешних условиях, это правило перестает работать.
              0
              Зацепила фотография Александра Голунова с хакатона. Из того, что сразу режет глаз: приветсвуем без т, и не полноэкранный режим отображения картинки на презентации, со всеми кнопками. Полагаю можно все эти шероховатости решить кадрированием этого кадра :-)
              Затем фотография, где внутри периметра из защитной сетки запускается коптер, а снаружи в открытом от сетки проеме стоят два человека. На переднем плане один в очках, пилот в защитных очках, а между ними чуть сзади ничем не прикрытый улыбающийся молодой человек. Просто театр безопасности, или так были написаны правила хакатона?

              Или в перечислении про
              дрон состоит из:
              модуля связи. Это может быть радиосвязь с пультом управления (наземной станцией) или 4G-модем для получения команд и отправки телеметрии через интернет;

              модулей может быть более одного. 2-3 вполне обычно. :-)
              Достаточно нередка схема, когда есть отдельно приемник для аппы, и отдельно телеметрический приемопередатчик, по которому MAVlink, а еще отдельный передатчик видео. И их не сводят (или делают это редко) в один модуль, хотя попытки такие есть.

              Тема то хорошая, попытка тоже, но ощущение фрагментарности и несвязности разных кусков текста меня отчего-то не отпускает. Елизавета, не обижайтесь, в следующий раз получится лучше :-)
                +2
                По фото: по всей видимости, правила хакатона не были расчитаны на то, что за спиной пилота будет стоять толпа наблюдателей.

                Вы правы, модулей может быть несколько.

                Спасибо за ваши комментарии, постараюсь учитывать их в будущем и совершенствоваться на этом поприще. :-)
                +1
                тот же DJI выпускает специальный комплект из нескольких дронов, рассчитанный на обучение целой группы студентов программированию на Scratch, Python и Swift.

                Можно какую-то ссылку? Ничего кроме Robomaster S1 найти не могу.

                0
                Посоветуйте платформу для решения такой задачи: дрон должен летать внутри помещения, находить точки с qr-code, приземляться, на qr-code, сам заряжаться на зарядной станции по qr-codе. в помещении есть вайфай, если процессора на борту дрона не хватит для обработки изборажения, пусть посылает изображения на сервер и сервер их обрабатывает, спасибо

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое