Робот телеприсутствия на Arduino и Android за 2600р, 100 строчек кода и 5 вечеров.

Jul 17, 2015 00:19

В этом семестре я ходил на курс, посвященный Arduino, и захотелось мне сделать что-нибудь такое несложное, но тем не менее интересное. И пришла идея сделать робота с камерой, которым можно управлять удаленно через интернет, просматривать картинку с камеры и разговаривать с людьми. Идея родилась под влиянием лекции, на которой представители стартапа endurancerobots.com показали действующего робота телеприсутствия, собранного их гениальным инженером на коленке за неделю. Это действительно гениально, я потратил несколько вечеров, но не смог придумать ничего проще. Поэтому идея полностью взята у них (схема, настройка ПО), отличие только в микроконтроллере.



Ездящих роботов я уже делал, поэтому управление моторами с помощью Arduino - это простая и знакомая мне задача.

Добавим сюда распространенное многофункциональное устройство - телефон на Android, который имеет встроенную камеру, микрофон, динамик и аж несколько способов подключения к интернету: WiFi и 3G. На телефон можно установить любую программу для видеосвязи, например Linphone, что избавляет нас от написания своего софта для передачи видео и голоса. Фишка решения в том, что управление осуществляется также через Linphone посредством DTMF сигналов, это знакомые вам сигналы тонового набора для телефонных линий. Управляющий Linphone на компьютере позволяет с помощью цифровой клавиатуры отправлять DTMF коды, а Linphone-клиент на телефоне их принимать и записывать данные события в системный лог. Например, принятый DTMF сигнал "1" оставляет в логе такую строчку:
D/Linphone( 5727): DTMF received: 49
А если на Android включить debug mode, то системный лог можно читать по USB через службу ADB. Также можно использовать появившийся позже протокол ADK, разработанный Google для взаимодействия Android с периферией. Но я не разобрался, как им по-простому читать логи.

Дело за малым - соединить между собой телефон и Arduino и добраться до заветной ADB. После рассмотрения всех возможных вариантов оказалось, что несмотря на то, что и на телефоне и на Arduino имеется USB порт, на большинстве телефонов (в отличие от планшетов) он работает в режиме slave, для соединения же двух девайсов по USB один из них должен быть в режиме USB host, т.е. без специальных плат для соединения Arduino и Android все равно не обойтись. Таковых было найдено минимум две: IOIO и USB Host Shield 2.0, так же было найдено множество библиотек к ним. Для расписанного выше сценария нам идеально подходит плата USB Host Shield 2.0 с библиотекой microbridge, в которой даже есть программка-пример для чтения логов с телефона, т.е. нам и кодить-то почти ничего не надо! Однако, библиотека сразу не заработала, заглянув в исходники и заставив ее выводить сообщения для отладки, я выяснил, что телефон не коннектится к Arduino. Видимо, из-за того, что библиотека была написана под древний "Android >1.5" и, увы, не обновлялась с 2011 года. Тут надо сказать, что схема робота была продумана заранее, выбраны соответствующие компоненты и библиотеки, и робот уже практически собран, а неработающая библиотека означала фейл всей схемы. Я уже начал было гуглить спецификацию протокола ADB, чтобы исправить библиотеку, но, везению моему не было предела, потому что я нашел версию microbridge, доделанную добрым человеком для работы с Android >=4.2!

USB Host Shield легко соединяется с Arduino. Arduino управляет моторами через контроллер. Батарея аккумуляторов выдает 5-6 В, а моторы рассчитаны на 3-6 В, поэтому контроллер моторов питается напрямую от батареи, а Arduino - через преобразователь, повышающий напряжение до 8 В.

Омниколесо, поставлявшееся вместе с платформой не крутилось и заедало, пришлось заменить его на мебельное колесо из леруа-мерлен (оо, там их огромный выбор).

Целый вечер потратил на придумывание и выпиливание держателя для телефона, который позволял бы закреплять на нем телефоны разных размеров, в том числе планшеты. В итоге сделал только раму и нижнее крепление. А потом догадался вместо верхнего крепления прилепить на раму двусторонний скотч. Все! Держится! Скотч - это вещь!



Cписок использованного оборудования
Платформа с колесами и моторами - 1000р
USB Host Shield 2.0 (китайский) - 700р
Телефон LG L90 с Android 4.4.2 и программой Linphone (использовал свой, в стоимость не входит)
Arduino Uno (китайская), контроллер моторов, DC-DC преобразователь напряжения - 700р
4 аккумулятора АА и зарядное устройство (имелись)
Мебельное омниколесо и алюминиевый профиль из леруа-мерлен - 200р
Программа для Arduino доступна на github
Программа для Android - 0 строчек
Руки, голова, паяльник и инструменты.
Компьютер для удаленного управления роботом.

Как подключиться к роботу
(Написано для примера, естественно, мой робот обычно выключен.)
Скачайте и установите программу для видеосвязи Linphone, имеются версии для всех популярных настольных и мобильных операционных систем, в том числе для Windows, Linux, Mac, Android. После установки откроется помощник настройки аккаунта. В версии для компьютера он находится в меню Help -> Account assistant. С его помощью создайте новый аккаунт на linphone.org или введите данные для имеющегося SIP аккаунта.


Можете сделать тестовый звонок на sip:500@ekiga.net, но лично у меня видео так не работает.
Позвоните на robot-wilson@sip.linphone.org, включите видеосвязь и клавиатуру для тонового набора.


Управление:
2 - вперед
4 - влево
6 - вправо
8 - назад
Все, можно ездить!
Существующие баги: бывает, что команды пропускаются.
Previous post Next post
Up