Уже второй месяц я собираю по вечерам автономного робота, которого зовут Frank. Почему? Не спрашивайте! Я знаю, что у каждого робота должно красиво расшифровываться имя, но я ничего еще не придумал. Если будут идеи — пишите в комментариях. Все началось достаточно давно. Мое увлечение нейронаукой, когнитивистикой, искусственными нейронными сетями и искусственным интеллектом привело меня к тому, что исследования алгоритмов в компьютере — это достаточно увлекательный процесс, но иногда хочется потрогать свое творение руками и посмотреть как оно ведет себя в реальной жизни.
Все это не очень вписывалось с уже существующими знаниями, так как по профессии я работаю в индустрии кино. Все пришлось учить с нуля, читать огромное количество литературы, сайтов и проводить большое количество экспериментов, чтобы достичь нужных результатов.
Так как половину времени я живу в Лос Анджелесе, а половину в Москве, то возможно некоторые ссылки будут не очень актуальны. С другой стороны, мне пришлось найти магазины для покупки электроники и там и тут, так как мои постоянные разъезды ни как не влияют на желание изучать робототехнику. Поэтому, по возможности, я опубликую ссылки и на наши и на западные ресурсы. Возможно, это поможет и русским читателям и тем, кто, читает Хабр за рубежом.
Началось все с выбора платформы, на основе которой можно было бы построить робота. На тот момент мне было все равно, будут ли у него ноги, колеса или другие способы передвижения. Я решил начать с одной из платформ компании Lynxmotion, но у них не было в наличии достаточного количество серво-моторов, чтобы отправить мне заказ. В тот момент я познакомился с русскими товарищами из компании Brain Corporation, которая находится в Сан Диего, и съездив к ним в офис, понял, что надо начинать с простого — Lego Mindstorms. Это достаточно простая платформа, понятная подросткам, но позволяющая программировать, при желание, на Python и C++.
У меня оставалась неделя в Лос Анджелесе до моего отъезда в Москву. На всякий случай, я заказал пару наборов из Lego Technic и собственно сам набор Lego Mindstorms NXT2.0. Почитав несколько интересных статей про Arduino и другие, похожие системы, я заказал несколько наборов, которые включали в себя компоненты для начинающих, серво моторы и крепления серво моторов для Lego.
Все детали пришли, и упаковав их в чемодан, я полетел в Москву, собирать своего первого робота.
Поначалу, казалось все должно быть очень просто, но на практике, собрать четырех-колесного монстра с возможностью рулить всеми колесами, полным приводом и подвеской, позволяющей ездить по бездорожью, за три недели у меня не получилось. Моторы, которые идут в наборах Lego Technic, достаточно компактные. С ними можно действительно собрать вездеход, но подключить его к Mindstorms не так просто — нужны дополнительные кабели и переходники. Моторы от Mindstorms такие огромные, что собрать компактного «Фрэнка» было просто невозможно. Пришлось сделать все еще сложнее и интереснее.
Я решил использовать моторы HiTech вместо тех, что шли с Lego, и вместо NXT Brick использовать другой контролер — Arduino Uno. Подключив серво моторы к PWM выходам Arduino, и проверив, что все работает, я начал заново собирать своего «Фрэнка». Моторы вместе с креплением все еще было достаточно большие, но измененный форм-фактор, позволил их разместить в корпусе внедорожника. Пришлось пожертвовать подвеской, но в будущем, когда дойдет время до езды на улице, я что-нибудь придумаю.
И так, платформа собрана. Пришло время делать самое интересное — напичкать Фрэнка электроникой и заставить его двигаться. Для тестирования того, что все компоненты работают как надо, я взял Arduino, обычную плату для прототипирования. У каждого серво-мотора есть три кабеля — красный, черный и желтый. Черный кабель это земля. При подключение Arduino необходимо, чтобы земля у Arduino и серво-моторов была замкнута между собой. Поэтому все черные кабеля от серво-моторов, grd выход из Arduino и минуc у батареи, которая питает серво-моторы мы соединяем вместе. Далее, плюс серво-моторов (красный кабель) и плюс батареи мы соединяем вместе, но не подключаем к Arduino. Для того, чтобы Arduino функционировал без проблем, необходимо изолировать питание серво-моторов и питание Arduino. Для этого я использую разные источники питания для моторов и Arduino. Если питание одно, то между плюсом и землей у каждого серво-мотора надо припаять конденсатор — это избавит от лишнего «шума» в плате.
Убедившись, что пресет «Servo->Sweep» в Arduino работает, я принялся спаивать небольшую схему на базе Arduino Proto Shield. Конечно, из-за того, что это был мой первый опыт с паяльником в руках — плату я благополучно угробил, не заметив, что некоторые контакты связаны с «землей», а значит и между собой. Теперь жду, когда прийдут новые платы для экспериментов.
На данный момент, это то, где прогресс с моими экспериментами остановился на сегодняшний день. Что я планирую делать дальше, когда прийдут дополнительные компоненты?
И так! На этой неделе мне должны доставить 3 солнечные батареи по 3W каждая, две Arduino Proto Shield (на тот случай если я еще одну плату уничтожу), Li-Po батарея 2LIR18650-PCB-LD, Lipo Rider компании Seeedstudio.
Так же в наличие у меня остались различные ультразвуковые датчики, 2 CMOS камеры и BeagleBone Black. Что же из этого всего может получиться?
Солнечные батареи, Li-Po батарея и Lipo Rider будут обеспечивать автономную работу. При падение напряжения, робота можно будет переводить в «спящий» режим, пока батареи заряжаются.
Две камеры, ультразвуковые сенсоры и возможно лазерный дальномер (когда я придумаю достаточно дешевое решение) будут обрабатываться BeagleBone Black для построения «картины окружающего мира». Учитывая то, что процесс зрительного восприятия у людей многоуровневый (различные уровни наших нейронных сетей обрабатывают разные свойства изображения), то мне пришла идея использовать несколько плат BeagleBone Black или Parallela, соединенных иерархически. Каждая плата будет выполнять свой алгоритм, максимально утилизирующий мощность процессора и количество свободной памяти, передавая данные дальше по цепочке для дальнейшей обработки. Таким образом, можно обрабатывать и другие сенсоры. В результате, получится большая сеть компонентов, которая, как живой организм, управляет автономным роботом.
Впереди увлекательное путешествие по сборке робота. Как только прийдут оставшиеся компоненты и все заработает, я напишу еще одну статью.
Теперь, что касается различных ресурсов, где я покупаю детали, электронику и тому подобное.
США:
1) Основной ресурс в Америке, как не удивительно это Amazon.com. Там можно купить все, что угодно.
2) Newark.com — тут можно купить любые компоненты для сбора микросхем.
3) Lynxmotion — тут можно купить запчасти и готовые роботы.
4) Mindsensors — различные сенсоры для Lego и других платформ. Есть много чего для Arduino.
5) Trossen Robotics — пожалуй, самая крутая платформа для разработки роботов. Тут же можно купить серво-моторы, запчасти, микросхемы и так далее.
Россия. Тут все немного хуже — очень надеюсь на вашу помощь и рекомендации, так как кроме одного магазина не смог найти что-то достойное, с большим выбором и доставкой.
1) Electronshik — Единственное, что я пока нешел. Тут есть далеко не все, но все, что мне нужно было на данный момент.
Автор: dsedov