January 4th, 2015

Облака для роботов

Завершающий и обобщающий пост из серии про управление роботами (в частности, платами ChipKIT) из облака с Сервера Роботов. Или, кому ближе ключевые термины из словаря маркетолога, как сделать себе персональный интернет вещей.

На мой взгляд, если в ближайшее время роботы смогут делать действительно умные вещи, это произойдет при помощи связи автономных устройств с облачными технологиями. Хотя современные мобильные процессоры довольно производительны и с ними можно делать много всего интересного, принятие умных стратегических решений основано не только на скорости реакции, но в первую очередь на полноте знаний об окружащем мире и на накопленном опыте: одна из самых мощных современных экспертных систем искусственного интеллекта IBM Watson имел 16 терабайт оперативной памяти и 4 терабайта рабочих данных (это только при выступлении на американском прародителе «Своей игры» еще в 2011 году), процессоры там конечно тоже не мобильные. При всем желании, такой мини дата-центр с супер-компьютером даже в современном исполнении довольно проблематично уместить в мобильный автономный форм-фактор (хотя, может быть грузовик?). Но это не значит, что его нельзя использовать для того, чтобы подарить все знания мира простым роботам: вполне логично разместить все эти терабайты знаний и петафлопсы вычислительных мощностей в облаке, а мобильным устройствам позволить постоянно (или время от времени, чтобы уменьшить зависимость от ненадежного канала связи) выходить в цифровой астрал за очередной порцией вселенской мудрости, чтобы иметь возможность более разумно выстраивать стратегию поведения для своей бренной плоти из пластика и металла. Мобильные рефлексы оставить для решения сиюминутных потребностей: не врезаться в стену, не упасть в яму, в оперативной обстановке спланировать тактический маршрут для решения стратегической задачи, спущенной свыше.

Чтобы подступиться к решению этих интересных задач, желательно не утонуть во второстепенных проблемах выбора подходящих технологий, мелких нюансах и неочевидных проблемах их работы. Ниже приведены простые почти пошаговые инструкции, в которых показано, как наладить канал связи между настоящим живым облаком и настоящим живым роботом. Они позволят безболезненно преодолеть первый порог и получить возможность сразу приступить к самому интересному. Мы будем использовать только современные открытые технологии, которые подразумевают возможность дальнейшего наращивания функционала на любом из участков выстраивающейся системы, не ограничиваясь рамками какой-нибудь закрытой проприетарной платформы.


Сервер Роботов: управление роботом-с-лампочкой через веб from 1i7 on Vimeo.


server_chipkit1_ledon.jpg

Облако для роботов своими руками

I. Предварительные знания
1. Виртуальный хостинг на Амазоне

2. Разработка веб-приложений на Scala
2.1. Разработка веб-приложений на Scala: среда разработки
2.2. Разработка веб-приложений на Scala: пишем приложение с Unfiltered
2.3. Разработка веб-приложений на Scala: развернуть приложение в облаке

3. ChipKIT: подключение к Вайфай

II. Связь робота и облака
4. Подключение робота к облаку: канал связи и консольный интерфейс
4.1. Сервер Роботов: запуск управляющего сервера на Java в облаке Amazon
4.2. Сервер Роботов: управление платой ChipKIT WF32 из облака
4.3. Сервер Роботов: управление смартфоном Android из облака

5. Веб-приложение для управление роботом через браузер
5.1. Веб-интерфейс для Сервера Роботов: Сервер Роботов2
5.2. Веб-интерфейс для Сервера Роботов: веб-приложение на Scala+Unfiltered

III. Примеры
Пример 1: Живая демонстрация на robotc.lasto4ka.su
Пример 2: Робот Машинка на Сервере Роботов
Пример 3: В глубинах океана

Исходники

Главные репозитории
https://github.com/1i7/snippets/tree/master/chipkit-cloud-wifi
https://github.com/1i7/snippets/tree/master/scala-web
https://github.com/1i7/snippets/tree/master/chipkit-wifi
https://github.com/1i7/robotserver
https://github.com/1i7/lessons/tree/master/Робот%20Машинка/прошивки/robot_server

Подробнее
1) Управляющее веб-приложение: chipkit-cloud-wifi/ScalaUnfilteredWebFrontend
2) Сервер Роботов1 (консольный интерфейс): chipkit-cloud-wifi/JavaTcpServerMaster/src/main/java/edu/nntu/robotserver/RobotServer1.java
3) Сервер Роботов2: chipkit-cloud-wifi/JavaTcpServerMaster/src/main/java/edu/nntu/robotserver/RobotServer2.java
4.1) Робот Клиент на ChipKIT (версия1 для консольного интерфейса): chipkit-cloud-wifi/chipkit_tcp_client_slave/chipkit_tcp_client_slave.pde
4.2) Робот Клиент на ChipKIT: chipkit-cloud-wifi/chipkit_tcp_client_slave2/chipkit_tcp_client_slave2.pde
4.3) Робот Клиент на Android: chipkit-cloud-wifi/AndroidTcpClientSlave
4.4) Условный робот на Java: chipkit-cloud-wifi/JavaTcpServerMaster/src/main/java/edu/nntu/robotserver/RobotClient2.java
5) Робот Машинка на Сервере Роботов: Робот Машинка/прошивки/robot_server/robot_car_client/robot_car_client.pde

Чемодан с инструментами для робота на платах ChipKIT

Подборка типовых задач и инструкций для плат ChipKIT, которая накопилась за прошедший год. Большинство упражнений из ознакомительного курса на Прикладной Математике: все, что связано с прямым подключением к контроллеру разнообразных устройств и организацией всевозможных каналов связи.

Рекомендуемая плата, на которой заработают все упражнения - ChipKIT WF32, в её основе лежит микроконтроллер PIC32, при этом она очень хорошо совместима с экосистемой Arduino на уровне программных интерфейсов API (большинство примеров, которые можно найти в интернете по ключевым словам "сделать что-то на Arduino", запустятся и на платах ChipKIT); также декларируется кое-какая совместимость со сторонними расширениями (шилдами) Ардуино на аппаратном уровне, но я это не проверял. Программное обеспечение и инструкции по началу работы с платой можно найти на сайте проекта ChipKIT chipkit.net. Кстати, платы серии ChipKIT также являются свободным аппаратным обеспечением - для них опубликован исходный код проектов по разводке платы (например, вот проект для среды EAGLE для платы WF32, ссылки на исходники остальных плат семейста ChipKIT размещены на их страницах на сайте digilentinc.com), поэтому любой желающий может изготовить собственную серию таких плат самостоятельно, если найдет подходящее производство и поставщиков для электронных комплектующих.

ДОБАВЛЕНО: из России платы ChipKIT проще всего купить на сайте http://www.microchipdirect.com. На сайте производителя http://digilentinc.com/ для международных посылок отправляют к региональному представителю https://www.terraelectronica.ru/, а у них из чипкитов несколько протухших плат по конским ценам (правда, с текущим курсом цены получаются все равно конские).

Более современной и перспективной в линейке ChipKIT является плата ChipKIT Wi-FIRE, на ней стоит новый контроллер Microchip PIC32MZ. По сути, это та же WF32, только с новым контроллером (в комплект также входят чипы WiFi, USB и считыватель SD-карт). Для первых игр с роботами я бы рекомендовал именно ее, только с оговоркой, что код приведенных ниже упражнений, работающих с USB и WiFi, сейчас (на момент публикации этого поста) на ней не запустится - для этого его придется портировать самостоятельно на новый стек WiFi и USB.

Для этой серии упражнений я старался по возможности использовать API Arduino, все проекты открываются, компилируются и прошиваются на плату из среды разработки mpide. Поэтому некоторые примеры (моторчики и датчики) должны заработать на любом контроллере семейства Arduino. Однако API для работы c WiFi и USB не входят список стандартных программных интерфейсов Arduino; код примеров, работающий с WiFi и USB, запустится только на платах серии ChipKIT (абсолютно всё заработает на плате ChipKIT WF32; на Uno32 или Max32 нужно устновить дополнительные расширения, т.е. шилды для WiFi или USB; на новых платах ChipKIT Wi-FIRE не заработает, т.к. в них используется новый новый стек WiFi и USB, нужно портировать код)

Код, который работает за пределами контроллеров (веб-приложения на Java и Scala), очевидно самодостаточен и универсален.

Collapse )

За сколько денег (максимум) вы бы купили плату для разработки своего робота, который умеет выходить в интернет?

низасколько
0(0.0%)
500руб
1(16.7%)
1000руб
0(0.0%)
1500руб
1(16.7%)
2000руб
2(33.3%)
2500руб
1(16.7%)
3000руб
0(0.0%)
3500руб
0(0.0%)
4000руб
0(0.0%)
4500руб
0(0.0%)
5000руб
0(0.0%)
5500руб
1(16.7%)
6000руб
0(0.0%)
7000руб
0(0.0%)
8000руб
0(0.0%)
9000руб
0(0.0%)
10000руб
0(0.0%)
более 10000руб
0(0.0%)