Сложно ли управлять квадрокоптером? Если вы просто пользуетесь пультом, то задача покажется вам простой, а если пытаетесь проникнуть в тайны китайского API — то, быть может, даже нерешаемой. Сегодня мы расскажем об оборотной стороне хакатона Drone Ecozone, в ходе которого победители смогли провести съемку пяти красочных памятников природы с высоты птичьего полета. Под катом — подробный рассказ об изысканиях команды проекта, о тех граблях, на которые мы наступили, и некоторые полезные выводы для отважившихся использовать китайский серийный дрон не самым тривиальным способом.



Про сам проект Drone Ecozone мы уже рассказали здесь. Сегодня речь пойдет о его подготовке и технических аспектах.

На чужих ошибках учиться не получилось


Сначала у нас возникла идея использовать кастомные дроны, заточенные под конкретную задачу. Но это оказалось слишком дорого. Поэтому было принято решение использовать серийные дроны DJI Mavic. К тому же аренда таких коптеров — достаточно доступная услуга в Москве.



Но тут возникла другая проблема — гордые китайские коптеры не дают залезть себе в программный код. Поэтому мы начали искать экспертизу… и слету не нашли ее. Да, на GitHub уже есть решения, которые позволяют запускать трансляции… но чтобы управлять дроном.



Тогда мы стали искать эксперта, готового взяться за наш проект или хотя бы выступить консультантом. Мы опросили множество специалистов, и все отказывались. Это были как ребята из России, так и из других стран, причем каждый раз нам говорили, что поднять на SDK свою платформу и запустить приложение, за пару месяцев — это фантастика. Те, кто готов был взяться за проект, называли сроки от полугода даже в базовом функционале. Стоимость проекта тоже пугала. Поэтому мы вздохнули и приступили к изучению вопроса.

Чтобы выполнить проект в срок прорабатывались сразу несколько идей:
1. Использовать SDK китайского дрона. Забегая вперед, скажем, что именно так и получилось, и это было наиболее технически правильное решение. Но до последнего у нас не было уверенности в успехе. Почему — читайте дальше.
2. Подвесить под дроном камеру с обзором 360 градусов. В таком случае картинку можно было бы «вертеть» программно. Однако, очевидно, при этом потребовалось бы использовать кастомные квадрокоптеры, так как на рынке нет распространенных готовых решений с такими камерами, тем более дроны которые можно было бы взять в аренду.
3. Использовать отдельный подвес под телефон, который будет «вертеть» камеру. Но тогда наш выбор локаций сужался бы до зон с полным покрытием 4G на всем протяжении маршрута, иначе управление могло потеряться.



Работа через SDK


На первый взгляд через SDK все должно было получиться. Архитектура решения выглядела достаточно логично: к пульту дрона подключается смартфон, на котором должно быть установлено свое приложение, предоставляющее пользователю нужные функции.

Но реальность оказалась более суровой. DJI — китайские дроны, и SDK не всегда соответствовала ожиданиям. Часть документации оказалась не переведена на английский, а примеры на GitHub не все были рабочими. После первых минут радости, что можно использовать готовый интерфейс, мы убедились, что вообще не можем вывести видеопоток на собственный телефон, подключенный к пульту. Функция просто не работала «из коробки».

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

Запасной вариант


В этот момент родился еще и четвертый, запасной вариант работы системы. Возникла идея пробросить в браузер пользователя экран подключенного к пульту телефона. В этом случае можно обойтись стандартным приложением DJI и подключить удаленных операторов через статическое API. В результате люди видели бы ту же самую картинку, что и пилот.



Тут, конечно, были свои нюансы, ведь полный проброс интерфейса дает доступ не только к управлению камерой, но и к другим клавишам. То есть удаленный клиент может отключить GPS, сбросить маршрут, вернуть дрона домой, в конечном счете протаранить дерево. Это можно было решить путем добавления дополнительного прозрачного слоя, который не закрывает картинку (ведь картинка — самое главное!), но блокирует нажатия на определенные клавиши. Решение, безусловно, сложно назвать изящным. Но в качестве подстраховки мы его постоянно держали в уме.



Тернистый путь через SDK


Тем не менее, решения были найдены, и мы научились делать следующее:
● Запускать видеотрансляцию
● Настраивать управление камерой
● Делать фото и сохранять их в памяти дрона
● Выгружать нужную информацию

Каждый из пунктов давался тяжело из-за отсутствия нормальной документации. В результате над разработкой приложения работали десяток человек из разных регионов.



Итак, мы взяли дроны в аренду в Москве и просто держали их включенными «в воздухе» целую неделю. Меняли батарейки и давали разработчикам удаленный доступ для финального тестирования и доработки приложения.
— Основная часть подготовки локации состояла в поиске оптимального места с возможностью разложить трехметровый аэродром с логотипом, поставить рядом машину с зарядкой аккумуляторов, словить 4G-интернет и видеть дрон на всем пути следования по маршруту, говорит Александр Парамонов, VLG DEV.


— Это весьма нетривиальная задача в условиях, например, закрытой территории как было в Рускеале или на Куршской косе. Отдельный wow-эффект вызывает осознание того, что нам удалось за два месяца разработать собственное приложение для управления китайскими дронам, — отмечает Алексей Синицын, VLG DEV.

Пришлось отказаться от стандартного метода трансляции потока через DJI SDK, потому что этот метод показывал задержку в 4-5 секунд. Вместо этого мы настроили WebRTC, и видео пошло через связку пульт-смартфон-самописное приложение. Благодаря этому задержки были уменьшены до долей секунды.



В итоге функции, связанные со съемкой, были написаны вручную. А все критически важные элементы работы дрона, такие как следование по координатам GPS, остановка перед препятствиями, возвращение домой и прочее, остались нетронутыми.

Дополнительные доработки


Полеты на дронах в рамках проекта Drone Ecozone длились 5 дней. Поэтому нам заранее было понятно, что пилотам нужно будет летать по одним и тем же маршрутам несколько часов. Нужна была подстраховка, ведь при такой нагрузке даже опытные пилоты иногда цепляются за провода или попадают в деревья.



Дело в том, что движение по заданным точкам поддерживается не у всех моделей DJI в базовой комплектации в официальном приложении. Поэтому мы с помощью SDK доработали свой функционал, который позволяет программировать не только последовательность GPS-координат, но также возможности выполнения сценариев на точках — повернуться на определенные углы, дать пользователю пофотографировать лучшие ракурсы, сделать полный оборот, выдержать паузу.



Зеленая точка на асфальте — точка с которой мы взлетаем, дальше красная точка — первая и последняя и две точки промежуточные.



Обычно все проходило в штатном режиме.



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



Рецепт «нашего чуда»


Пользуясь вот этой документацией, регистрируемся на сайте, получаем ключ для sdk (процесс подробно описан здесь), создаем аналогичное нашему приложение по описанным примерам.
Вот некоторые примеры того, что мы использовали: раз (управление траекторией), два (соединение), три (ручное управление), четыре (камера), пять (пример API).

По ссылке также файл json, который мы использовали в качестве конфигурации для каждого полета. Там задавались такие параметры как высота возврата домой, разрешение передаваемой картинки, маршрут по gps координатам с высотами в каждой точке, и сценарии вращений и пауз в каждой точке маршрута.




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



Учимся на своих ошибках


В процессе подготовки мы узнали о целом ряде нюансов, связанных с подобной адаптацией дронов:
1. На момент нашей работы SDK имел ограничение по спектру моделей коптеров. Некоторые из наших личных дронов еще не поддерживались, и, наверное, так будет всегда — для самых современных дронов метод может не работать.
2. Необходима возможность отменить маршрут и вернуть дрона на исходную точку, если обнаружена проблема (ошибка файла конфигурации, сложные природные условия). Поэтому мы добавили кнопку экстренной отмены миссии (с возможностью задать высоту возврата — условно 50 м).
3. Приемник GPS по той или иной причине может временно потерять точность. Поэтому в ПО должна быть возможность взлететь и посадить дрон вручную, просто по картинке с камеры. Например, нам всегда нужно было садиться на доску с логотипом, чтобы процесс выглядел красиво, а сбой GPS мог все испортить.
4. Критически важно отображать заряд батареи и следить за ним, иначе коптер может начать экстренное снижение, сесть где попало и испортить все веселье.
5. Для зарядки пульта нужно отдельное решение! Когда к нему подключен телефон, порт оказывается занят, да еще и часть заряда перетекает к аккумулятору телефона. Пришлось искать способ подключить к пульту внешний зарядник.



Мы предоставили на каждый маршрут по 2 дрона, и в результате на проекте были задействованы 3 штуки DJI Mavic Pro, 2 штуки DJI Mavic Pro 2, 2 штуки DJI Mavic Zoom, а также один DJI Mavic Air. Но кроме этого мы поработали над автопилотом.

— Drone Ecozone — первый в мире проект с подобной механикой. Поэтому каждый день работы над ним был шагом в неизвестность. Захватывающую и вдохновляющую, — отмечают представители креативного агентства makelove.

Результаты


Сам проект прошел успешно, а мы получили бесценный опыт кастомизации системы управления дронами DJI. А благодаря тому, что нам удалось реализовать подключение через SDK, на сегодняшний день можно обсуждать расширение возможностей пользователя — от элементарного управления камерой до манипуляциями с коптером в заданных рамках.

Например, перемещения можно ограничить GPS координатами, предоставить пилоту кнопку экстренного управления. Таким образом, можно усилить wow-эффект, о котором так часто говорили участники проекта.

P.S. Хотите драйва, интересных проектов и задач, загляните к нам на огонек!

Комментарии (0)