Пользователь
0,0
рейтинг
26 августа 2013 в 18:38

Создание автономного робота Frank. Часть первая из песочницы

image

Уже второй месяц я собираю по вечерам автономного робота, которого зовут Frank. Почему? Не спрашивайте! Я знаю, что у каждого робота должно красиво расшифровываться имя, но я ничего еще не придумал. Если будут идеи — пишите в комментариях. Все началось достаточно давно. Мое увлечение нейронаукой, когнитивистикой, искусственными нейронными сетями и искусственным интеллектом привело меня к тому, что исследования алгоритмов в компьютере — это достаточно увлекательный процесс, но иногда хочется потрогать свое творение руками и посмотреть как оно ведет себя в реальной жизни.

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

Так как половину времени я живу в Лос Анджелесе, а половину в Москве, то возможно некоторые ссылки будут не очень актуальны. С другой стороны, мне пришлось найти магазины для покупки электроники и там и тут, так как мои постоянные разъезды никак не влияют на желание изучать робототехнику. Поэтому, по возможности, я опубликую ссылки и на наши и на западные ресурсы. Возможно, это поможет и русским читателям и тем, кто читает Хабр за рубежом.



image

Началось все с выбора платформы, на основе которой можно было бы построить робота. На тот момент мне было все равно, будут ли у него ноги, колеса или другие способы передвижения. Я решил начать с одной из платформ компании Lynxmotion, но у них не было в наличии достаточного количество серво-моторов, чтобы отправить мне заказ. В тот момент я познакомился с русскими товарищами из компании Brain Corporation, которая находится в Сан Диего, и съездив к ним в офис, понял, что надо начинать с простого — Lego Mindstorms. Это достаточно простая платформа, понятная подросткам, но позволяющая программировать, при желание, на Python и C++.

У меня оставалась неделя в Лос Анджелесе до моего отъезда в Москву. На всякий случай, я заказал пару наборов из Lego Technic и собственно сам набор Lego Mindstorms NXT2.0. Почитав несколько интересных статей про Arduino и другие, похожие системы, я заказал несколько наборов, которые включали в себя компоненты для начинающих, серво моторы и крепления серво моторов для Lego.

Все детали пришли, и упаковав их в чемодан, я полетел в Москву, собирать своего первого робота.

image

Поначалу, казалось все должно быть очень просто, но на практике, собрать четырех-колесного монстра с возможностью рулить всеми колесами, полным приводом и подвеской, позволяющей ездить по бездорожью, за три недели у меня не получилось. Моторы, которые идут в наборах Lego Technic, достаточно компактные. С ними можно действительно собрать вездеход, но подключить его к Mindstorms не так просто — нужны дополнительные кабели и переходники. Моторы от Mindstorms такие огромные, что собрать компактного «Фрэнка» было просто невозможно. Пришлось сделать все еще сложнее и интереснее.

Я решил использовать моторы HiTech вместо тех, что шли с Lego, и вместо NXT Brick использовать другой контролер — Arduino Uno. Подключив серво моторы к PWM выходам Arduino, и проверив, что все работает, я начал заново собирать своего «Фрэнка». Моторы вместе с креплением все еще были достаточно большие, но измененный форм-фактор, позволил их разместить в корпусе внедорожника. Пришлось пожертвовать подвеской, но в будущем, когда дойдет время до езды на улице, я что-нибудь придумаю.

image

image

И так, платформа собрана. Пришло время делать самое интересное — напичкать Фрэнка электроникой и заставить его двигаться. Для тестирования того, что все компоненты работают как надо, я взял 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 — Единственное, что я пока нешел. Тут есть далеко не все, но все, что мне нужно было на данный момент.
Dennis Sedov @dsedov
карма
12,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (24)

  • +3
    Терраэлектроника же. Раз в Москве. Достаточно удобный поиск, огромная база и обширные склады. Процентов 80-85 компонентов закупаю там.
    Еще есть Чип-Дип, но у меня не хватит цензурных слов, чтобы описать их ценовую политику, поэтому там стоит покупать только если больше нигде нет, а срочно нужно.
    Вольтмастер — отвратительный поиск, вечно неактуальные данные по наличию, но зато очень низкие цены. Имеет смысл подбирать подходящие компоненты в терре, а потом смотреть, нет ли их дешевле в вольтмастере.

    Что касается поста… Вы до этого собирали что-нибудь подобное?
    Просто не в первый раз уже вижу наполеоновские планы, амбиции, тонны закупленной электроники… И затухающий энтузиазм, без результата.
    Может, стоит начать с более простых экспериментов?
    • 0
      Спасибо за ссылки. Нет, раньше ничего такого не собирал. У меня как-то сложилось следующим образом со всеми хобби, которые у меня были: если за месяц не надоело, значит не надоест. Пока правило ни разу не подводило. Самим искусственным интеллектом, я занимаюсь с мая этого года. Уже прочитал много литературы на эту тему. Одно могу сказать, что проект явно будет эволюционировать и не факт, что он не изменится координально. Но то, что писать алгоритмы для чего-то, что можно пощупать руками гораздо увлекательней (хоть и менее продуктивно) — это факт!
      • 0
        Тогда тоже могу предложить собрать что-то попроще. Причем с детальными планами что и как должно работать. Если хорошего опыта программирования нет, то с BeagleBone вряд ли что-то выйдет, тем более многоуровневое.
        А для улицы гораздо проще использовать шасси типа Dagu Wild Thumper или радиоуправляемое шасси масштаба 1:10 или 1:16
  • 0
    Если нужен лазерный дальномер, то есть такой проект.
    • 0
      Спасибо за ссылку. Это ваш проект? Очень интересный!
      • +1
        Да, мой. Сейчас вся аппаратная часть сделана, осталось только разбираться с программами.
  • +1
    Частично не по теме магазинов, но вам может быть интересно взглянуть:

    1. Робофорум. Как следует из названия — форум, на котором обсуждают робототехнику и роботов различных видов (LEGO Mindstorms и Arduino туда, разумеется, входят). Раньше у них был магазин, но сейчас почему-то отдаёт 404.
    2. Официальный сайт всероссийского этапа всемирной олимпиады по LEGO-робототехнике (WRO). Возможно, какие-то роботы из творческой категории или даже правила основной вдохновят вас и дадут новые интересные идеи.
    3. Tetrix — хардкорная версия LEGO. Металлические детали, но есть совместимость с LEGO. В частности, для управления можно использовать NXT.
    4. Также рекомендую поизучать регуляторы из теории автоматического управления (ТАУ). П-, ПД-, можно даже ПИД. Роботы начинают вести себя на порядки плавнее по сравнению с программой из if'ов.
    5. Амперка — еще один магазин. Не самые низкие цены, зато есть самодостаточные наборы вида «всё для старта».
    6. Слышал про магазин ТехноКонтекст. Помимо LEGO там доступны Bioloid — это наборы для сборки андроидов и прочей живности с кучей сервомоторов, мелких винтиков и, по отзывам, странной среда программирования.
    7.
    Чуть рекламы
    Есть книжка «Робототехника для детей и родителей» (С.А.Филиппов). Написана как методическое пособие для обучения детей с использованием LEGO Mindstorms. Например, показываются некоторые «классические» конструкции, простым языком и без высшей математики рассказывается про регуляторы. Ничего сложного, но может быть полезно для старта, если захочется большей «структурированости» по сравнению с материалами из интернета.

    8. HiTechnic — различные продвинутые сенсоры (и не только) для NXT. Например: компас, ИК-датчик, омниколёса, разветвитель для датчиков нажатия.
    9. Различные среды программирования для NXT: leJOS (Java), ROBOLAB (графическая, как из комплекта, но не тормозит и позволяет намного больше), NXC/RobotC.
  • 0
    Если ищите детали для робота в Москве, то рекомендую посмотреть тут:

    1. Детали от конструкторов fischertechnik поштучно.
    2. Компоненты Arduino & Co.

    Есть самовывоз из офиса, курьер по Москве и доставка EMS по РФ.
  • 0
    Спасибо все огромное за ссылки! Как же я мог про HiTechnic забыть — там много всего полезного! Надо в статью добавить. Никто не придумал, как FRANK расшифровать? Всю голову уже сломал.
    • +1
      Зачем расшифровывать? Разве что сокращение от Франкенштейн.
  • +1
    chipnn.ru — набирают даже мелочевку в пакетики, при покупке от 300р,
  • 0
    Для США есть хорошие магазины для электронных компонентов www.mouser.com/ и www.digikey.com/
    И, конечно, всегда есть eBay для США и России.
  • 0
    Касательно имени робота: очень-очень напомнило произведение Р. Хайнлайна «Дверь в лето».
    • 0
      В дедстве была одной из любимых книг. Может как-то навеяло…
  • 0
    Не упоминался ещё ekits.ru
    Мелочёвку там удобно. И не только.
  • 0
    Учитывая то, что процесс зрительного восприятия у людей многоуровневый (различные уровни наших нейронных сетей обрабатывают разные свойства изображения), то мне пришла идея использовать несколько плат BeagleBone Black или Parallela, соединенных иерархически. Каждая плата будет выполнять свой алгоритм, максимально утилизирующий мощность процессора и количество свободной памяти, передавая данные дальше по цепочке для дальнейшей обработки

    Какие именно алгоритмы? Почему нейронные сети? Зачем соединять иерархически?
    • 0
      Первый пример, который приходит на ум — это конечно зрение. Есть участки групп нейронов, которые отвечают за движения предметов в определенном направление, есть участки которые воспринимают только горизонтальные контрастные зоны итд. Это некий список биологических алгоритмов, которых достаточно много, но по сути они очень простые. Каждый такой алгоритм зависит исключительно от морфологических свойств нейронов в общей цепочки. Некоторые алгоритмы используют результат предыдущих как входные данные. В результате мы можем получить цепочку и местами иерархию простых алгоритмов, которые можно разбить по разным, довольно дешевым устройствам, чтобы каждая микросхема обрабатывала свой кусок информации и посылала его дальше по цепочке. Если уж совсем обобщить, то я собираюсь построить очень упрощенную электронную версию человеческого мозга из множества небольших микропроцессоров.
      • 0
        Мне кажется что несколько плат, будет неэфективно изза енергобюджета и затрат на сочленение и передачу данных.
        В обработке изображений я бы сказал две наиболее затратные задачи, первичная обработка картинки, лучше всего далать на DSP и распознавание образов, так как вы хотите нейронные сети, то возможно вам стоит попробовать делать это на FPGA.
        Теперь из решений которые позволят это сделать:
        1. www.finboard.org/ двоядерный DSP, заточен под обработку изображений, встроен готовый сенсор, большая библиотека готовых решений, из недостатков, «особенности» програмирования, небольшое комьюнити.
        2. www.em.avnet.com/en-us/design/drc/Pages/Xilinx-Zynq-7000-SoC-Video-and-Imaging-Kit.aspx — ну что я могу сказать дорогой монстр
        3. www.arroweurope.com/markets-solutions/solutions/vita-reference-kits.html — все ещё дорого
        4. microZed — zedboard.org/ — нужно покупать io-board или делать самому, Xilinx-Zynq-7000
        5. shop.adapteva.com/collections/parallella/products/parallella-16 — Xilinx-Zynq-7000, плюс 16-ядерное приданное, но как оно в реальности нужно пробовать.
    • 0
      И конечно же я не имею ввиду искусственные нейронные сети с точки зрения машинного обучения.
      • 0
        Почему не динамические системы, HMM, SVM, или какие-нибудь марковские поля? Почему нейронные сети?

        То что они чуть ближе к биологическим системам это не значит того, что именно так работает мозг человека. Да и в конце концов, почему алгоритмы робота должны быть подобны биологическим системам?

        Ну допустим, вы возьмете все же нейронные сети. Для каких задач будете использовать? Если это моделирование последовательностей, опять куча вопросов. Это рекуррентная сеть? Как тренировать, ведь обычный сильно BPTT лажает? Какая инициализация, сколько слоев, какие длины последовательностей, регуляризация?

        • 0
          Дело в том, что область моих изучений ближе к нейронауке, а не к машинному обучению. HMM отлично работает в очень узком кругу задач — например распознание символов. SVM, вроде позволяют лучше классифицировать при самостоятельном обучение, но все равно, оно не моделирует тех процессов, которые мне интересны. BPTT — самое близкое и очень похожие на то, как человек воспринимает пространственно-временые паттерны, но опять же очень далеко от биологического аналога. Думаю, что правильнее будет сформулировать вот так — Мне интересно упрощенные симуляцию определенных групп биологических нейронов (например во всей последовательности визуального кортекса). Я иду от обратного. Я не задаю вопрос, как при помощи нейронных сетей мне сделать автономного робота, а скорее, что будет делать автономный робот, если в нем будут вот «такие» сети? Руководствуюсь я, на данном этапе, исключительно работами вот этого ученого — www.izhikevich.org/publications/dsn/index.htm
          Недавно ездил к ним в офис, в Сан Диего — увидел там много интересного и понял, что мы много чему можем научиться у нейронауки. Если бы задача состояла в том, чтобы создать автономного робота с определенным набор задач, которые он обязан выполнять, я конечно же использовал BPTT.
          • 0
            Ну тогда вопрос — при чем здесь роботы? :)

            Если вы хотите понять принципы работы нервной системы, тогда нужно ей и заниматься. И к роботу приступить, лет через 50, когда хоть что-то станет понятно :). А что касается «моделирования мозга» — воссоздание динамики работы ЦНС еще ничего не дает. Я уже не помню сколько раз кричали о создании симуляции мозга крысы-кролика-человека. Ок, приблизительно воссоздали динамику активаций. Что дальше-то?

            Я бегло посмотрел книгу. Там описываются принципы работы нейронов нервной системы. Вы можете более конкретно описать, как это может в конкретном случае — например, при навигации, или распознавании объектов?

            • 0
              Роботы — это особенность того, как мне интереснее этот вопрос изучать.

              Симуляции динамики ЦНС — пока только смоделировали лишь один маленький кусочек кортекса (Blue Brain Project).
              Вот более конкретно, боюсь, я сейчас описать не смогу — получится слишком много, и к тому же, некоторые вопросы я еще изучаю. Распознание образов в ЦНС — достаточно изученная тема. Там, конечно, не все так прозрачно, но известны морфологические особенности (расположение EPSP и IPSP синапсов относительно постсинаптического нейрона хотя бы), которые позволяют распознавать особенности изображения и образов.
  • 0
    -

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.