Хочу рассказать Вам, как можно управлять айГаджетами с PC, да еще и программировать их. Все, что описано в статье применимо как к Brookstone Rover Spy Tank, так и к AR Drone Parrot. На «Хабре» уже ни раз были статьи о серии высокотехнологичных гаджетов AR Drone Parrot. Как-то мало интереса проявляется Brokstone Rover Spy Tank, хотя, как ни странно, эта игрушка хоть и не такая эффектная, в силу того, что не летает, зато более практичная. Во первых заряда 6 элементов пиатния серии АА хватает на несколько часов непрерывной работы. Во вторых, его можно использовать как гиковскую веб-камеру, с помощью которой можно следить за тем, что происходит дома с любого другого компьютера, ну и, как бонус, гонять своих домашних животных. Настроив доступ по RDP к домашнему компьютеру, можно управлять этим изделием, как мобильной веб-камерой, которая не просто показывает картинку, но еще и передвигается по помещению.
Начнем с того, что такое Brookstone Rover Spy Tank
Brookstone Rover Wireless Spy Tank — это беспроводной управляемый танк. В качестве пульта управления выступает iPhone или iPad Связь происходит напрямую, через созданную Wi-Fi точку. Устройство оснащено вмонтированной видео-камерой, с помощью которой вы сможете наблюдать за окружающими. Так же на устройстве находится микрофон и инфракрасный излучатель, для съемок в полной темноте. Питается чудо-танк от шести батареек АА. Для владельцев устрйоств на Android есть реализация RoverOpen и доступна для скачивания в GooglePlay маркете по адресу play.google.com/store/apps/details?id=org.almende.roveropen
Недавно на рынке появились танки второй версии. В них добавили пару улучшений. Добавлен сервопривод, с помощью которого угол поворота видеокамеры управляется из приложения и динамик, через который Вы можете воспроизводить звуки. Помимо всего перечисленного, в вездеход добавили встроенные фонари, яркостью которых так же можно управлять дистанционно через приложение. Для данной версии танка существуют официальные приложения в App Store и в Google Play.
Управляем с PC
Если у Вас нет айфона или андроид устройства, то Вы, скорее всего, вряд ли приобретет такой гаджет. Но если очень хочется? Что тогда?
Есть такой прекрасный программный комплекс — EZ-Builder, инструмент канадского товарища. В нем уже реализован протокол обмена с AR Drone Parrot и Brookstone Rover Spy Tank. Программа написана на C#. Управление проще паренной репы. Качаем софт отсюда
Установка проста и не требует описания.
Easy программирование на EZ-Script
В EZ-Builder есть возможность писать простые скрипты на встреонном скриптовом языке. Он чем-то напоминает бейсик. EZ-Builder позволяет запрограммировать поведение игрушки, не будучи профессиональным роботостроителем и инженером-программистом. На языке EZ-Script можно писать простейшие программы, с помощью которых можно управлять нашим ровером. Чтобы освоить их и понять принцип, добавляем на рабочий стол EZ-Builder консоль управления: “Script Console”. Для этого достаточно нажать F3 либо выбрать ее в пункте Add Control -> Scripting -> Script Console.
Разберем несколько команд:
- Sleep (milliseconds) — Задать паузу в миллисекундах. Пример паузы на 1 секунду: Sleep(1000)
- SleepRandom (lowMilliSec, highMilliSec) — Пауза на случайную величину. Пример: SleepRandom(1000, 5000)
- Forward( [speed], [milliSeconds] ) — команда двигаться вперед. Принимает значение скорости от 0 до 255 и время работы двигателя в миллисекундах. По умолчанию — бесконечно. Примеры: Forward(), Forward(50), Forward(255, 5000)
- Reverse( [speed], [milliSeconds] ) — обратное действие комнды Forward, т.е. движение назад.
- Stop() — остановиться.
- Left( [speed], [milliSeconds] ) — поворот влево. Принимает значение скорости и время работы в милисекундах..
- Right( [speed], [milliSeconds] ) — поворот вправо
- # — комментарии
- :Label — метка для команды GOTO(LABEL). Пример: :MyLabel
- Goto( label ) — переход на метку
- Return() — выход из GOTO на продолжение программы
- Halt() — прекратитьв ыполнение скрипта
- HTTPGet( url ) — послать GET запрос по заданному адресу
- Print( txt ) — вывести текст в отладочную консоль
- Exec( EXE/Bat File, [parameters] ) — вызвать внешнюю программу Windows
- Browser( url ) — запустить браузер по заданному адресу
- Tweet( message ) — послать сообщение в сервис Twitter.com. Для этого нужно сконфигурировать Твит-модуль: File->Twitter Settings. Пример: Tweet(«I Love EZ-Robot!»). Пример отправки скриншота с камеры устроства в твиттер: ControlCommand( «Camera», CameraTweet, «Our New Image» )
- ControlCommand(windowName, ControlCommandParameter, [values]) — выполнить команду, обратившись к компоненте по ее имени, где windowName — имя окна на рабочем столе EZ-Builder, ControlCommandParameter — команда, [values] — дополнительные необязательные параметры, зависящие от контекста вызова.
Получить справку по всем командам всегда можно на специальных вкладках либо вызвав соответствующий хелп через:
Help -> Print Script Manual
Учим следить за объектами
В разделе Tracking Types ставим галочку у пунтка Color. Кладем перед камерой нашего устройства яркий предмет (лучше всего красного цвета). Переключаемся во вкладку Color, выбираем минимальный размер детектируемого предмета (Min Object Size) и выставляем яркость объекта (Object Brightness). Как только предмет будет опознан, наш танк начнет поворачиваться в его сторону, если мы попытаемся его передвинуть. Я бы посоветовал в настройках в разделе Tracking Quadrant Settings сдвинуть вертикальные линии немного ближе к краю, чтобы робот более адекватно реагировал на передвижения объекта. Далее, играясь разными параметрами Вы сможете самостоятельно добиться нужных настроек и оптимальных значений.
Простая программа
Теперь, агрегируя полученную информацию, связываем все воедино. Добавляем на рабочий стол EZ-Builder компоненту Script Manager: Ad Control -> Scripting -> EZ-Script Manager. В открывшемся окне нажимаем кнопку Add Script. В поле Name пишем: PursuitTarget. Это будет название нашей программы, отвечающей за движение. Она будет очень проста и состоять из одной строчки. Вообще надо сказать что в EZ-Builder все компоненты между собой связываются по именам окон и названиям скриптов. Пишем программу следующего содержания:
forward(255)
Это нам нужно только для того, чтобы выставить скорость движения вперед на максимум, так как в программе поиска цели мы ее снизим. Снова жмем Add Script, в поле Name пишем: FindTarget и, соответственно сам текст программы:
$findTargetSpeed = 100
$iteration = 0
:Loop1
reverse($findTargetSpeed,1000)
# Процесс осмотра
left($findTargetSpeed, 2000)
right($findTargetSpeed, 4000)
left($findTargetSpeed, 2000)
$iteration = $iteration + 1
if ($iteration > 4)
return()
goto(Loop1)
stop()
Теперь жмем кнопку Config на панели Camera, переходим на вкладку Scripts и в разделе Tracking Scripts в поле Tracking Start пишем вызов нашего срипта PursuitTarget:
ControlCommand( "Script Manager", ScriptStart, "PursuitTarget" )
а в поле Tracking End вписываем:
ControlCommand( "Script Manager", ScriptStart, "FindTarget"
)
Переходим на вкладку Tracking Settings в раздел Movement Tracking и ставим галочку у соответствующей надписи. Так же ставим галочку у надписи Allow Left/Right Movement. Сохраняем. Жмем Refresh Device List, выбираем Video Device: Brookstone_Rover, ставим галочку на Debug и на Color. Переходим на вкладку Color и выставляем размер и яркость преследуемого объекта. Теперь достаточно кинуть красный мячик перед “носом” нашего терминатора, как он тут же распознает его и активируется. После чего он начнет его преследование. Как только робот будет наталкиваться на него, то мячик, скорее всего, будет откатываться в сторону. Робот будет поворачиваться в его строну, а если он его вовсе потеряет из виду, то он начнет отъезжать назад, поворачиваясь из стороны в сторону и пытаясь найти преследуемую цель.
Программирование AR Drone Parrot
Оно ничем не отличается. Добавляются только команды запуска двигателей и посадки.
Что дальше?
В следующей статье есть желание описать пример работы на C#, при этом прикручиваем лазерный фонарик и в купе с вебкамерой превращаем его в лазерный дальномер.
P.S.: Спасибо icases.ru за любезно-предоставленные гаджеты для тестирования
Автор: 0xy