Начав изучать ROS (Robotic operation system), сначала поражаешься, как тут «все сложно», от количества информации про топики, ноды,actions голова идет кругом. И, первое желание — вернуться в управлении роботом на старые добрые скрипты. Но нет. Каждый взрослый мужчина должен собрать для мужчины поменьше что-то, что бы ездило, мигало, пищало. В качестве платформы была выбрана ROS, так как все же это следующий шаг в развитии роботов в мире бездушных ардуино. Предлагается собрать ROS «тележку», которая будет не только дешевая, но и функциональная: сможет поехать по линии на полу, вашим котом, вашим телом :) Первые шаги будут такие:


Еще немного лирики


Второе, что поражает при изучении ROS — стоимость платформ на рынке. Комплект turtlebot burger (как один из доступных по цене) — 549 $ (34500 р.). Все остальное еще дороже. Здесь можно возразить, что львиную долю цены составляет lidar, устройство для определения положения робота в пространстве. Который сам по себе стоит под 15к р. Однако, все остальные компоненты также не дешевы.

Посчитаем, во сколько обойдется нам наша «тележка»:


Итого: 8000 р.

Цена также велика, но на порядок дешевле turtlebotа. При желании, машинки можно напечатать на 3d принтере или взять кусок фанеры. Тогда останется только DC моторы взять. Аккумулятор для raspberry также можно заменить более дешевым аналогом, главное, чтобы он выдавал 5V 3А.

Собираем

За основу проекта был взять ранее существующий проект — www.rosbots.com/build_it, но со значительными доработками. Кроме того, базовый проект, судя по информации с сайта, был заброшен, поэтому придется все доводить до ума самим.

Начало сборки и крепеж моторов аналогичен вышеуказанной инструкции:



Здесь надо обратить внимание на энкодеры, которые монтируются таким образом, чтобы они «накрывали» диски с прорезями, одетыми на моторы:



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

После монтажа двигателей и энкодеров (по желанию), соединяем провода с с ардуино uno, драйвером двигателя, батарейным отсеком из 2-х аккумуляторов 18650. Схема соединения аналогична, размещенной на сайте базового проекта за одним исключением:


5V для энкодеров можно взять с arduino (VCC от Right speed sensor и Left speed sensor на 5V arduino).

Крепим arduino и драйвер двигателя, питание для дравера:



Лапша поближе:



Драйвер двигателей. На клеммы зеленого цвета — пары проводов от двигателей:



Arduino у нас не будет питаться от батареек, она будет в дальнейшем соединена по usb с raspberry.

Ставим второй слой машинки


Здесь будет располагаться батарейный отсек, raspberry pi, камера на деталях из советского конструктора:



Не забываем правильно воткнуть шлейф от камеры в raspberry:



Советский конструктор в деле:



Закрываем бургер, третий слой «тележки».



Здесь будет ездить powerbank для raspberry:



*Немного о powerbank:



Все, машина готова!



В следующих постах поговорим уже непосредственно о ROS, линиях, теле, котах и улыбках.

Советы и беспощадная критика приветствуется!

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


  1. MaxAlekseev
    20.07.2019 19:20

    Ваш КЭП! По линии робот так и не поехал.


    1. zoldaten Автор
      20.07.2019 19:36

      позднее поехал точнее, это раннее видео. просто этот вариант забавней, «воспоминания о линии».


  1. Augustxeno
    20.07.2019 19:31

    на видео значительная задержка сигнала


    1. zoldaten Автор
      20.07.2019 19:32

      это кривой монтаж при наложении двух окон, рассинхрон.


  1. AlexanderS
    20.07.2019 22:23

    Подобное и я делал. Остановился на чём-то подобном, полностью разочаровавшись в машинках без рулевой рейки и не найдя какого-нибудь готового варианта платформы «с рулением» (гусеницы изначально не планировались, а всякие колёса-мекарумы уж больно недешёвы).
    Вот ROS, если вы будете толком объяснять что к чему — это будет очень интересно.


    1. zoldaten Автор
      20.07.2019 23:32

      Читал вашу статью ранее, спасибо. Из нее мне было интересно в частности про защиту аккумуляторов. Аккумуляторы дохли по неясным причинам. Теперь я нашел более простое решение (без пайки) на али — ru.aliexpress.com/item/32919634014.html.
      Однако, собирать только на ардуино, в моем случае не совсем то, что нужно. Хотя под ROS и только ардуино есть хороший проект из «ROS for Absolute Beginners». Если все собрать правильно, то получится вот такой zoldaten на arduino mega —


      1. AlexanderS
        21.07.2019 00:16

        С аккумуляторами интересное решение. Можно в параллель набрать такими ячейками нужную мощность, особо не заботясь о контроле при заряде/разряде. Только при разряде такой батареи, когда «закончится» аккумулятор с самой маленькой ёмкостью (а при интенсивной эксплуатации он рано или поздно появится), нагрузка на остальные возрастёт ступенькой — как только отключится одна ячейка. Возможно в каких-то случаях это надо учитывать (заботливый китаец предупредил нас о том, что всё это для питания устройств не более 5 Вт, но если сделано на совесть, то конструктивно думаю без проблем больше в 2-3 раза можно снимать, вопрос только в том, сколько может отдать преобразователь), например, заведя телеметрию о работе ячеек на контроллер. Кстати, контакты не пружинные, а пластинами — это хорошо, т.к. позволит снимать приличные токи. А то бывали случаи, когда тоненькие пружинки нагревались, проплавляли пластик и батарея самоотключалась)

        Думаю читателям про ROS будет интересно. У меня-то у самого руки до неё так и не дошли.


    1. wormball
      21.07.2019 12:26

      > не найдя какого-нибудь готового варианта платформы «с рулением»

      А машинки на радиоуправлении чем не устраивают?

      > мекарумы

      Это вообще что? Гугель и яндекс выдают либо упоминания в вашем же исполнении, либо вот такое из разряда НЕ КАЧАЙТЕ ПОСОНЫ ТАМ ВИРУС: retro-kontrastnyj.begcom.ru/suhoy/robot-mashina-s-338.html


      1. AlexanderS
        21.07.2019 12:35

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

        Извините, я опять написал «мекарум» ( Меканум же конечно. Они же омни, колесо Илона.


  1. Foreglance
    21.07.2019 09:59

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


    1. zoldaten Автор
      21.07.2019 17:25

      Да, это отличная информация! И я здесь в группе поддержки датчиков Холла, но другие цены и базовый проект использовал стартовые обыкновенные оптические датчики.


  1. osmanpasha
    21.07.2019 12:07

    сможет поехать по линии на полу, вашим котом, вашим телом


    Не совсем понятно, что имеется в виду — телега едет по полу, по коту и по телу?

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


    У вас энкодеры не те. Надо было взять квадратурные энкодеры, они и направление определяют. Вообще, какую-то локализацию робота серьезнее, чем при езде по линии или вдоль стенки, можно только с энкодерами сделать (и еще какими-нибудь датчиками, типа IMU)

    А вообще спасибо за статью. Интересно, какая производительность у малины в задаче анализа видео для поиска линии и улыбки, и можно ли это в реальном времени использовать.


    1. zoldaten Автор
      21.07.2019 17:26

      Сохраним небольшую интригу до след. поста.


  1. NetBUG
    21.07.2019 12:30
    +1

    Есть очень хороший вариант робота с шаговиками вместо DC-шек + энкодеров, ещё и дешевле получается (степперы цепляются прямо на малинку): github.com/Rhoeby/mini-turty/tree/master/mini_turty3

    У меня есть форк с небольшими доработками. Базовая платформа выглядит как Raspberry, два драйвера на LV8729 и DC-DC на 5 вольт. В расширенном виде добавляется IMU, лидар от популярного пылесоса или от Seeed ($100 ровно в обоих случаях) и платка контроллера питания.

    Если интересно, могу статейку накидать


    1. sav1812
      21.07.2019 12:59

      А как обстоят дела с пропуском шагов шаговыми двигателями при возрастании нагрузки?
      Энкодеры — они для надёжного получения информации хороши. :)


      1. NetBUG
        21.07.2019 13:40
        +1

        У 8729 никак. С другой стороны, это платформа для того, чтобы люди сделали свои первые шаги с ROS, научились работать с ускорениями, TF и прочими базовыми понятиями.
        У TMC2130 есть обратная связь, в том числе по пропускам шагов.

        Ну и кроме пропуска шагов, вероятно проскальзывание колёс по поверхности (у omniwheel это вообще штатный режим работы), энкодеры здесь не помогут, нужно либо optical flow (датчик от мыши ставить), либо работать по другим источникам позиционирования (IMU/лидар; у меня на платформе они есть, кстати).

        Вообще в ROS самое интересное как раз сведение одометрии из разных источников :)


    1. zoldaten Автор
      21.07.2019 17:29
      +1

      Обязательно напишите! Если не для машины, то для руки пригодится. Там mg966 разочаровали.


  1. NetBUG
    21.07.2019 12:33
    +1

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


    1. mrhru
      21.07.2019 22:18
      +1

      Мы на моторы подаём напряжения разной полярности через драйверы и без квадратурных детекторов не знаем направление движения? Это как? :)


      1. NetBUG
        22.07.2019 13:06

        При постоянной скорости — конечно, знаем. А вот при активном торможении и смене направления уже сложнее. Естественно, можно находить наиболее длинный импульс и считать его точкой смены направления вращения, но пятицентовый двойной фотодиод решает эту проблему ещё проще :)


  1. ZEN_LS
    21.07.2019 12:51

    Энкодеры нужны для поддержания постоянной скорости при помощи pid, а не для того чтобы узнать пройденный путь.


    1. NetBUG
      21.07.2019 13:33
      +1

      И это тоже, но ROS в значительной степени построен вокруг одометрии, и если ТС не отправляет эти данные в систему — это очень странно


      1. osmanpasha
        21.07.2019 16:33

        Ну, команды роботу посылаются в виде скорости (cmd_vel), вот для поддержания нужной скорости колёс и нужны энкодеры и pid. Отправлять обратно одометрию можно, но без продвинутого шаманства толку от неё обычно мало, так как она врёт.


  1. iburyl
    21.07.2019 17:17
    +1

    А зачем в бутерброде одновременно нужны и малинка и ардуинка? Разве одна raspberry pi 3b+ не потянула бы всё целиком?


    1. zoldaten Автор
      21.07.2019 17:21

      Да, потянула бы. И такой проект есть www.youtube.com/watch?v=D4gQgi8j4VY
      Ирония в том, что шапка для raspberry стоит дороже uno ) www.amazon.es/gp/product/B071FWNBXG


      1. Foreglance
        23.07.2019 19:58

        Если под «шапкой» вы имеете в виду мотор-драйвер — думается под код из указанного видео любой H-бридж подойдёт, например дешевый HG7881
        Например здесь на 20-21 шагах нарисованы разные платы для диф-движения (и в комментах про отличие пинов на разных мотор-драйверах)
        www.instructables.com/id/Another-cardboard-robot-vacuum-cleaner-controlled-
        Или я что-то неправильно понял?


        1. zoldaten Автор
          23.07.2019 21:20
          +1

          HG7881 уже есть в схеме. Вопрос, как я его понял, был — можно ли без arduino обойтись. Да, можно.