Easy-программирование танка-шпиона

  • Tutorial

Хочу рассказать Вам, как можно управлять айГаджетами с 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#. Управление проще паренной репы. Качаем софт отсюда

www.ez-robot.com/EZ-Builder

Установка проста и не требует описания.


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 за любезно-предоставленные гаджеты для тестирования
Поделиться публикацией
Комментарии 16
    +3
    А можно как-то заставить его работать с домашним вай-фаем, а не создавать собственную точку?
      +2
      Трудно себе представляю без хирургического вмешательства, ибо само устройство — нечто, подобно роутеру на колесах. Есть веб-сервер, отзывается по адресу 192.168.1.100, пароль и логин — AC13
        +1
        Посмотрите, как сделали с AR.Drone: sites.google.com/site/androflight/arautoconnect
        Возможно, на танке можно организовать нечно подобное.
        +2
        Вот у меня всегда складывается такое впечатление, что подобные игрушки мимо целевой аудитории попадают.
        Потому что тем, кому реально интересно программировать, будет не очень приятная эта упрощенность и искусственность — они предпочтут самоделки или хотя бы опенсорс.
        А тем, кому охота поиграть — им будет лень притрагиваться к какому бы то ни было коду, им и так хорошо, поуправлять с айпада и повеселиться.

        Разве что совсем детям — тем, которые только начинают знакомиться с робототехникой и пока не умеют по-настоящему писать программы…
          +1
          Ну как раз да, скорее всего детям, как обучающий инструмент. Ну или как у меня ситуация — подарили, я не ЦА таких устройств. Точнее я порадовался, поигрался полдня и… Наскучило. Стал искать пути решения хоть как-то его приспособить в хозяйстве. Пока придумал два юзкейса:

          1. мобильная веб-камера
          2. гонять котов (можно запрограммировать на движение)

          Все-таки это игрушка. Но эту игрушку всегда можно препарировать и доработать при желании.
            0
            Есть SDK, можно писать программы для него полноценно на C#/C++, при желании. Функционалом, правда, ограничен… Но, если брать тот же AR DRone PArrot, который многим нравится и о нем было уже столько раз написано на Хабре, рано или поздно может встать задача в его программировании. А тут уже реализован протокол общения.
            +1
            Сможет ли данное устройство работать при повышенной влажности (В женских банях)?
              +2
              Думаю что сможет, только вот сколько — вопрос :)
                0
                Ну хоть немножечко…
                +3
                Плоский юморок-то…
                  0
                  думаю, там надо установить статическую камеру… (кто мог и хотел — уже давно установил, можно найти полно видео на эту тему )
                  а вот это устройство выдаст себя шумом, да и ракурс предоставит не выиигрышный.
                  +1
                  Ну а по сути дела получается у него железа на рубль (и стоимость, соответственно), а «мозгов» на пять копеек…
                  Вот если бы он по апи был на уровне других (http://russianaicup.ru/p/quick) танков — это было бы интересно… А пока — целевая аудитория не ясна — программерам не интересно, юзеры не будут заморачиваться…
                    0
                    Сам участвовал в этом процессе (во 2м раунде отсеялся, russianaicup.ru/profile/busido), понимаю что хочется, но не совсем понимаю как это относится к текущему железу. Что касается API управления, то есть возможность управлять скорость, сервоприводами. Так ж есть возможность получать звук и картинку, при этом все это дело обрабатывать (OpenCV). Вот я конечно согласен, но я не понял вопроса… (:
                      0
                      А вообще бы здорово было бы если бы такая штуковина имела бы какую нибудь реализацию JVM и подход как у Raspberry — дешево, сердито и с огромным опенсорс комьюнити…
                        +1
                        Ну я имею ввиду, что железо дорогое, позволит себе не каждый (соответственно комьюнити небольшое), а как управлять этим — не ясно.
                        Дорога то известная — Куриосити с явой на марс полетел — почему бы не повторить в меньших масштабах…
                        Это не вопрос — а скорее мысли вслух=)
                      +2
                      Хм. Спасибо за наводку. Раньше краем глаза слышал про EZ, но пользоваться не приводилось. Похоже, надо будет к моим девайсам совместимость с EZ добавить, а то сейчас приходится свою управлялку делать. Раз есть нечто универсальное — надо пользоваться.

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

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