Прочитав опубликованную статью Однажды фанера, atmega, да малина, я решил поделиться своей поделкой, которая доступна (не сложна) для повторения.
При создании бота ставились следующие задачи:
- Управление ботом по беспроводной сети
- Наличие онлайн камеры
- Удобство программирования
Бортовой компьютер
Для бортового компьютера был выбрал двухъядерный андроидный миникомпьютер UG-802, который имелся под рукой. В качестве операционной системы — Linaro, полноценный линукс дистрибутив, основанный на Ubuntu.
Для начала нужно было чтото сделать с проблемным встроенным wifi адаптером, который упорно не желал запускаться под пересобранным ядром. Кардинальным решением было выпаять его и установить второй USB хост коннектор, в который можно будет воткнуть нормальный usb wifi (или даже 3G модем). Сказано — сделано, плата встроенного wifi была отпаяна и вместо нее напаян второй хост.
Первая проверка внутреннего USB host-а:
Окончательный вид установленного USB host-а:
Колесная платформа
Когда-то я заказывал платформу Ardubot и колеса с моторами к ней, но руки до нее не доходили. Не долго думая, было решено ей воспользоваться. На нее была смонтирована плата преобразователя с 12 в 5 вольт, выдранная из специально купленной в магазине автомобильной зарядки (используемая в ней микросхема имеет более широкий диапазон входного напряжения). Литий-полимерный аккумулятор на 11.1В/1250мА уже имелся от разбитой, в прошлом, модели самолета. Плату Ardubot-а пришлось подвергнуть легкой модификации из-за особенностей платы управления (дорожка отрезана от D9 и запаяна на D7). Так же был установлен усб разъем, на который выведено только 5 вольтовое питание:
Сзади видны провода идущие от энкодеров колес:
Управление двигателями, светом
Изначально платформа Ardubot была расчитана на совместное использование с Arduino, почему бы этим не воспользоваться. Вместо Ардуино я взял OLIMEX PIC32-PINGUINO-MX220, совместимый по разъемам. Выяснилась неприятная мелочь — один из пинов управления мотором был использован для светодиода на плате PINGUINO. Все бы ничего, но этот светодиод мигал в режиме загрузки фирмвари, заодно проворачивая колесо. Поэтому пришлось перепаять дорожку, о чем было написано выше.
Для простоты отладки и универсальности, плата управления подключается через USB. Прошивка PINGUINO эмулирует CDC-ACM устройство, видимое для пользователя как последовательный порт /dev/ttyACM0. Отправляемые команды управления выглядят так:
MOTOR X Y | X — номер мотора, Y — состояние |
LIGHT X Y | X — номер лампы, Y — состояние |
CLEAR | сбросить все в состояние по умолчанию |
COMMIT | Применить |
Нумерация моторов: 0 — левый, 1 — правый.
Состояния: 0 — остановлен, 1 — вперед, -1 — назад.
Например, чтобы включить задний светодиод на платформе, достаточно из консоли отправить команды:
echo "LIGHT 1 1" > /dev/ttyACM0
echo "COMMIT" > /dev/ttyACM0
Чтобы поехать вперед:
echo "MOTOR 0 1" > /dev/ttyACM0
echo "MOTOR 1 1" > /dev/ttyACM0
echo "COMMIT" > /dev/ttyACM0
Камера и хаб
Один USB порт бортового (ботового) компьютера используется wifi адаптером, в другой плата управления платформой. Куда подключить камеру? Выход есть — использовать хаб. В одном из компьютерных магазинов была куплена одна из самых дешевых веб камер и USB хаб подозрительного вида.
Размещение электроники
В процессе поиска из чего слепить бота, была удачно найдена пластиковая коробочка-упаковка из под IPOD TOUCH, в которую идеально влазил UG802 и разобранный USB хаб. Для трех коннекторов хаба в боку был сделан вырез. В четвертый (внутренний) коннектор воткнулась камера (с предварительно укороченным кабелем). В крышке также был сделан вырез под разъем USB на UG802, который не давал ей закрыться:
Все это дело прикрутилось сверху над PINGUINO-MX220 — платой управления платформой:
Окончательная сборка и тестирование
Наступило время собрать все в одно целое:
Все проводки были воткнуты куда им положено — PINGUINO в хаб, UG802 питание в USB коннектор на Ардуботе:
Бортовой компьютер настроен для доступа по ssh, весь нужный инструментарий для работы (компилятор, библиотеки, mc) установлены из репозитория Linaro. Заходи, пиши, компилируй и отлаживай прямо на нем. Красота!
Для тестирования разработана консоль управления, которая показывает онлайн изображение с камеры бота и отправляет ему команды куда ехать, какие лампы включить-выключить. Софт бота принимает команды и отправляет онлайн видео на консоль управления. Текущий статус — глубокая бета. Однако пользоваться системой уже можно!
Видео демонстрация
Рекомендации
Необязательно использовать спаркфановский ардубот, есть более дешевые и лучшие варианты.
UG802 можно также заменить дешевыми аналогами (MK802, CX-01), но нужно смотреть, чтобы были доступны исходники ядра, работающие на конкретном девайсе-клоне. Иначе установка полноценного линукса будет проблематична либо вообще невозможна.
Ссылки
Проект на гугол коде (исходники)
Linaro distro
PIC32-PINGUINO-MX220 на сайте OLIMEX
Ardubot на Sparkfun
Автор: sashz