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

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

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

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

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

bcbdfce9621ce49a50dae6907a72b6bb.jpg

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

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

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

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

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

3099acdb3fdc17518fd1915db985e1f5.jpg7b1ed20b3b2956b08a8999151be2fcac.jpg

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

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

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

c83ba043ea7cc12b77b7dbbeea41180c.jpgfe7df382876457b3ea2497f18d4ad34d.jpg

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

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

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

03911694ec49fae575881448118ed039.jpg

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

01f7339fa7cf3525ee62f818161f34d4.jpg1dfb44b7061527e61f9dd05beb0ec50b.jpgcedef2476bbf545ac4b8d6bb75d2972b.jpg

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

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

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

4316c20c6c76fa02255d9c4020b06594.jpg8c4018e311c92676029ece59d53ae3b9.jpgde6df5dd13ba2c6181aaa4476c577ff5.jpgc1baeb37d61139534389efbdaf617899.jpgca0c4b037137eaaed5d8ed8115a12d5c.jpg

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

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

0ded796669457407fa55b251b5afa4e3.jpg

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

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

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

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

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

aeba458474a8f4aa33a283213e049cbc.jpg9ab2b0c9994dd684a33e36e4d9bd02a6.jpg

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

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

2e48a01a71500630b1e82793cf8d14d7.jpg

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

fc006e31c07794363c2f2eab006c3c5f.jpg

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

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

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

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

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

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

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

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

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

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

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

© Habrahabr.ru