Monday, February 14, 2011

Проект робота-уборщика. Часть 0 - Планирование.

Small Droid Cleaner 1.
Ну вот я наконец и пишу о том, что сделал к этому моменту. Впринципе все, что я делал эти две недели можно обобщить под словом механика. Я не писал никаких программ и не корпел с паяльником ваяя микросхемы. Это просто сборка основы, с которой дальше можно будет все это делать.
Приглашаю под кат всех желающих узнать некоторые мои проблемы и их решения в этом проекте.

Наверное почти каждый из нас - тех, кто чуял запах расплавленного олова, аромат кипящей канифоли, кто не один раз пересматривал Star Wars, Walle, I Robot и прошел не одну футуристическую игрушку - мечтал сделать своего робота. Причем такого, что его можно будет высоко назвать дроидом.
Наверняка эта мысль приходила и более широкому кругу людей. Как бы там ни было и кем бы ты ни был - дерзай и мужайся, дело это очень увлекательное и даст мотивацию к изучению электроники.

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

Мой выбор пал на робота-уборщика. Полезность не подлежит описанию. Увы понятно что с протиркой пыли он не особо справится - я не сделаю андроида. Хватит уборки пола. Для начала даже ограничим на гладкий пол, вроде паркета или линолиума - потом если все получится попробуем расширить.
Хорошо, идея есть. Попробуем сформулировать дело более технично:
Нужна грубо говоря машинка, которая будет проезжать всю поверхность комнаты. Иначе говоря она должна понимать где она находится в комнате, где условное место называемое "базой", где непреодолимые препятствия вроде стен и где робот уже убрал.

Понимать где находится и куда ему двигаться, робот может по своего рода карте, в которой закодировано где препятствия, где убрано, и где предстоит. Ввиду возможного расширения - может быть и закодирован тип покрытия.
Конечно можно все померить и закинуть в память вручную. Но так как мы трудимся на благо всего человечества лучше, чтобы робот сам составлял эту карту, тем более что есть объекты вроде тапок и ботинок у которых нет постоянного места.
Впрницпе робот смог бы ориентироваться относительно объектов вроде диванов и стен. Для этого ему нужен дальномер. Тогда померев все он может определить где он находится.
Сама уборочная система теоритически ни на что не влияет - она вешается и в самом грубом варианте постоянно работает, и если робот проедет всю поверхность, то уберет всю комнату. Неплохо было бы использовать технологии уборки улиц и супермаркетов и впринципе механическая метелка выглядит довольно реально - несколько постоянно работающих двигателей, пара круглых щеток, миниатюрный конвеер и емкость для мусора и песка с пылью. Так что это пока отложим и подумаем о том, как и из чего мы сможем сделать ходовую часть, дальномер, "главный компьютер" робота.

Впрнципе у меня уже и ранее был микроконтроллер  Arduino Duemilanove (простите если в названии ошибка). К нему есть много библиотек и различных сенсоров, даже несколько учебников. Процессор 16 мегагерц и 32кБ памяти, 13 цифровых выходов. Самое основное что нужно - дальномер.
Посмотрев по магазинам среди обычных дальномеров встречаем несколько видов инфракрасных и ультрозвуковой. Цена последнего зашкаливает под стоимость ардуино (который кстати стоит чуть более 34 долларов). Он нравится по характеристикам - радиус действия 0,1-6м не так много выходов требует, но немного жалко денег за такое маленькое и узконаправленное устройство. Мой выбор упал на камеру, которая стоила около 25 долларов и у которой огромные возможности для расширения функциональности. Конечно красноглазанье по форумам сразу говорит, что с онлайновым потоком видео ардуино не справится - слишком много работы для него - но делать фотографии время от времени и их обрабатывать вполне может - это не будет 30 кадров в секунду, а может будет раз в две секунды, но меня это не сильно испугало.
Может быть читатель задает вопрос - постой, а как же он камерой собирается расстояние мерить. И вправду я забыл сказать, что у меня есть 7 лазерных диодов. И идея дальномера в вычислении катета прямоугольного треугольника - мы знаем на какой угол относительно камеры повернут лазер и если лазерная точка определяется в центре матрицы, то она находится прямо напротив камеры и зная расстояние от лазера до камеры и угол его поворота мы можем посчитать искомый катет.
Итак меня не испугала обреченность на "фотканье" ардуино, потому что мне совсем не нужно все изображение - мне нужно несколько полосок проходящие через середину матрицы - мне даже не нужны все спектры цвета, хватит только красного, так как лазер красный. Идея в том, что я делаю две фотографии из одной и той же позиции - со включенным лазером и без, сравниваю их, определяю где находится лазерная точка и делаю вывод куда мне поворачивать лазер - влево или вправо, или вообще, расстояние уже определено.
Появляется новая проблема - у камеры 16 пинов, и еще два на лазер - нужно что-то чуть покрупнее чем мое ардуино и выбор падает на Arduino Mega, который конечно кучается своей в два раза большей ценой но радует множеством пинов и гораздо большим количеством памяти, которая будет нужна для запоминания карты и хранения временных изображений с камеры.
Хорошо, если нигде не сделано критических промахов, то есть рабочий дальномер. Теперь нам нужно его установить на какую-то передвижную основу. Поискав в интрнете по разным магазинам игрушек и в итоге выйдя к своему удивлению на модельную японскую фирму Tamya нахожу гусеничную основу. Она удобна, т.к. можно разворачиваться стоя на месте и достаточно двух двигателей для задавания направления. Минимум хрупких деталей которых чуть больше в полностью  колесном исполнении.
Я решил не останавливаться на просто ходовой части и дать роботу еще и подвижную голову, вращающуюся на сервомоторах, чтобы мы всегда знали точно на какой угол она повернута при составлении карты - это дает большую мобильность в теоритически более тредных местах, например под столом или каких-то узких мест, которых обычно море рядом со шкафами.
Итак план готов и бюджет не так велик.
Нужно купить:
1)Гусеничная основа (20-35$) - в нее встроены двигатели для управления ей.
2)Серво двигатели минимум 3х (купил четыре за 20$) - для упраления головый по горизонтали, по вертикали, поворота лазера, четвертый возможно понадобится для подъема/спуска инструментов уборки, короче не пропадет.
3)Arduino Mega (официальная цена 50 евро, но наши китайские коллеги предлагают копию предыдущего поколения за 30$ на ebay)
4)Камера (остановился на 0,3 мегапикселя, для ардуино чем меньше нагрузка тем лучше) - 25$
Все остальное придется импровизировать - как делать голову, как все надежно между собой крепить. Но ниче - прорвемся ;))