Машинка, управляемая из браузера



    На хабре уже было несколько статей о машинках, управляемых через WiFi и с web камерой на борту.

    Вот одна статья: "Радиоуправляемая Wi-Fi машинка с камерой" А вот еще одна статья по теме: "Гонка тарантасов, управляемых через Интернет"

    Я хочу предложить новый(?) способ создания подобных машинок.

    Для решения этой задачи нужно определиться с каналом передачи команд на машинку и подумать о канале передачи видео с машинки клиенту в браузер.

    Я продумывал много разных вариантов, пока не пришла в голову мысль использовать в качестве мозга машинки телефон с ОС Android.

    Это решение сразу дает много преимуществ: камера на телефоне есть, наверное можно организовать вещание с нее. Опять же WiFi есть — можно организовать передачу команд туда и/или оттуда. Да и вес небольшой…

    Конечно сразу возникает много других проблем — как программировать телефон и как подключать к телефону моторчики.

    Для связи телефона с внешним миром я использовал его аудио разъем. Несколько коротких аудио файлов WAV с сигналом синусоидальной формы разной частоты: 1000Гц, 1200Гц, 1400Гц… Их воспроизведение в нужный момент — это и есть команда.



    К аудио разъему я подключил плату Марсоход (на хабре было несколько статей про нее). Это плата для начинающих эксперименты с ПЛИС Альтеры. Конечно у ПЛИС нет АЦП для оцифровки аудио, но мне это и не нужно. Достаточно, чтобы входной элемент плисины переключался на некотором пороге при наличии входного аудио сигнала. Это удалось сделать. Потом для ПЛИС сделал проект в среде Altera Quartus II, который меряет частоту входного сигнала и интерпретирует ее как команду.



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

    У меня не было опыта программирования телефона, пришлось много читать и искать в интернете. В результате остановился на языке Python — оказывается можно писать небольшие скрипты чуть ли не на телефоне и тут же их запускать. Для этого нужно установить на телефон SL4A (Script Layer For Android) и собственно поддержку самого Python. Сайт, где можно почитать об этом подробнее — http://code.google.com/p/android-scripting/ Там же в разделе загрузки можно выкачать SL4A. Есть описание API и примеры.

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

    Приведу простой пример. Для того, чтобы телефон стал вещать видео поток нужно запустить с помощью SL4A вот такой простой скрипт на телефоне:

    import android
    droid = android.Android()
    droid.wakeLockAcquireBright()
    droid.webcamStart(0,10,9091)
    droid.webcamAdjustQuality(0,10)
    


    После этого, к телефону можно подключаться браузером на порт 9091. Правда с Firefox были проблемы, но Chrome показывает вполне прилично. Еще фишка — чтобы видео было пошустрее нужен и телефон побыстрее. У меня не очень быстрый HTC Wildfire S, так что видео иногда тормозило.

    Экспериментируя дальше я решил, что правильно будет запустить «веб сервер» прямо на телефоне. Сервер реализуется так же в виде скрипта на Python. Сервер отдает страницы в виде html фреймов: в одном фрейме видео, а в другом HTML FORM с кнопками «Start», «Stop», «Left», «Right», «Back». По нажатию на кнопки браузер клиента отправляет запрос HTTP-GET на сервер, работающий на телефоне. Сервер интерпретирует запросы GET и воспроизводит нужные звуковые файлы. Плата распознает частоту звуковых сигналов и включает или выключает моторчики. Вот как-то так.

    После тестирования каждого модуля по отдельности можно собирать и пробовать всю «систему» — машинка на гусеничном ходу с платой Марсоход и телефоном с ОС Андроид:



    Вот такая видео демонстрация:



    Все исходники проекта, конечно, открыты и их можно взять вот здесь.
    Share post

    Similar posts

    Comments 19

      +1
      К сожалению, основная проблема подобных разработок — большое время отклика камеры.
      Приемлемых результатов лично мне удалось добиться с SmartCam, да и то, на самом маленьком разрешении.

      P.S. интересный способ коммуникации. Я одно время хотел модемную модуляцию/демодуляцию делать )
      Но покупка bluetooth-модуля оказалась проще.
        0
        О, это платформа от робота, инструкцию по сборке к которому в конце прошлого года выкладывал RaJa :)
          0
          Гусеницы Tamiya… поражаюсь их популярности
          0
          import android
          droid = android.Android()
          droid.wakeLockAcquireBright()
          droid.webcamStart(0,10,9091)
          droid.webcamAdjustQuality(0,10)

          У меня не заработало, на galaxy gio.
          Говорит:

          java.lang.IllegalStateException: Webcam not streaming
            0
            хм… какой версии SL4A и Python?
            и еще, возможно мой пример слишком схематичный, ведь программа сразу завершается после последней строки.
            Поставьте в конце например time.sleep(60) и в начале import time
              0
              Нашел проблему, она заключается в четвертом андройде. Камера просто не работает :)
            0
            Магистерскую недавно защищал, так половина работа автоматчиков была связана со стабилизацией перемещения таких игрушек. Все они получили четверки.
              +1
              Для кодирования / передачи сигналов можно также использовать коды DTMF. Это такие звуки, которые генерит телефон при нажатии на кнопку, ими кодируется передача цифр телефонного номера. Имеется 16 возможных сигналов DTMF, так что напрямую можно реализовать 16 команд. Длительность передачи кода DTMF может составлять 100..150 мс, что вполне достаточно для передачи команд телеуправления для многих целей. Последовательной передачей кодов можно задавать практически неограниченное количество команд (конечно, при этом увеличится время передачи команды).

              Однобитные декодеры DTMF на FPGA наверное уже кто-то реализовал, см. http://www.springerlink.com/content/t5h3cmjtn1t097d0/. Есть также аппаратные дешевые декодеры DTMF с цифровым выходом, которые можно напрямую подключить к FPGA. DTMF-сигналы на телефоне можно генерить как программно, так и воспроизводя файлы, как сделали Вы.
                +1
                Ну Вы и извращенец.
                  0
                  Марсоход интересный проект, наблюдаю за развитем. Но в данном случае вы на нее возложили какие-то совсем второстепенные задачи. Складывается впечатление, что на плате все таки не хватает процессора.
                    0
                    в позапрошлом году делал похожее: правда мозгами на машинке был скайп. С ним связывался демоном на pyskype, и можно было прямо из чатика нажимать кнопки куда ехать + двусторонняя видеосвязь
                      +1
                      А двухстороння-то зачем? Чтобы робот заодно и за вами приглядывал? ;)
                      +1
                      Немного не в тему, но вдруг кому будет полезно. Есть очень клёвый роутер www.tp-link.com/en/products/details/?model=TL-MR3020 на который можно поставить openvrt и распаять UART. На его базе кто то даже opencv кажется использовал.
                      –1
                      Недавно у меня была похожая идея: поставить на несколько радиоуправляемых машинок видеокамеры, и управление через Wi-Fi. Все машинки подключаются через Wi-Fi к компьютеру, на котором будет запущен сервер. Сайт будет доступен каждому, и любой сможет просматривать видео с машинок, а вот за управление машинкой брать плату.
                      Чтобы машинки не «угнали» далеко — запереть их в отдельной комнате, и туда добавить «декорации»: мячи, игрушечные дома, туннели, чтобы было интересно ездить. Получится что-то типа ММОРПГ «на марсе» (всё-же задержки неизбежно будут).
                      Если проект будет прибыльным, то: добавить зарядку с помощью индукции (чтобы не менять аккумуляторы вручную), многоярусные прозрачные дороги (из орг стекла, что-то похожее на «Трон-наследие»); добавить оружие защиту от того, чтобы не побили машинки (резинками обклеить от ударов, или убрать все высокие места, откуда можно будет хорошо свалиться).
                      Ну и что-то придумать подешевле мобильного в качестве элемента управления машинок.
                      Кто реализует такой проект, и сумеет получить прибыль, надеюсь поделятся за идею.
                      0
                      Прочитал на днях книжку на самиздате: «Сеть дронов». Очень по теме.
                        0
                        > Все исходники проекта, конечно, открыты

                        Я далёк от темы микроконтроллеров, но вот за слово «конечно» — респект.

                        Only users with full accounts can post comments. Log in, please.