Содержание статьи
Просто летать скучно
После приобретения квадрокоптера (дрона) быстро приходит неожиданное понимание: просто летать на нем не так уж и интересно. В смысле вначале, конечно, есть интерес, но лично у меня скорее спортивный — научиться с ним управляться, чувствовать, как он летает, понять его ограничения и прочее. Но к в общем‑то бессмысленным полетам с первых минут хочется добавить какого‑то содержания.
Первое, что приходит на ум, — нацепить на дрон камеру вроде GoPro и поснимать нормальную картинку (а не то унылое сами‑знаете‑что, которое выдает встроенная камера). Надо сказать, что AR.Drone не очень‑то для этого предназначен (поэтому если хочешь снимать, то лучше сразу смотреть на какие‑то другие модели). Например, я тут же уперся в те ограничения по дальности, которые создает управление по Wi-Fi с телефона. Чтобы это как‑то обойти, я стал брать с собой инвертер в машину и подключать к нему точку доступа с неплохими антеннами, заметно увеличивающими расстояние, на котором можно управлять дроном, хотя многие вообще впаивают отдельный радиомодуль, чтобы AR.Drone’ом можно было управлять с обычного 8-канального пульта.
Делать съемку «с воздуха» — это прямо круто, совершенно особые впечатления, но надоедает и это. Сегодня же я тебе хочу рассказать о своей новой забаве, которую предлагает AR.Drone, — его программировании.
AR.Drone изнутри
Что значит «программировать дрон»? Тут надо понимать, что AR.Drone — это, по сути, маленький компьютер, в котором зашита программа для управления четырьмя двигателями коптера. Если описать конфиг кратко, это будет:
- модуль Wi-Fi, через который осуществляется управление;
- 1 ГГц CPU, 125 Mб Memory;
- две камеры (одна впереди, одна внизу);
- Linux (BusyBox);
- автоматическое «зависание» на заданной позиции (используется альтиметр и оптическое слежение за положением).
Соответственно, у него есть прошивка, которая принимает команды управления по Wi-Fi, — и за счет этого осуществляется управление коптером. Понятно, что если команды можно передать с помощью приложения для смартфона, то это можно сделать и другими способами.
Уверен, что есть и другие подходящие для программирования коптеры, но комьюнити полюбили AR.Drone за неплохую начинку, адекватную цену и простоту покупки запасных частей по всему миру.
Как управлять?
Дроном можно управлять AT-командами, но это низкий уровень. Как это обычно бывает, для протокола быстро появляются обертки для разных языков программирования — они в изобилии представлены на GitHub. На наибольшее развитие получил фреймворк NodeCopter, написанный на Node.js.
Собственно, для программирования дрона надо установить в системе сам Node.js и модуль NodeCopter:
$ npm install ar-drone
Далее подключаемся, как обычно, к дрону по Wi-Fi, используя стандартное приложение FreeFlight, и можно приступать к управлению коптером с ноутбука.
Вот простой пример прямо с сайта NodeCopter:
var arDrone = require('ar-drone');var client = arDrone.createClient();client.takeoff();client
.after(5000, function() { this.clockwise(0.5); }) .after(3000, function() { this.animate('flipLeft', 15); }) .after(1000, function() { this.stop(); this.land(); });
Сохрани его в файл и выполни — ты увидишь, как дрон взлетает, вращается по часовой стрелке, делает, если батарея достаточно заряжена, так называемые flip (переворачивание) и садится. Сразу даю маленький хинт: если коптер делает что‑то не так, то есть один надежный способ его остановить. Резко поймать его и перевернуть — в этом случае срабатывает триггер внештатной ситуации, и он выключается.
Первое, что я хотел автоматизировать, — это взлет коптера и создание панорамы. Идея простая: взлететь, набрать нужную высоту и совершить оборот 360 градусов, делая снимки, которые позже можно склеить. Для этого потребовалось лишь немного изменить тот пример, который я привел выше, добавив в вызовы для создания фотографии (изображения я получал с помощью модуля ar-drone-png-stream). Как позже выяснилось, эта идея пришла не только мне, поэтому есть даже готовый модуль, который называется ardrone-panorama. И да, работает он лучше моего :).
Что можно сделать?
Далее я расскажу, что еще можно сделать с помощью AR.Drone, используя наработки комьюнити.
Вообще, чтобы программировать логику, тебе нужно обрабатывать изображение с камеры дрона. Для этого можно использовать либо ar-drone-png-stream, который я уже упомянул, либо node-dronestream (подходит для видео). Есть даже проект copterface, который распознает лица, используя библиотеку node-opencv. Адаптируя эту идею, можно сделать беспилотник, который будет летать над толпой и искать нужных людей.
Особое направление, которое популярно в комьюнити, — разработка различных инструментов для управления дроном. Можно управлять из браузера (drone-browser), жестами (ipad-ardrone-controller), джойстиком от PlayStation 3 (node-drone-joystick) или даже Kinect’ом (drone-kinect). Когда ко мне приедет мой Oculus Rift или Google Glass, я обязательно сделаю управление с помощью этих очков виртуальной реальности. Хотя наверняка и такие проекты уже есть.
Меня же всегда больше тяготила возможность сделать автономную систему, которая бы сама выполняла какую‑то задачу. К сожалению, я еще не купил себе специальный GPS-набор, с помощью которого AR.Drone может летать по заданным точкам и возвращаться к месту старта, если потеряет связь с пультом. Но я уже успел поиграться со специальным модулем ardrone-autonomy, специально предназначенным для программирования автономных полетов.
Короче говоря, в AR.Drone’е я нашел классную платформу для экспериментов. И если у тебя есть что тут рассказать, напиши мне :).