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

Что наша жизнь? Игра!

Эта история началась почти год назад. Сидели мы как то с другом и подумали, «а что если сделать систему, для игры через интернет? То бишь, управления реальными роботами?»

Сказано – сделано… «робота» закипела…

В процессе предварительного обсуждения была выбрана конструкция «а-ля танк» – то есть 2 колеса с отдельными двигателями, без рулевой системы вообще. Эта система дает роботу высокую маневренность и возможность развернуться на 180 градусов, стоя на месте. Кроме того, побочным следствие такого разворота – является возможность наносить удар по шайбе(если есть клюшка) – на этом месте, многие должны вспомнить игру «настольный хоккей» – где хоккеисты вращаются вокруг своей оси и таким образом – бьют по шайбе.

Однако, такое устройство ходовой части – вызвало большие проблемы в будущем. Почему: 2 отдельных двигателя никогда не будут вращаться с синхронной скоростью, если не имеют жесткой механической связи. Почему: разность изготовления на заводе, погрешности в посадке и диаметрах колес и т.д. и т.п.

Поэтому, единственный путь синхронизировать колеса (если не связывать их некой жесткой связью – типа общей оси) – то использовать программную синхронизацию.

Сначала взяли для этих целей акселерометр/гироскоп. Но это оказалась насколько простая, настолько и не неудачная идея: робот стал «терминатором» – который четко «прёт» вперед и его не может сбить с курса ничто – даже удары других роботов. А это плохо. Мы здесь не «скайнет» строим – и такие «терминаторы» не нужны. К слову, программная реализация сего действа достаточно сложна (как оказалось).

Пришлось отказаться. Второй путь – установка «энкодеров» (дырчатых дисков) на колеса и датчиков, считывающих импульсы, когда «дырка» проходит мимо датчика. Таким образом, зная скорости прохождения «дырок» на каждом из колес, – можно много раз в секунду корректировать скорости вращения колес и делать их одинаковой. Это не делает робота «терминатором» - его вполне можно сбить с курса, ударом другого робота. Это просто синхронизирует скорости колес. То, что надо.

Сразу скажу, что это был весьма тернистый путь – как с точки зрения использующихся технических решений, так и физической сложности изготовления: одних только деталей для роботов - было отпечатано более 100 штук! Причем печать велась на открытом балконе, "и в снег, и в зной, и в дождик проливной".

Были на этом пути и неудачи: была закуплена большая партия Ni-Mh аккумуляторов и зарядных устройств, для них. Но, как оказалось, они не справляются с такой энергоотдачей.

И, в итоге- они полетели в корзину(условно)…

Пришлось перейти на литий-ионные элементы 18650.

Сейчас система представляет собой веб сайт, на который ведется трансляция с youtube. «Пилоты» роботов заходят на него и берут в управление свободного робота. И «let the battle-begin!!!»

Управление ведется «стрелками» с клавиатуры. Также, оно дублировано на другую конкурирующую схему (лично я- «фу фу, только стрелки» – но пускай будет) – WASD.

Для создания стола – мы закупили школьную доску.

И установили на нее бортик из алюминиевой полосы. Это работа была бы невозможной, без станочного парка. Тут нам тоже повезло-у нас есть токарный станок по металлу и сверлильный тоже...

Далее – напечатали боковины ворот с плотной посадкой подшипников в них (подшипники имелись у меня в количестве аж 50 штук от другого проекта).

На боковинах можно видеть гребенки – натяжители сетки. Которые помогут нам натянуть сетку на ворота.

Далее – из того же нержавеющего прута и куска такой же нержавеющей трубы (ибо прут закончился нежданно-негаданно) – были выточены соединительные распорки для боковин.

В качестве сетки – случайно попался на глаза и был немедленно разодран - сетчатый мешок для стирки мелких вещей в стиральной машине. У него оказался весьма модный шестигранный рисунок сетки. Мы впали в восторг!

Однако, – рано радовались. Как оказалось, начался самый сложный этап для почти любого мужика – швейные работы! Как оказалось, это даже сложнее, чем программинг, 3d печать и токарные работы – вместе взятые!

Вдоволь намучавшись – мы таки обшили сеткой ворота. Система – готова! Уииии!!!

В качестве шайбы – было взято решение, которое я подсмотрел давным давно – еще в начале 90-х, в журнале "Юный Техник".

Тогда я был моложе, трава зеленее – а руки у меня "кривее".

Они предлагали ее сделать из шайб для хоккея и больших шаров от подшипников. Это позволило бы играть в хоккей в крытом помещении на обычном полу.

Тогда – у меня ничего не вышло. Но, спустя примерно 30 лет, с помощью не своих рук, а 3d принтера – я таки осуществил сие! ^_^

Что можно сказать насчет готовой шайбы: скользит просто как по льду. Поведение у нее - как у настоящей шайбы.

После первых игр, видно, как изменились клюшки – они стали «ветеранскими»: щедро покрыты царапинами и славой побед ^_^

Шайбе тоже досталось – ее потрепало в битве как надо (видно расщепление слоев 3d печати, после множества ударов клюшкой):

Итак, много всего было сказано, осталось только показать тестовую работу системы:

Так как многим будет интересна программная и "железная" начинка системы, вкратце скажу и о ней

Веб интерфейс самописный и работает на php и javascript. Ссылку на него пока давать не буду, так как работы еще идут.

Роботы –  построены на основе микроконтроллера Espressif  esp32, двухканальных драйверах двигателей, оптических инфракрасных датчиках (для энкодеров колёс), повышающих преобразователях (на 12V), батарее питания 18650.

Программирование роботов осуществлено с помощью Arduino IDE.

Управление роботами осуществляется с использованием протокола MQTT.

Почему вообще MQTT: чтобы избежать проблемы "прохода через роутер" из "внешнего" интернета и не думать о сменах IP адреса робота, при переподключениях и необходимости его сообщения клиенту из "внешнего" интернета.

«Пилот» робота – управляет им через веб интерфейс, который «постит» управляющие команды – в соответствующие топики, на которые подписан конкретный робот. Робот, в свою очередь – постоянно мониторит эти топики, и, при получении очередной команды, – исполняет её.

Что планируется сделать далее: так как, иногда наблюдается некоторое подтормаживание команд, проходящих через MQTT брокер (возможно, это связано с использованием публичного бесплатного MQTT брокера и, в целом, не совсем подходящего для этих целей MQTT протокола)  - думаем перевести всю систему просто на websockets, без MQTT. Или же, использовать свой, отдельный MQTT брокер. Кстати сказать, насчет вот этого пункта, будет очень интересно услышать совет знающих людей, как нам лучше всего реализовать подключение для стабильного управления.

Пока проект находится на такой стадии.

Картинка в начале поста – используется только для привлечения внимания. Проект своего названия ещё не имеет.

Комментарии 8

    0

    Круто. Когда-нибудь будет возможность прям зайти и поиграть всем хабром, или это чисто для себя и родного кружка радиолюбителей?

      +3

      Спасибо, рад что нравится! Обязательно будет возможность. Пилим проект не только для себя. Кое-какую нестабильность работы системы устранить и всё!

      +1
      Думаю что схему «броска» шайбы нужно поменять, и использовать например какую то пружину, или же сделать, что то вроде «совка» на который установить элемента бросающего шайбу…
      Но в целом конечно идея хорошая.
        +1

        Думали над этим. По результатам размышлений пришли к такому ( эта схема частенько используется в различных студенческих проектах): вращающаяся "вертушка" перед роботом, выпирающая за пределы робота миллиметров на 5. Грубо говоря — как у комбайна для уборки зерновых — спереди. Система в целом остаётся достаточно надежной, и, в то же время, достаточно простой. Быстро вращающаяся вертушка может наносить очень сильные удары по шайбе и делать серьезные "пасы".
        Как вариант, установка такой мини вертушки — прямо на клюшку. Соответственно, — можно будет как умеренно "пасовать", так и наносить удары чуть ли не от одного конца поля — до другого.

        +1
        Выглядит забавно! Сделайте клюшки подлиннее и железные полоски на них прикрутите, не будет изнашиваться пластик. Колеса возьмите прорезиненные — не будут проскальзывать.
        Относительно ухода от MQTT посмотрите трэшбот, там подход похож — много народа, он -один — habr.com/ru/company/pochtoy/blog/452642
          0
          Спасибо за содержательный отклик! Насчет колёс: они уже прорезиненные. А вернее из умеренно мягкой резины. И «держат» поверхность поэтому — весьма хорошо.
          Насчет клюшек — вопрос открытый. Сейчас идем вообще к отказу от них. И переводу роботов на еще более управляемый вариант- эдакое «поколение 2.0». Для этого — роботы надо перевести на «колёса Илона» или всенаправленные колёса. Это позволит роботам намного более динамично передвигаться и ими будет совсем легко управлять. И удары производить телом робота и/или вращающимся валом «а-ля комбайн».

          image

          P.S. Нашим идеалом по скорости и мобильности перемещения — являются вот эти роботы из Сингапура:

            0
            А вернее из умеренно мягкой резины. И «держат» поверхность поэтому — весьма хорошо.

            Резина дубовая, если честно. Вот эти получше — aliexpress.ru/item/32946445527.html
            Для этого — роботы надо перевести на «колёса Илона» или всенаправленные колёса. Это позволит роботам намного более динамично передвигаться и ими будет совсем легко управлять.

            Дело ваше. Но omni-колеса убьют все веселье.
            Для динамики просто добавьте еще одну 18960, и ограничитель, чтобы за 12V не выходило. l298n на 12V рассчитан, если вы на нем ездите. Для управляемости надо с шим поколдовать, т.е. просто его добавить, постепенное нарастание скорости.
          +1
          Кстати, очень скоро, ориентировочно на этой неделе (если все будет хорошо) — будет закончена система онлайн игры (чтобы люди могли свободно регистрироваться в игре и участвовать). И хотим устроить на хабре непрерывный гейм-марафон: роботы будут доступны к подключению весь день и можно будет хорошенько порубиться в робо-битву.
          Так что, скоро всё будет, друзья! ;-)

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

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