Pull to refresh

Comments 84

UFO just landed and posted this here
UFO just landed and posted this here
Можно попробовать применить для квест-комнат и как игровой аппарат в развлекательных центрах.
Вратарей на мыло! Или на переобучение. R2D2, играющий в хоккей это плюс.
Отличный проект в плане форсирования шаговиков и управляющей электроники.

Усё
UFO just landed and posted this here
В роботе сейчас установлены TMC2100 — 2 черных v1 и 10 белых v1.3 (заказывал по-очереди для пробы). Они разные, но у обоих пришлось пины ms припаивать. У v1 (черные) вручную ms припаять очень сложно, даже под стеклом, слишком мелко 1мм. Для v1.3 (белые) паять ms гораздо удобнее, т.к. на плате они крупнее. Питание использую 36 вольт, а вот на счёт нагрева не подскажу, у меня всё холодное, т.к. через пин Enable сразу отключаю драйвер, если не нужен.
UFO just landed and posted this here
Что собирали, OpenCNC?
UFO just landed and posted this here
Да, при отключении драйвера, вал мотора не удерживается. В моём случае это не нужно, вот и воспользовался для охлаждения моторов.

А что если через червячный привод?

Думал об этом в начале, перебирал варианты, как сделать привод. Для червячного привода нужно больше оборотов, на счёт шума самого привода не знаю, какой звук он бы издавал на большой скорости. Выбрал ремень.
для чего пришлось пины ms припаивать?
На платах драйверов TMC2100 в Китае не соединили ножки чипа Trinamic с пинами на плате драйвера. Сначала тестировал драйвер, переключал режимы шагов с помощью пинов ms, а результат всегда один. Где-то в интернет нашёл информацию и фотки, что нужно соединить/припаять. Припаял — заработали режимы.
Очень колоритный проект, понравилась идея.

С током проблем не было (нема может от 2А сжёвывать. Итого 25А. Нет?)?

А продолжение будет?
— Распознавание положения игроков (движок при разгоне пропускает шаги, так?) и клюшек (также пропуск шагов).
— Логика по игре: кого как двинуть и т.д.

Не думаю, что стратегия игры подразумевает одновременную работу большого количество моторов
Спасибо!
У меня набралось 3 разных типа моторов 1.7А, 2A, т.к. брал по-очереди для тестирования, остановился на 2А. Они бьют сильнее, шайба часто летит по воздуху, если надо.
Сейчас нашёл на Ali моторы на 2.5А, попробую позже.

Продолжение будет, есть много идей, как улучшить/упростить/облегчить механику, с софтом можно улучшать бесконечно. Сейчас переношу «мозги» с десктопа на Raspbery Pi 4.

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

Если подсчет шагов не осуществляется, то проще использовать DC моторы через Н мост.
Сколько нужно выполнить шагов (передвинуть вперёд/назад или поворот клюшки) передаётся в команде с компьютера на Ардуино, а сколько реально выполнено шагов мотором не учитываю. Обратная связь с реальностью только через камеру.
У TMC2100 максимальный рабочий ток довольно низкий же, один ампер, если я правильно помню. Как получается что высокоамперные моторы лучше работают, если сам драйвер максимум один ампер выдаёт?
Посмотрел сейчас, 1.2A рабочий ток, 2.5А пиковый. Интересно, у вас на сколько ампер настроено?
Использую почти максимум, в зависимости от мотора 1.7А или 2А, т.к. в целом моторы используются кратковременно.
У меня 3 разных типа моторов, брал по-очереди на Ali, тестировал, чтобы найти оптимальный по весу и мощности. Где-то среди продавцов позже нашёл 2.5A, если не врут, тоже Nema17 4401, надо будет их попробовать.
Т.е. драйверы на пиковых режимах работают. Интересно.
2.5A не редкие мотры, так что не врут, у меня в принтере такие стоят (42BYGHW811) с драйверами 8825 настроенными на 2А.
У более высокотоковых моторов скорей всего индуктивность ниже (меньше витков в обмотке). Скорость нарастания тока в обмотках будет выше, динамика разгона и максимальная скорость выше.
Вот это интересное объяснение. Логично.
UFO just landed and posted this here
Оптические датчики, я так понимаю, в таком случае считают количество пройденных «шагов» обычными моторами. В случае шаговых моторов изначально посылаю команду сколько шагов нужно пройти до нужной точки.
Тоже конечно вариант, но цены и размеры примерно, как и у шаговых моторов.
В комментариях поступают идеи использовать соленоиды и даже пневмо для удешевления и упрощения механики. Это заманчиво, механику можно на порядок удешевить, но придётся поломать голову, как это всё сделать.
UFO just landed and posted this here
Если вы про rotary encoder? Такие же датчики на колёсике мыши стоят. А вот если дифракционные подешевели, то эт интересно.
UFO just landed and posted this here
Пневмо одновременно точная, дешёвая и необслуживаемая не бывает :(
Пневмо одновременно точная, дешёвая и необслуживаемая не бывает :(

Тут частный случай.
Пневмо это могут быть и шприцы с массовым производством.
И если еще разного диаметра?
У Камаз кузов красиво поднимается.

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

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

Интересно про программную часть тоже, видно, что компьютер делает не очевидные голы, например, с отскоком от стены.

Про распознавание и программную часть расскажу в последующих видео/статьях, выкладываю по-очереди, как всё было исторически — механика, распознавание объектов, алгоритм игры.

Элемент случайности специально добавлен (30% случаев), с ним игра проходит интереснее. Некоторые голы просто нереальные.
UFO just landed and posted this here
Если убрать случайность, игрок-человек будет постоянно держать левую руку на вратаре и ожидать удара — так будет не интересно играть
Очень интересно, играю сам в нх, теперь так и тянет собрать такое для тренировки, хотя стиль конечно от человеческого отличается значительно
Всё зависит от программы, что напишешь в коде — так и будет работать. Сила у моторов конечно больше, чем у человека и реакции можно добиться большей. Есть планы заменить мой алгоритм игры на нейросеть RL, но нужно время.
Элемент случайности в играх и непредсказуемость — очень интересная штука. В очень давние годы экспериментировали с пвп-системой в мморпг игре. Была мысль, что если сделать систему максимально предсказуемой (без всяких критов и «физлов» спеллов) — будет интереснее и всё будет зависеть исключительно от прямоты рук. Оказалось — скучно и как ни парадоксально, исход боя от от прямоты рук стал зависеть меньше.

Т.к элементы случайности хороший игрок успевает использовать в свою пользу, а плохой — теряется. Для плохого игрока рандом не в его пользу так же часто может оказаться фатальным, а хороший игрок сможет из ситуации выбраться.
Рандом в бою становится дополнительным элементом, на который необходимо реагировать. Но тут тоже важен баланс, конечно.
Согласен, я сейчас применяю случайность в 30% случаев и не всегда, не у каждого игрока.
Распознавание можно проще, т.к. есть возможность управлять движением каждого.
Сохранил кадр, немного подвинул, взял разность — все намного виднее.
Вернул на исходное.

Так получалось и стрелку на тестере отследить.

Преобразование Хафа хорошо линии ищет.
Если брать разность между кадров (такое тоже пробовал), в процессе игры бывает много шума на изображении, т.к. толкают хоккей, камера вибрирует.
Но, главное для меня было пройти самому путь именно в распознавании с помощью нейросети — создать датасет, всё настроить, обучить, получить результат. Одно дело читать про это, видеть, как другие настраивают и обучают, но всё сделать самому — это знания на будущее для следующих проектов.
А если на вторую сторону такого же робота посадить?
А если неиспользуемым хоккеистам добавить idle-анимации?
Это уже получится почти как в фильме Живая сталь
А музыка специально, чтобы работу моторов не было слышно?
На микрошаге драйверы греются значительно сильнее, чем без деления.
Если хотите опытом поделиться выложите код с обработкой ускорений.
Шум моторов в процессе игры
www.youtube.com/watch?v=6oS7r0hbwhk&t=830

Быстрое передвижение вперёд и назад, код для Ардуино для драйверов TMC2100 4->256
int m_iMLineStepPin = STEP_PIN;
unsigned long i = 0;
unsigned long iDelayStep1 = 0;
unsigned long m_iMLineStepCount = 1000;

while (m_iMLineStepCount > 0) {
iDelayStep1 = (200000000/(i*i*i+100000)+4)/4;
digitalWrite(m_iMLineStepPin, HIGH);
digitalWrite(m_iMLineStepPin, LOW);
delayMicroseconds(iDelayStep1);

if (m_iMLineStepCount%4==0) i++;
m_iMLineStepCount--;
}
То есть торможения нет просто остановка. Удара при остановке после большой скорости не наблюдается?
И в каждый момент возможно только одно движение — поступательное или вращательное только на одном «игроке»
А как управляется всё в целом? Как ищется шайба? Камера и распознавание картинки, нейросеть… расскажете?
Торможение заложено быстрое, но плавное. Иногда торможение не нужно — при тычке по шайбе.
Параллельная работа возможна, это заложено, можно сразу передвигать всех игроков и вращать клюшкой. Правда при ударе по шайбе в программе я это не использую, подъехал, ударил. Усложнять алгоритм можно бесконечно.

Я начал делать серию видео-выпусков о том, как собирал робота, пока 2 серии: Идея & старт и Шаговые моторы (видео-версия этой статьи). В следующих выпусках буду рассказывать, как проводил распознавание и обучение.
Очень здорово! Жду следущей статьи с описанием, как вы обучили его играть
Ух! Впечатляет! В детстве развлекались таким хоккеем.
Очень интересно про логику.
А что за музыка в видео?
нужно передвинуть игрока на ~40 см за доли секунды

А вариант поставить на ремень шестерню с бОльшим диаметром не рассматривался?
Самый простой способ увеличить скорость перемещения игрока.
С этого и начал, поставил сначала шестерню на 60 зубов, шума было много с драйвером мотора A4988 (этот момент будет в следующем видео в серии выпусков, как собирал робота). С шестернёй на 20 зубов шума стало меньше — превратился в писк. Тогда это было приемлемо.
Сдвинуть привод с места на малой шестерне мотору легче, да и компактнее стало.
Да, это заложено в 4-го игрока, который напротив ворот противника. Если человек зазевался и не контролирует вратаря — тычок и гол.

Буллит — это не тычок. Это более хитрое действие.

Из Федерации настольного хоккея России пригласили поучаствовать робота в качестве обычного участника, как начнутся игры. Со временем разберусь в терминах.
А где игры будут? В каком городе?
Если в Питере, то ради игры с роботом может сходить разок на кубок… (задумался)
Пока не знаю, сказали по времени с середины июля начнут.
Т.к. я живу в Подмосковье, с прототипом робота смогу сейчас поучаствовать только в Москве.
А-а… жаль.
Ну держите в курсе, видео показывайте!
В ФНК играют без пластиковых шторок на воротах.
Ну это так… в порядке информирования. Мало ли где-то в алгоритме они учитываются.
Последний раз, когда интересовался Trinamic, было дорого, выбрал для своих задач интеллектуальный (управляется командами по SPI) драйвер L6470 от ST.
Да… вот до чего доводить отсутствие партнёра в настоьных играх. Но проект класный. Можно поставить против человека и тестировать самообучающие AI software.
Замена программы игры на reinforcement learning нейросеть ещё впереди
вот до чего доводить отсутствие партнёра в настоьных играх.

Угу, как-то даже начал пилить компьютерную версию настольного варгейма, чтобы хоть с ИИ поиграть…
Очень замечательный проект! А, если не секрет, можно узнать BOM (bill of materials) хардварной части проекта?

А будет ли все выложено в опенсорс?
Пока не планировал опенсорс для этого проекта, возможно в будущем

Интересно будет провести турнир онлайн: сделать бота и с другой стороны и позволить другим людям сделать свою прошивку для бота. Разве что не представляю как сделать тестовую среду для разработки...

Круто!
Один момент — с enable=1 на обмотки прикладывается ток удержания и мотор уже не так просто провернуть. Чему он равен — смотрите в даташите, у многих драйверов можно поставить делители 2 или 4 чтобы меньше грелся мотор. Возможно это поможет с вратарем, на видео видно что он пропускает голы когда достаточно было "keep your stick on the ice". Да и нагрев шаговиков явление нормальное, для многих 70 это рабочая температура, по своему ЧПК фрезеру знаю.

для клюшек я бы взял модельные сервоприводы :)
классный проект)) а с настольным футболом такое можно… а то фифы всякие надоели уже)
Решал сходную проблему, только движков 3, а не 12. Несколько ремарок:
1. AccelStepper вполне нормальная библиотека, там унутре классический код для трапецевидного профиля скорости, а остальное биндинги для разных типов шаговиков и драйверов.
2. Для движения можно взять не шаговкики, а на каждую ось поставить по несколько соленоидов в качестве злой замены линейного двигателя, этакий шаговый гауссган.
3. Поскольку изменение ENA обычно не срочное, а ног всегда не хватает, можно взять сдвиговый регистр. Возможно, так же можно поступить с DIR
4. А вот концевики лучше через логическое или завести на ENA, чтобы как ткнулись в ограничитель — мотор останавливался
5. Диоды тоже можно полностью отвязать от МК с помощью рассыпной логики.
6. Не знаю, как у вас в коде, я генерировал профиль на стороне ПК, а потом через прерывание с низким приоритетом забирал на стороне МК. Правда, у меня скорость была на пределе быстродействия драйвера, а ноги дрыгались из разных прерываний, и профили могли быть разные.
7. Лучше взять простенький осциллограф (на хабре описывался любительский на ардуино) и посмотреть, как счётный профиль совпадает с дрыганьем ноги. Учитывая перегруженность ардуиниского кода, максимальная скорость может банально не достигаться: PORTB ^= _BV(PB3); занимает 1-2 цикла, digitalWrite примерно 14-20. Родные ардуиновские прерывания тоже кратно тормознее avr`овских ISR
8. Обратная сторона: можно дрыгать ногой слишком быстро для драйвера, в итоге потеря шагов.
9. От механики зависит, но при отключении шаговика возможно проскальзывание (backlash).

Кстати, как у вас с лагом «команда-движение»? Теоретически со всеми задержками от программы до шины USB может пройти 50 миллисекунд, хотя обычно там единицы.
Задержку «команда-движение» не замерял, но она зрительно пока значительно меньше, чем «картинка с камеры — команда» ~750 миллисекунд из-за слабого процессора на десктопе с 2-х ядерным Pentium G3460. Это критично для реакции вратаря робота. Сейчас переношу «мозг» с десктопа на Raspberry Pi 4, установленный на борту робота. Камера будет другая, без рыбьего глаза, а не как сейчас (устранение тоже неплохо «ест» ресурсы), подключение будет через разъём Camera Raspberry Pi. Алгоритм распознавания объектов после нейросети немного переделаю, сделаю «умнее» и на порядок быстрее, есть идеи. В итоге задержка будет ~100-150 миллисекунд.
Если задаться целью, можно со временем совсем избавиться от Ардуино.
А решение хоббийное или с идеей коммерциализировать, чтобы можно было при желании одному играть?
Сначала всё начиналось и развивалось, как хобби. Ближе к завершению, когда стало видно, что получается интересный «продукт», уже стали поступать от самых разных людей различные советы, как коммерциализировать продукт.
Тогда механику придётся перепиливать кардинально, например, на подпружиненные соленоиды, иначе просто дорого, тяжело и просторно.
Да, сейчас собранная механика слишком дорога и занимает много места. Для перехода на соленоиды или что-то другое нужно будет потратить немало времени и средств, но при желании всё возможно.
Тогда в софте надо предусмотреть, чтобы дёргало функции с сигнатурами типа moveRelMm(fig_id, dist_mm) и rotRelDeg(fig_id, ang), иначе DeviceAdapter, ответственный за общение с исполнительной частью, заменить сложно будет.
После того, как двигая руками экструдер принтера, я сжёг наведённой ЭДС дорогой драйвер TMC, стал ставить драйверы через защитные диоды. Особенно в обесточенном виде драйверы могут пострадать от воодушевлённых зрителей, желающих «помочь» роботу и подвигать за него приводы.

У китайских товарищей есть готовые решения по полтора-два доллара за штуку, ищутся по «Silent Step Stick Protector».
Согласен, дети любят приводы потаскать вперёд и назад, но пока вроде не сожгли.
Видел такие на Ali для защиты, нужно будет добавить. Спасибо!

В будущем планирую сделать некий защитный кожух на механику для защиты, чтобы никто руки не повредил. Бывает шайба вылетает туда и доставать её опасно. Хоть алгоритм игры и предусматривает простой в случае отсутствия шайбы на поле, но безопаснее прикрыть механику.
Sign up to leave a comment.

Articles