Хочу рассказать о своей работе и нашем коллективном pet-проекте – мобильном indoor роботе на базе связки микропроцессорной платы ARDUINO (ATMEGA328 – кому как понятней), ESP8266 и Raspberry Pi. Мы с товарищами назвали его MIRO — от «Mobile Intelligent RObot».
Я являюсь руководителем Учебно-научного центра робототехники Тихоокеанского государственного университета и одновременно нашего местного небольшого хакспейса EastMaker. Наш центр при университете существует уже пятый год. Формально, мы структурное подразделение университета, имеющее два основных вектора деятельности (неожиданно): учебный и научный. Научная деятельность связана пока в основном с имеющимся багажом – систем навигации и связи для подводной робототехники. Еще до появления нашего центра, при кафедре Вычислительной техники существовала Лаборатория интеллектуальных технологий и систем («ЛИТиС») – совместная лаборатория с Институтом проблем морских технологий ДВО РАН. И существует до сих пор. При создании центра, его научным руководителем стал глава этой лаборатории, и Центр робототехники стал ресурсной базой для ЛИТиС-а.
Вторая составляющая деятельности – образование. Учебный процесс в Центре строиться в рамках проектной деятельности студентов и школьников (к ряду проектов мы привлекаем школьников города). Работают над проектами как студенты бакалавриата, так и магистратуры практически всех технических направлений.
Наш центр межкафедральный, не привязан ни к какой кафедре. Проекты, исследования и разработки на нашей технической базе могут выполнять студенты и сотрудники всего университета. Лишь бы было желание и хватало этой самой базы.
Одновременно с этой деятельностью, мы с друзьями создали частную школу робототехники и прикладных инженерных знаний для детей в г. Хабаровске. И для образовательной деятельности в школе и в Центре робототехники почти сразу стало понятно, что необходим какой-то курс молодого бойца, раскрывающий основы по следующим областям:
- основы микропроцессорной техники;
- простые сенсоры (принципы работы, особенности использования);
- основы технологий обработки материалов (фрезеровка, лазерная резка, 3D-печать);
- сценарии управления и несложные алгоритмы из сферы мобильной робототехники.
Тогда мне казалось очень правильным, что объектом этого курса должен быть какой-то недорогой ARDUINO-робот.
Начали смотреть на то, что представлено на рынке. И обнаружили следующую странность. Были действительно хорошие ARDUINO-роботы и комплекты. Зачастую довольно дорогие. Но у них как правило было два больших минуса:
- использование некоего «самобытного» железа (зачастую – та же самая ARDUINO, но в авторском исполнении, предполагающая покупку плат исключительно у одного производителя);
- отсутствие образовательного материала (это вообще интересная штука – люди делают отличные наборы и комплекты для образования, но совершенно не заботятся о том, чтобы выпустить элементарные вещи: методички, уроки, рабочие тетради (если необходимо)).
Так почти уже четыре года назад появился MIRO. Но только появился. Со временем логика этого проекта полностью изменилась.
Изначально мы создали именно образовательный комплекс на основе нашего робота. И не было там никакого ESP и Raspberry Pi. Были ARDUINO и Bluetooth-модуль. Вот самая первая тележка:
С этой тележкой мы знали, чем занять студентов. Ну и даже на организованном нами фестивале РОБОМЕХ в Хабаровске собрали небольшой робофутбол для посетителей.
Через какое-то время мы сделали вторую версию, которая ничем принципиально не отличалась, кроме формы и некоторых улучшений в компоновке. На этом этапе мы также совсем отказались от 3D-печати – все держатели и кронштейны были выполнены из двух листовых материалов (акрил и фанера) методом лазерной резки.
У нас уже была отличная иллюстрированная инструкция по сборке комплекта, какая-никакая образовательная программа с методичками и рабочими тетрадями, и мы активно тренировали школьников и студентов, проводили мастер-классы на днях открытых дверей и городских праздниках.
Примерно к этому времени рынок наводнился разными решениями на эту тему. А возможности ATMEGA328 в реальной робототехнике, даже для образования стали слишком незначительны. Тогда и родилась новая концепция indoor робота MIRO, представляющая собой открытое решение для быстрого макетирования indoor и outdoor мобильных роботов с достаточно функциональным железом, позволяющим окунаться и в OpenCV и в ROS и во всякие IOT.
Итак, суть сегодняшней концепции MIRO.
Во-первых, MIRO – это небольшой мобильный робот, с полностью открытыми исходниками (с точностью до используемых готовых серийных компонент и плат – если производитель не предоставляет исходников, то и у нас их нет), распространяемыми по лицензии CC Attribution Share Alike 4.0.
Корпус робота выполнен методами 3D-печати и лазерной резки. После первой версии робота, стремясь снизить стоимость, мы вообще не хотели применять 3D-печать в технологии производства. Но намучившись с листовыми материалами во второй версии, я полностью отказался от идеи снижения стоимости в ущерб качеству и функциональности. И сегодня, MIRO на 90% выполнен с использованием 3D печати. Гораздо более надежен механически и приятен в эксплуатации. Единственное стремление, которое мы поддерживали в процессе проектирования корпусных деталей – простота печати. Хотелось избежать сложных поддержек и «кривых» участков – чтобы даже на дешевом 3D принтере получался хороший результат. Забегая вперед скажу, то мы этого добились – контрольная печать без всяких модификаций на абсолютнейшем ширпотребе ANET A6 это подтвердила.
MIRO имеет некоторую модульность.
Передний сенсорный модуль можно достаточно легко заменять без разборки робота. Кроме того, конструкция робота выполнена так, что практически все компоненты легкодоступны и легко заменяемы. Стремились именно к удобству эксплуатации и модификации. Об этом расскажу чуть позже.
Во-вторых, MIRO – это развитые программные средства:
- API робота для ATMEGA328 с библиотекой коммуникации с Raspberry Pi (пока в процессе разработки) или с хостом по UART (а вот это готово).
- Примеры уроков и программ от самых простых вращений моторчиков до технического зрения с передачей видеопотока или результатов обработки видео на хост. В ближайших планах сделать пачку примеров под ROS.
- Готовые образы Raspbian с предустановленными библиотеками и ПО, виртуальные машины VirtualBox также с предустановленным ПО для разработки.
Кроме того, мы пишем подробную карту производства робота, чтобы любой желающий смог его собрать дома/в кружке/ЦМИТе/вузе.
В данным момент на бета-тестировании сайт с возможностью публикации своих проектов для MIRO. Пока хостить файлы там возможно только небольшого размера, но со временем, я думаю, раскошелимся.
Сейчас будет цикл статей про MIRO, в котором я расскажу о нем подробнее, со всеми деталями.
Скажу честно, объем материалов уже такой, что мне сложно поспевать обновлять репозитории вовремя (это все-таки не основная работа). Из-за этого, в материалах могут быть ошибки и упущения. Плюс, у меня нет абсолютно никакого опыта сопровождения opensource проектов. Надеюсь в ближайшее время всему этому научиться.
Также в планах перевести все материалы на английский. Это отдельная большая работа для нас и просто до сих пор не успели этого сделать.
Часть материалов из цикла статей будут дублировать мои же инструкции из репозиториев, но местами они будут более подробными.
Сегодня пробежимся по аппаратной части робота.
В основе робота MIRO лежит связка из трех популярных микропроцессорных систем:
- ARDUINO (на базе Atmel ATMEGA328, ядро AVR)
- ESP8266
- Raspberry Pi (какая именно версия сейчас не важно).
Робот MIRO питается от аккумулятора с номинальным напряжением питания 7,4В (Li-Ion 2S). Для получения 5В, требуемых большинству микропроцессорных устройств робота используется преобразователь на микросхеме LM2596S.
В базовой комплектации, всеми датчиками и исполнительными устройствами управляет ATMEGA328.
ESP8266 позволяет осуществлять беспроводное программирование чипа ATMEGA328 из среды ARDUINO IDE, а также служит мостом SERIAL-WIFI, позволяющим обмениваться данными с последовательным портом (UART) ATMEGA328 по беспроводному каналу по протоколу TELNET. Очевидно, что ATMEGA328 и ESP8266 соединены по линиям RX/TX.
Кроме того, для осуществления беспроводной прошивки чипа ATMEGA328, линия RESET этого чипа соединена с линией GPIO2 микроконтроллера ESP8266.
Таким образом, даже без Raspberry Pi, MIRO содержит в себе развитую и удобную архитектуру для разработки.
В базовой комплектации робота с передним модулем SENS1 к микроконтроллеру ATMEGA328 подключаются следующие датчики и устройства:
- Цифровые датчики одометров (левого и правого колеса)
- Драйвер левого и правого двигателей на микросхемах L9110S
- Ультразвуковой датчик линии HC-SR04
- Фоторезистивные датчики освещенности (левый и правый)
- Пьезоизлучатель звука
- Светодиоды передней подсветки (левый и правый)
- Датчики линии (левый, правый и центральный)
- Серводвигатель управления наклоном камеры
Устройства 3-7 являются опциональными и могут быть заменены на какие угодно датчики или устройства. Вы можете спроектировать и изготовить свой собственный передний модуль взамен предложенного модуля (он в документах называется SENS1) со своими задачами и устройствами.
Устройства 1, 2 и 8 являются обязательными для функционирования робота и не предполагают отключения. Оно и понятно – без драйверов двигателей робот не сможет перемещаться, а без датчиков одометрии вы не сможете ничего сказать о характере перемещения робота и не сможете качественно управлять его перемещением. Ну и подвес камеры (если его можно так назвать) – пожалуй тоже неотъемлемая часть.
Плата Raspberry Pi подключена к ATMEGA328 по интерфейсу I2C (TWI). К плате Raspberry Pi подключена камера Raspberry Pi Camera v1.3.
Хочу обратить внимание на те серийные комплектующие, которые сейчас использовались в MIRO. В основном мы ориентировались на одного китайско-российского производителя (в карте производства, в перечне серийных комплектующих можно подсмотреть название компании). Сделано это было отчасти специально. Всяких модулей пищалок, свистелок и прочего ширпотреба очень много у китайцев. Эти же ребята представляют хоть какой-то бренд с номенклатурными обозначениями. И можно хоть как-то обозначить, что конкретно за железка должна стоять в том или ином узле робота. Хотя и торгуют этим же ширпотребом за небольшие деньги. Я присматривался к ним и мне импонировало, что это вроде как российская компания. И тот посыл, который они публикуют на своем сайте, он вселял надежды, что ребята «за все прекрасное». В реальности видимо, все немного не так хорошо. Принципиальная схема как минимум на плату UNO+WiFi этого производителя не выдерживает никакой критики.
Она не полноценна и выполнена с множеством ошибок. По ней мы не смогли определить все компоненты платы, что куда подключено.
В самой плате проектировщиками зашит один бесполезнейший баг/фича: единая цепь сброса ATMEGA328 и ESP8266. Это означает, что на этой плате невозможно организовать беспроводную прошивку ATMEGA328 через ESP8266 – при попытке ESP8266 сбросить ATMEGA, она дергает свою же линию сброса. При этом, на плате есть отдельная кнопка для сброса ESP и общая кнопка сброса всех контроллеров разом. Более того, на плате распаян DIP-переключатель на 8 линий. И восьмой переключатель не задействован. В итоге, я разорвал линию сброса ESP и с помощью монтажного провода сделал возможным ее подключение к общей цепи сброса с помощью этого восьмого переключателя. Т. е. если переключатель 8 выключен, сбросить ESP можно только по нажатию на кнопку ESP RESET, и сигнал на общей линии RST или нажатие на общую кнопку сброса не приводит к сбросу ESP. При включенном переключателя – все возвращается в состояние как было до модификации платы.
Осталось разобраться как разорвать цепь сброса. Я нашел наиболее безболезненное решение.
- Выпаять диод D3 возле разъема для подключения внешней антенны.
- Впаять конденсатор между ножкой выпаянного диода (3,3В на ней) и землей.
Теперь, при нажатии на кнопку сброса, ESP не сбрасывается.
Вспомнив про посыл на сайте, я написал им предложение все-же поправить эту «особенность». Но мне даже ничего не ответили.
Не хотелось делать свою железку вообще, но видимо придется. Тоже под открытой лицензией.
Есть альтернативное решение – обычная Arduino UNO и вот такая плата расширения (или что-то подобное).
Но тут несколько неудобно с прошивкой ESP. Впрочем, прошивка ESP в ее нынешней роли в MIRO – достаточно редкая процедура.
Ну и в любом случае необходимо соединить GPIO2 ESP8266 с линией Reset контроллера ATMEGA328 для беспроводной прошивки. Можно выбрать и другой GPIO, но в коде MIRO прописан именно GPIO2 (или код придётся поправить). Вначале по неопытности выбрали первое что попалось под руку, как говориться, – GPIO0. Но быстро поняли свою ошибку – для прошивки ESP эту перемычку приходилось отсоединять/выпаивать, потому что линия GPIO0 в ESP используется в процедуре прошивки.
Общий вывод: при сборке MIRO можно использовать любые платы любых производителей, которые позволяют выполнить требования схемы коммутации.
Полная коммутационная схема робота MIRO представлена в одном из упомянутых репозиториев.
Сразу банальный вопрос. Есть ли аналогичные решения на рынке? Конечно есть. Но дорого. И, кстати, ребята, которые публикуют уже целый цикл статей здесь про тележку на ROS, тоже отметили отсутствие более или менее доступного «железного» решения. Будет здорово, если мы с авторами воплотим их результаты на MIRO.
Теперь в целом про планы. На разработку всего и вся перед третьей версией проект получил поддержку гос. финансирования. А именно Фонда содействия инновациям. За что ему огромное спасибо. Без этих денег мы бы, наверное так и оставили его при себе и в совсем ином качестве. Очень хочу, чтобы робот стал платформой для макетирования, обучения и экспериментов, который положит начало некоему реальному взаимодействию ЦМИТ-ов (FabLab-ов, хакспейсов) в нашей стране. Стал своеобразно точкой приложения совместных усилий, где вклад каждого становится преимуществом всех. Отчетливо понимаю, что рассчитываю на единицы команд, кому он станет интересным. Но даже такое взаимодействие – это будет успех. Меня очень воодушевляет как это получается на западе – как на практически пустом месте и инициативе несколько скучающих рождается огромная экосистема. А вдруг получится? Точек приложения усилий в нем предостаточно.
Текущий roadmap разработки, каким я его вижу, лежит на канбан-доске на GitHub.
Мы также выработали некоторую политику развития проекта. Любая платформа предполагает определенные ограничения, «флажки». Без них все превращается в анархию, и платформа не возникает, а если возникла, то живет не долго. На том же GitHub лежит документ, что-то вроде манифеста развития платформы. Со временем он почти наверняка измениться – опыт просто скорректирует как удобно всем (пользователям, разработчикам).
Что касается коммерческого потенциала, то он у проекта безусловно есть, и мы с командой также постараемся его использовать. Как? Самое простое – производство и реализация комплектов для сборки. В конечном итоге – это еще и способ расширения аудитории пользователей, которым не сильно хочется заморачиваться производством. Не долго думая, было решено уже сейчас открыть предзаказ готовых роботов на сайте.
Спасибо всем за внимание и буду рад конструктивным вопросам и инициативам, помогающим в развитии проекта.
Следующая статья будет посвящена механике, проектированию и производству корпуса.
Несколько фоток роботов.
P.S. На всем пути проект сопровождали близкие и дорогие мне люди, которые в разные периоды времени становились частью команды и помогали развивать проект. С кем-то наши профессиональные пути разошлись, но не могу не отметить их вклад. Пусть их имена почти никому ничего не скажут, но надеюсь им будет приятно. Это и Евгений Ледков, который сейчас работает в ДВФУ в дирекции образовательных программ, написавший первый бизнес-план того, чего еще по сути не было, и топивший за проект всей душой. И Павел Ефимов, также перебравшийся в ДФВУ, в лабораторию робототехники, который сделал просто очень много прямо или косвенно связанного с проектом. И Баир Дамбаев, вернувшийся на родину в Улан-Удэ и теперь обучающий детей учрежденном им же детском центре. И еще несколько ребят, которые просто качественно выполняли свою работу.
Автор: fbezruchko