Оглавление: Часть 1, Часть 2
Я являюсь руководителем Учебно-научного центра робототехники Тихоокеанского государственного университета и одновременно нашего местного небольшого хакспейса 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. На всем пути проект сопровождали близкие и дорогие мне люди, которые в разные периоды времени становились частью команды и помогали развивать проект. С кем-то наши профессиональные пути разошлись, но не могу не отметить их вклад. Пусть их имена почти никому ничего не скажут, но надеюсь им будет приятно. Это и Евгений Ледков, который сейчас работает в ДВФУ в дирекции образовательных программ, написавший первый бизнес-план того, чего еще по сути не было, и топивший за проект всей душой. И Павел Ефимов, также перебравшийся в ДФВУ, в лабораторию робототехники, который сделал просто очень много прямо или косвенно связанного с проектом. И Баир Дамбаев, вернувшийся на родину в Улан-Удэ и теперь обучающий детей учрежденном им же детском центре. И еще несколько ребят, которые просто качественно выполняли свою работу.
Комментарии (48)
GeMir
21.10.2019 14:43+1Очевидно, что MiRo и MIRO — не родня. Может быть ещё подумать о названии?
Есть ли аналогичные решения на рынке? Конечно есть. Но дорого.
Сколько стоит ваш? При условии предзаказа когда планируете начать рассылку комплектов или роботов?
Демо (видео) бы вам с хорошим освещением и чистым полом не помешало совершенно точно.
Или хотя бы набор качественных фото для прессы.
MIRO – это не только робот. Это развитые средства […] обучения.
Планируется ли приведение «уроков» в готовый для применения вид? Сейчас у вас есть набор «методичек» для самостоятельного изучения, но не готовые разработки школьных уроков.fbezruchko Автор
21.10.2019 14:58+1Предзаказ в магазине сейчас обозначен в 16 тысяч (кажется). Его там же можно оформит. До конца года планируем все произвести (в идеале в декабре начать отгрузку). Что касается курса прям для учителей — к сожалению не планируем. Мы пытались делать курс с дидактикой, но отошли от этой концепции. У всех свои потребности по продолжительности курса, длительности уроков, возрасту, начальному уровню обучающихся и т.д. В проекте будут мануалы, разделенные на несколько уровней. А как из этого собрать конкретный курс под свои задачи — пусть решают пользователи из числа педагогов и методистов.
Про видео на чистом полу — всему свое время). А на робозайца мы наткнулись совсем недавно. И знаете — да и ладно. Название менять не планируем. Привыкли. Злого умысла никакого не было (потому как имя придумали еще несколько лет назад).
Ссылка на сайт есть в тексте. Но на всякий случай: mirorobot.ruGeMir
21.10.2019 16:01+3А как из этого собрать конкретный курс под свои задачи — пусть решают пользователи из числа педагогов и методистов.
Как вы думаете почему множество проектов, подобных вышему, не добирается до стадии применения в школах?
Вы, возможно совершенно искренне полагаете, что создали решение, на самом же деле вы продаёте набор проблем (речь не программных и технических недоработках), которые ещё предстоит решить, потратив определённое количество времени. Да, всё это кажется «само собой разумеющимся», но увы, не в реалиях школьного образования (не кружков).
При всех ограничениях, недостатках (в том числе стоимости) Lego Mindstorms EV3 альтернатив ему пока, увы, не много.fbezruchko Автор
21.10.2019 16:12+1Я с вами полностью согласен! Однако, я не надеюсь на его массовое применение в сфере школьного допобразования, как минимум сейчас. С отдельными педагогами, с мотивированными учениками — другое дело. Платформа открытая и будет здорово, если кто-то на ее базе решит обозначенные вами дидактические и методические задачи, а заодно на этом заработает. Можете взяться, кстати, почему нет? Мы же все не педагоги. Технари с педагогическим опытом, но точно не педагоги. Ну и я буду только рад, если этот робот хоть как то втиснется в то пространство, где властвует LEGO — потому что в пространство, где отроду суждено существовать этому проекту, LEGO места вообще нет. LEGO и MIRO — это как акула и дельфин — вроде и то и другое плавает, но они принципиально разные.
trapwalker
21.10.2019 15:01+1Присоединюсь к вопросу. Какова получается примерная себестоимость робота включая и не включая 3d-печать. Для печати можно взять средние цены в fab-lab'ах.
Не думали адаптировать свою платформу под что-то утилитарное, вроде пылесоса. Уж очень форм-фактор располагает.
fbezruchko Автор
21.10.2019 15:11+1По себестоимости сейчас под рукой нет расчета. По памяти, если не брать упаковку, сборку — чисто железки с китайского маркетплейса и печать — в районе 8-9 тысяч.
Отвечая на второй вопрос. Любая такая адаптация сразу удорожит робота. Смысл проекта в том, чтобы каждый смог быстро собрать макет (программный и аппаратный) для своего утилитарного применения, будь то робот пылесос или мойщик окон. Ну и обучился по ходу некоторым технологиям с этим связанным.trapwalker
22.10.2019 10:49+1Раз уж вы не слабо так заморочились на стандартизации модулей, что, в общем-то, имеет смысл, наверно полезно было бы найти подходящую симуляционную платформу и сделать для неё модель вашего робота для отладки алгоритмов, так сказать, in vitro.
Если удастся сделать достаточно адекватную модель, то к развитию программной составляющей проекта сможет подключиться гораздо больше народу.
Можно даже организовать своеобразные соревнования алгоритмов на вашей платформе. Разрабатывается несложная полоса препятствий, публикуется её модель и полный SDK с симулятором в комплекте, разрабатывается регламент турнира и устраиваются отборочные соревнования с очным финалом на реальном полигоне в каком-нибудь спортзале.
Участвовать в таком мероприятии можно даже удалённо, если сделать процесс загрузки прошивки в робота максимально дружественным и автоматизированным.
Мне кажется это бы здорово позволило популяризировать как платформу, так и направление в целом. Может быть и спонсоры на такой замечательный проект подтянутся.fbezruchko Автор
22.10.2019 12:31Во! Именно такие мысли. Платформ то в видимом горизонте знаю для этого две: ROSовская Gazebo и VREP. И тому и другому нужна либо URDF модель, либо для VREP там вроде более простая оптимизированная obj или stl. С VREP у нас меньше опыта, поэтому вначале будет ROS, потом — VREP.
stalker1984
21.10.2019 18:07+2Ниша образования забита чуть более чем полностью во всём ценовом сегменте. А вот дешёвая автоматика для мануфактуры это интересно (хотя тут по всем фронтам работают). Пример такого проекта opentron который потеснил Текан и Бекман (там же и эппиндорф подтянулся) или теже UR-10 которые покупают когда нет денег на куку.
fbezruchko Автор
21.10.2019 19:13+1Ну вот все-таки не соглашусь. Мы делали обзор — дешевле чем за 450-500 уе (почти) ничего с возможностью вкатиться в ROS нет. Кроме того, как говорят, чтобы добиться успеха, достаточно сделать также, но чуточку лучше). Да и вообще пока не о коммерческом потенциале прежде всего думаю.
safari2012
21.10.2019 18:28+2А зачем нужна такая связка? Вам на esp8266 GPIO портов не хватает?
Если так, не проще их количество расширить через i2c?trapwalker
22.10.2019 10:59+1Вот, кстати, задался тем же вопросом, но в статье не увидел внятного объяснения.
Почему бы вообще не задействовать GPIO RPi для подключения неосновной периферии, а на долю ESP оставить только контроль аккумулятора, управления драйверами двигателей, одометры и самые базовые неотключаемые сенсоры, плюс низкоуровневый веб-интерфейс и канал для связи.
Вообще эволюционный процесс более менее угадывается, если учесть, что RPi изначально не было. Всё таки сделать on-board самопрошивку ESP по вайфай — это, видимо, очень непростая задача, если вообще возможная.
fbezruchko Автор
22.10.2019 12:39Прошивку esp по воздуху сделать можно. Изначально она и была в прошивке, от которой мы делали fork. Но чтобы сделать telnet сервер, который выступает беспроводным мостом с uart atmega, пришлось выпилить эту возможность — конфликт получался. Но если заморочиться, то думаю это возможно — чтобы и telnet остался и прошивка беспроводная. На esp и так хотим посадить контроль аккумулятора. А вот с одометрами врядли получиться — esp это китайский черный ящик. И как оно там работает по прерываниям, с учетом того, что надо еще и wifi обрабатывать — я лично не знаю.
Что касается gpio на малине, то как расширение каждый волен использовать эту возможность. Но нужно понимать, что это не реалтайм и это накладно (с точки зрения процессорного времени мощного soc, которому лучше бы чем то умным заниматься, а не ногами дергать).Gryphon88
22.10.2019 13:16А в чём необходимость возможности прошить всё по воздуху? Вывести два десятипиновых разъёма с крышкой-слайдером, чтобы можно было прошить или еsp, или armegу и кинуть в коробку USBAsp со шнурком-удлинителем. 200р к цене, на глазок, и какая-то экономия на разработке.
trapwalker
22.10.2019 15:09+1Каждый такой компромисс сам по себе, возможно, оправдан и, наверно, не критичен, но в целом привлекательность и универсальность платформы понижает, а порог вхождения чуточку повышает.
На тех же соревнованиях наличие автоматизированной или вовсе автоматической прошивки по воздуху — это большое дело. В таких вопросах любая автоматизация деплоя бортового ПО и его обновлений — это, иногда, вопрос жизнеспособности проекта, если речь идёт об обучении неопытных и еще не до конца определившихся в своём энтузиазме юниоров. Не Rocket Science прошивка по воздуху. Такие вещи и отличают серьёзные платформы от кустарных поделок.
Gryphon88
22.10.2019 15:22Прошивка по проводу малых микроконтроллеров выглядит более реалистичной, да и по комментариям с обновлением по воздуху были некоторые проблемы.
fbezruchko Автор
22.10.2019 15:55Только для ESP. Она там сидит в том числе, чтобы ооочень легко и удобно прошивать ATMEG-у и обеспечивать беспроводной же UART. Открываешь putty, вписываешь ip-адрес и 23 порт и вот тебе последовательный порт без всяких проводов. Ну а малина очевидно вообще не имеет трудностей со способами беспроводного взаимодействия. Когда планировали, очень хотели избавиться от проводов. ESP в текущей роли реально не надо прошивать. Но надеюсь и этот вопрос со временем победим.
Gryphon88
22.10.2019 16:15+1Можно попробовать шить и то, и другое с малинки, нужно только пару скриптов написать на стороне ПК и малины, чтобы среда сбрасывала на малинку hex, а тот уже заливал.
fbezruchko Автор
22.10.2019 17:05Тоже компромисс — сейчас юзер по человечески открывает Arduino IDE свою привычную, выбирает в списке портов IP-адрес и без всяких доп. изобретений шьет мегу. Не экспортирует hex, не отсылает его каким-то способом в малину. Но можно конечно продумать сценарий, возьму на заметку.
trapwalker
22.10.2019 18:01+1Да точно так же можно пробрасывать UART через малинку. Какая разница? Просто указываться будет IP малинки, а один из её портов будет перенаправлен на ногу GPIO чтобы дёргать Мегу.
Gryphon88
22.10.2019 20:30Я честно говоря не помню, как пойдут байты и как проверяется на ошибки, но помню своё волнение и недоумение, когда довольно давно у меня не заработал код уровня «поморгать диодом» — компиляция и загрузка успешны, диод не моргает. Оказалось, что то оторвался провод на программаторе, прям внутри разъёма, но не выпал. Так что мне больше нравится мысль «сначала скопировать hex на плату с проводным соединением с целевой, проверить, потом грузить».
PS Забыл, что в Arduino IDE нет post-build step, тогда пользователю может быть неочевидно.
sv_kozlov
21.10.2019 18:56+1Проект интересный. По мере чтения возник вопрос и не отпускал: а вы рассматривали вариант ESP32 вместо arduino + esp8266?
все коммуникации есть (usb, bluetooth+BLE, WiFi), подключить все те же датчики можно, прошивать по воздуху тоже можно. Модуль двухпроцессорный, ресурсов хватает.
Почему не упоминаете?fbezruchko Автор
21.10.2019 19:07+1Отвечу сразу вам и чуть выше safari2012. Esp8266 точно не хватит по портам и там всего один вход ADC. Нет, наверное что-то конкретное прям собрать можно, но про алтернативную функциональность уже думать не прийдется.
Что касается esp32, то тут все не так очевидно. Мы сами долго ломались в этом выборе. Но в итоге остановились на старой доброй Arduino. Причина, которая перевесела в итоге банальна — юзеров ARDUINO наверное на два порядка больше, чем esp32. И в конечном итоге, оправдали свой грех еще и тем, что при желании, мы сами или пользователи, смогут довольно быстро переписать часть arduino и esp8266 под esp32. Все-таки и то и другое живет в одной экосистеме — переписать уровень, назовем его hal, и все.
А каких то существенных преимуществ для проекта от esp32 мы не увидели. Возможно со временем и сделаем какуюто ветку. Но пока не в планах.nochkin
21.10.2019 19:42Arduino — это же платформа, а ESP32 — чип. Как одно сравнивать с другим?
Та же платформа Arduino портирована на ESP32.
Хотя, с другой стороны выбор железа не так критичен. Особенно если это собрано как одно целое.
В целом проект хороший. Удачи. Сам как раз нечто похожее сейчас делаю, но у меня немного цели другие.fbezruchko Автор
22.10.2019 01:38Спасибо! Тут я конечно говорил конкретно про mega328. Просто в публикации arduino-плату с mega328 так и называл везде arduino. Конечно, платформа одна, железки разные.
MEG123
21.10.2019 22:37Начинать в 19 году проект хоть чего-то, подразумевающего долгое развитие на 328 меге, — грех.
Через пару лет основное ваше занятие будет объяснение семиметровых костылей для поддержания старого кода и старого железа. А потом кровавый апгрейд на нормальное железо с потерей всей истории разработок.
И да, нормальные платформы с ROS в комплекте за деньги вдвое ниже ваших в целом доступны. Вы изобретаете велосипед. Ладно бы велосипед, кто, как говорится, не городил в своё время робота стиля «тазик» с ардуиной?! Но сейчас то какой смысл делать это на столь древнем и маломощном железе, когда железо за гроши есть любое до 64 бит включительно. И если захочется, то и с поддержкой arduino IDE. У вас же даже примитивный робот будет состоять из аж трёх не очень-то связанных процессоров, и основная тяжесть в его жизни будет подружить всех троих друг с другом. Пробовали задать себе вопрос «зачем такие грабли продолжать за собой таскать»?fbezruchko Автор
22.10.2019 01:21Какую бы вы взяли аппаратную базу? И можно пример платформы с ROS недорогую — включим в обзор себе, может чего пропустили.
MEG123
22.10.2019 01:58+1какой смысл сейчас об этом думать если вы уже вон тираж изготовили…
А так-то, на ум сразу приходят камни от TI, где и ARM в качестве основного мозга, не 8 как у 328й, а целых 32 бита, не 20МГц а целых 1000МГц, и пара сопроцессоров реального времени, документация на это всё, видеокарта худо бедно даже 3D умеющая, дистрибутивы последних версий и не только Linux, и ROS работает из коробки.
И платы за 5к рублей на этом есть с блютузом, wifi, драйверами движков, сервомашинок и энкодеров встроенными уже на плату, ну и зарядкой лития 2S тоже не обделены. Акселерометр, гироскоп, магнитометр, барометр и все возможные интерфейсы на GPIO тоже имеются. 5к рублей, повторю. А есть и подешевле но чего-то не будет из вышеперечисленного.
А если страсть к arduino IDE, то куча же плат от ста рублей и до сотен баксов на STM имеется. Хочешь с wifi, хочешь с драйверами движков или ещё чем. Сотни их. Правда про ROS тут придётся забыть. Зато по цене от ста рублей вы получите камень на порядок если не более мощнее чем сейчас у вас есть. Ну или чудесная teensy 4.0 вышла с камнем Cortex M7 на 600МГц! Чуть дороже тысячи рублей. Вот её хватит даже видеопоток на хост засылать и ещё колёсиками двигать останется. ArduinoIDE для любителей к ней тоже прилагается.
Вы вообще обозревали рынок железа перед тем как госфинансы начинать осваивать?fbezruchko Автор
22.10.2019 03:13Вы как то все в одну кучу сгребли. Разделим весь аппаратный стек на уровни. На верхнем уровне у нас Raspberry. ОС нереального времени, а значит о подергивании ножками с управляемым таймингом можно забыть. Плюс, тратить ресурсы такого процессора, чтобы в программном режиме управлять дешевыми сенсорами? Это все равно что микроскопом гвозди забивать. На малине крутиться ROS, OpenCV. Это самый опулярный одноплатный компьютер на сегодня с самым большим сообществом. Плюс, даже если выходит новый одноплатник с суперкамнем, он на 80% будет выполнен в формфакторе малины с точностью до монтажного отверстия. Linux — он и в африке Linux (переносить этот уровень не представляет серьезной проблемы).
Спускаемся на уровень ниже. Там у нас atmega328. Старая, ограниченная, но опять же с огромным сообществом, есть в каждой дыре. Там не нужны мегагерцы и мегабайты, чтобы ножками дергать и прерывания от энкодеров обрабатывать. Но там настоящий микроконтроллерный реалтайм (ну потому что ОС там очевидно вообще нет). И ESP для всего этого дела, чтобы обеспечивать удобную беспроводную прошивку и отладку куска с Atmega328.
Вы говорите, что есть прям платформы под ROS вдвое дешевле, но в пример приводите плату. Одну только плату. Я же называл цену и себестоимость на робота целиком. Покажите робота с софтом и ROS дешевле.
Ну и самое главное. Если бы мы разрабатывали микропроцессорную плату новую, то безусловно бы размышляли в вашей логике — выбирали бы камни. Но мы делаем платформу на базе плат и размышляем в логике «чтобы нашлись последователи — платы должны быть популярны, распространены». Ничто на сегодня не способно конкурировать с этой троицей по этому параметру. Разве что stm поставить в место atmega. Но как верно заметил nochkin — при необходимости переписать там все легко. Там весь код, опять же, из этих же соображений — весь на уровне платформы arduino — там скрыты в подвале все aппаратные особенности (исключение лишь пожалуй прерывания — вызовы прийдется переписать).MEG123
22.10.2019 04:13С малиной вопросов нет, там всё понятно и претензий к ней быть не может, надоело — купили новую малину помощнее и продолжили с того же места.
А вот уровнем ниже у вас абсолютно поперечная малине мега. Со своими клопами. Т.е. чтоб ваш робот освоить надо будет и в малине разобраться досконально и мегу поднять, а шить её вы предлагаете вообще третьим камнем который по сути только для этого и воткнут, не находите весь зоопарк излишним?
Дальше, мегой хорошо управлять парой моторчиков да и то, сложные алгоритмы придётся откинуть на малину, мега их не потянет, а ей ещё датчики держать в тонусе. Добавите пару серв и всё, мега захлёбывается, агрегат виснет. А у вас уже под неё весь софт и куча железа сверху уровнем висит. Да, давайте весь стек из трёх плат заново пересобирать и дружить. нормально? Это только кажется что ножками дёргать и энкодеры обрабатывать ничего не надо, как только режим работы будет чуть сложнее чем прямо медленно ехать — сразу поймёте что сил меге не хватает даже шимить прилично в пару движков.
Да я привёл плату, но не в двое, а втрое дешевле. На ней есть и кит сразу ездящий и имеющий ROS на борту, а так же всю ту кучу железа что я перечислил в подарок, у вас эти датчики отсутствуют и будут за доп деньги, т.е. их не будет почти ни у кого. По сегодняшнему курсу кит стоит 8к рублей. Оно ещё и само балансирует, т.е. явно посерьёзнее выглядит. И аккумулятор к нему приложен. И моторы. всё в той сумме. И это только один вариант, явно есть и ещё, мне просто не интересно было копать, я же не собирался с нуля разрабатывать «своё уникальное лучше всех».
Не надо разрабатывать платы, сейчас их реально сотни. Вы выбрали «троицу» и решили все три в кучу собрать. Ничего что ваш робот сразу втрое сложнее стал, надо быть крепким энтузиастом чтоб сразу в трёх абсолютно разных платах с разным софтом разбираться.
Успехов вам с «переписать всё легко». Вам надо поддерживать вместо одной версии софта — три разных прошивки трёх плат. И ещё следить чтоб разные версии друг друга любили, все втроём. Замена любой из этой троицы будет отличным квестом в будущем.
Данные с датчиков будут загадочно путешествовать сначала на мегу, где и без них сил впритык моторами крутить, с неё на ESP? оттуда по воздуху в роутер если я правильно уловил суть вашей задумки, а с него на малину и там уже попадать в ROS. Обратные указания сервомеханизмам пойдут такой же дорогой. Куча мест где всё это будет глючить, задержка данных тоже получится отменная.
При этом от датчика до малины по прямой пару сантиметров. Инженерный дизайн устройства — так себе.fbezruchko Автор
22.10.2019 04:20Ладно, это холивар уже). Каждый при своем). Но про маршрут немного не так. Датчик к меге, от меги по i2c в малину. И в обратную сторону также.
safari2012
23.10.2019 15:46+1Ну, к стати, мегу можно шить с той же малины. но об этом, где-то уже писал кто-то в комментариях. Благо, малина со встроенным wifi давно продается.
nochkin
22.10.2019 01:59При определённом подходе к софту железо уже не так критично. Один и тот же код можно будет почти без изменений запустить на более новом железе.
MEG123
22.10.2019 02:06только вот код из под ArduinoIDE написанный под AVR не удастся уже никуда применить. Померло оно от старости. Потому и удивился, зачем новое начинать на этом. Всё было хорошо в своё время.
nochkin
22.10.2019 02:08Код на Arduino может быть достаточно универсальным. Мы же про код говорим, а не про бинарники.
MEG123
22.10.2019 02:24Код конечно универсальный. Но он рассчитан на имеющееся железо. Куда и зачем переносить код от 328 меги? на ARM? какой смысл городить этого франкенштейна?
какой смысл написанный для 8 бит с жёсткой экономией всего чего можно (потому что ресурсов в меге прямо скажем мало было даже по меркам десятилетней давности) код вообще переносить, он весь будет из компромиссов и завязан на AVR если там сложнее чем помигать диодиком.
Получив в распоряжение несколько сот или тысяч МГц в новом проце, память мегабайтами, а то и гигабайтами или божественные счётчики от STM или сопроцессоры реального времени от TI, какой вообще смысл старый код от 328 даже пытаться переносить? Придётся всё писать с нуля так тупо быстрее будет и заработает сразу, а не когда-нибудь. Ну так вот уже можно начинать, 328 мега была отличная лет 20 назад, лет 10 назад была уже так себе, лет 5 назад только по привычке можно было использовать, а сейчас уже только под принуждением. И вся кодовая база написанная для неё увы помрёт вместе с ней. Как у Интела, который тянет x86 от динозавров, тут не выйдет, некому тянуть, Atmel отмучалась, а Microchip-у это не впилось никуда чужую баржу с ненужным хламом тащить забесплатно.nochkin
22.10.2019 02:58+1На ту же ESP можно перенести. Пусть это и не ARM, но почти как ARM в данном аспекте. Почему если «ARM», то сразу «городить»?
Там у них от кода требований как кот наплакал изначально. Почти любого популярного контроллера хватит.
То есть, один и тот же код можно сделать так, что бы он работал одинаково хоть на меге, хоть на ESP. Не надо будет с нуля писать.
Кстати, на многие Microchip МК тоже Arduino перенесли. Там тоже код особо менять не надо.
Потому Arduino и хорошо, что можно в некоторых случаях достаточно легко абстрагироваться от железа. Тут вполне можно сделать как раз этот случай.
Они же не используют GPIO на Pi. Тогда вообще Arduino не нужно, но если взять другой SoC, то надо будет почти с нуля переписывать.MEG123
22.10.2019 03:46городить не потому что ARM а наоборот, код который напишут под AVR хоть и в ArduinoIDE потом переносить придётся на ARM всё равно. И это обман что можно будет перекомпилить и наслаждаться, так не выйдет даже если там всего два мотора и пяток датчиков. Переписать нужно будет основательно. А потом с ESP придётся перелезть дальше, ещё раз переписывать, потому как и её не хватит если там чуть датчиков подкинуть и чтоб всё это крутилось без багов.
fbezruchko Автор
22.10.2019 03:51Никакого обмана). Приведите пример, когда могут возникнуть ерьезные трудности с переносимостью? Из вашей практики.
nochkin
22.10.2019 03:55Простой код переписывать не надо, в этом как раз и дело.
Но тут явно каждый останется при своём мнении. Наверно, и к лучшему. Каждый ведь пишет код по-своему.
zoldaten
22.10.2019 16:15+2Будет здорово, если мы с авторами воплотим их результаты на MIRO.
Спасибо, что позвали. Воспользуюсь, чтобы добавить свои 5 копеек.
Выглядит красиво, на ощупь, наверно, тоже хорош. Безусловно, в текущих реалиях, когда покупатель гонится за внешним видом, но не начинкой, будет иметь определенный успех.
Теперь 5 копеек.
Попытка охватить слишком широкую аудиторию, с маркетинговой точки зрения, может плачевно закончиться. Для школьников связка esp+arduino+raspberry может оказаться тяжелой ношей, для энтузиастов, к которым скромно отношусь, пока слабовато.
Почему слабовато?
Конструктив.
Многократно приходится что-то выпаивать-впаивать, подключать-отключать — постоянно лезть в корпус с жалом неудобно. Даже если он модульный. Куда вешать доп датчики? Лидар куда прикрутить? Крепежи raspberry и держателей аккумуляторов под болт m3 не так длинны для пластика на картинке. Куда положить повербанки для raspberry? На кронах для движков можно разориться — лучше 18650, с защитой от переразряда. Колеса с датчиками Холла (они?) (Кстати, почему никто не производит колеса !?) хороши, но надо предупреждать, что там два вывода вместо одного и энкодеры отлично горят, если их повесить на 5V ардуино вместо 3,3. Клиренс днища надо поднять, а то даже ковер не по силам будет. Как поменять колеса на omni-wheels? Это уже следующее слово. Дифференциал, видите ли, медленно разворачивается.
*Вообще, в этом плане хорош советский конструктор, из которого можно все, что угодно слепить, только успевай изолентой обматывать металлические части.
esp8266, которых целое семейство, очень активно развивается. В связке (raspberry+arduinо) он не нужен. Шить arduino можно удаленно с raspberry.
Многие здесь критикуют ардуино. Захлебывается, мол. Со всей ответственностью заявляю — не захлебывается ) А если серьезно, то линейка активно развивается store.arduino.cc/usa и для старта весьма неплохой вариант. Кроме того, спалить ардуино, это спалить 300 руб., не более.
*вряд ли стоит гнаться за производительностью на самом роботе. Практика показывает, что без связки робот-desktop(laptop) сложно.
**хочется что-то еще. Давайте продумаем превращение его в паука, робокота, руку сверху ему поставим, telepresence из него сделаем. только не робот-пылесос.
Документация.
Хотелось бы, чтобы образы под raspberry, прошивки под arduino, lessons лежали в одном месте в будущих релизах (как и ссылки на них в посте). В lessons побольше бы картинок. А сами lessons хороши бы с вау-эффектом. Как у Adriana (специалист по opencv) — смотрите, можно сделать так, сделаем! Вряд ли кто-то вдохновится сборкой opencv, которая на raspberry без make -j4 (у вас make) может занять несколько часов.
Поддержка.
Если робот на руках и пользователь застрял на этапе Unit 4… предположим. Куда и кому он пишет? В той же Robot Ignite Academy сидят товарищи, которые худо-бедно, с задержкой день-два, но отвечают на вопросы. Поддержка первостепенна. Не каждый готов перепахивать stackoverflow, а уж тем более выправлять чьи-то мануалы (это вам, Robot Ignite Academy).
Не стоит всем этим сразу загружаться. Это практический взгляд со стороны, который, надеюсь, поможет.
Просто не бросайте проект, зная, что роботдинамекс уже выпустил собаку.
*Путаница с miro из ROS может помочь с продвижением, но и оказать медвежью услугу в перспективе.fbezruchko Автор
22.10.2019 17:43Спасибо за такой крутой коммент! Сразу скажу, что по конструктиву там вообще тьма компромиссов. И не факт, что они оптимальные. Многие думают, что робототехника — это про проектирование роботов. Но это не так). Робототехника — это про решение утилитарных задач с помощью роботов (да я капитан очевидность). Для каждой задачи лучше подходит свой робот. Со своим шасси, со своим манипулятором, формой, массой и пр. Не бывает вот прям универсальных роботов. Задача этого проекта — быть входом для тех, кто или выбирает свою первую тележку на ардуино, или китайскую тележку уже собрал и хочет большего. Или решает утилитарную задачу, но нужно на чем то быстро собрать макет. Отсюда все компромиссы: там никакие не датчики холла — а обычные щелевые энкодеры на китайских движках, как у вас в статье.
Акум там сейчас как раз спаренный 18650. Но есть место добить до Li-Po примерно на 2500 мАч. Не густо, но все же.
Уроки по малине там уже outdated, готовим обновление — этой всей сборки там не будет. Ман по приготовлению образа будет отдельным документом для тех, кто захочет узнать как этот образ готовить. Для всех остальных будет готовый образ.
Что касается поддержки, то наша поддержка в ближайшей перспективе будет опираться на очевидный факт: это в первую очередь pet-проект, тут не понятна до конца ни ценность, ни бизнес модель. Со временем это все наверное устаканится, мы соберем обратную связь, посмотрим на потребности пользователей, присоединившихся разрабов. и тогда что-то станет более понятно. Кастомер дизайн, кароче. Неспешный. Но проект бросать точно не собираюсь. Он мне в удовольствие. И уже довольно давно.
Про Robot Ignite Academy я вообще первый раз слышу. Как это работает?
«Давайте продумаем превращение его в паука, робокота...» — есть желание на робокота. Несмелый план. Но не хочу всех дергать и себя пока не получу из того что есть некоторый более или менее законченный девайс. А потом можно и робокота. В команде один из ребят имеет опыт в пауках и мы с ним обсудили по поводу робокота. Т.е. оставить ту же примерно программно-аппаратную модель, но сделать другого робота. С учетом уже большого количества наработок — время разработки должно сильно сократиться. Симпатичен opencat в первой, неопубликованной версии, но хочется еще круче.
Adrian, ода, он крут. Я в блокнотик себе записал «написать ему письмо». Мы ему даже робота готовы выслать).
*вряд ли стоит гнаться за производительностью на самом роботе. Практика показывает, что без связки робот-desktop(laptop) сложно. — это мы уже тоже проходили. rviz все-равно на десктопе, как не извращайся.
«Кстати, почему никто не производит колеса !?» — особенно огорчает отсутствие нормальных опорных омни колесиков. Мы даже свое изобрели, но пока в качестве эддона.
«Шить arduino можно удаленно с raspberry» — компромисс, дело вкуса. Мы в малине вообще X-ы не ставили, а заморачиваться командной строкой ну такое себе для пользователя.
Вообще, спасибо гигантское за такой комментарий!
zoldaten
23.10.2019 08:58Robot Ignite Academy — иностранная платформа обучения, подобная Cousera, но только о ROS. Обучение самостоятельное, но доступен формат вопрос-ответ тьютора(учителя). Много интересного. Также они ведут канал на ютюбе.
*Присоединяйтесь к российскому ROS сообществу. В телеграм — rosrussia meetup 2019.
trapwalker
23.10.2019 09:14Мы в малине вообще X-ы не ставили
Так и правильно. На кой леший роботу на борту GUI?
а заморачиваться командной строкой ну такое себе для пользователя.
А вот тут вы совершенно напрасно пренебрегаете командной строкой.
С ней новичку даже проще, поскольку легко явно описать набор команд и ожидаемый результат. С GUI придётся что. скринкаст записывать? Легко промахнуться или что-то забыть.
Прелесть командной строки в том что можно сделать скрипты для всего и всё сведётся к запуску пары команд.
nemilya
Супер проект! Спасибо за рассказ
fbezruchko Автор
Спасибо. Буду описывать его здесь потихоньку).