Комментарии 84
Отличный проект в плане форсирования шаговиков и управляющей электроники.
А что если через червячный привод?
С током проблем не было (нема может от 2А сжёвывать. Итого 25А. Нет?)?
А продолжение будет?
— Распознавание положения игроков (движок при разгоне пропускает шаги, так?) и клюшек (также пропуск шагов).
— Логика по игре: кого как двинуть и т.д.
У меня набралось 3 разных типа моторов 1.7А, 2A, т.к. брал по-очереди для тестирования, остановился на 2А. Они бьют сильнее, шайба часто летит по воздуху, если надо.
Сейчас нашёл на Ali моторы на 2.5А, попробую позже.
Продолжение будет, есть много идей, как улучшить/упростить/облегчить механику, с софтом можно улучшать бесконечно. Сейчас переношу «мозги» с десктопа на Raspbery Pi 4.
Движок на больших скоростях шаги пропускает, по этому подсчёт шагов не использую, местоположение игроков и клюшки беру только с распознавания через нейросеть.
Движок на больших скоростях шаги пропускает, по этому подсчёт шагов не использую, местоположение игроков и клюшки беру только с распознавания через нейросеть.
Если подсчет шагов не осуществляется, то проще использовать DC моторы через Н мост.
У меня 3 разных типа моторов, брал по-очереди на Ali, тестировал, чтобы найти оптимальный по весу и мощности. Где-то среди продавцов позже нашёл 2.5A, если не врут, тоже Nema17 4401, надо будет их попробовать.
Тоже конечно вариант, но цены и размеры примерно, как и у шаговых моторов.
В комментариях поступают идеи использовать соленоиды и даже пневмо для удешевления и упрощения механики. Это заманчиво, механику можно на порядок удешевить, но придётся поломать голову, как это всё сделать.
Пневмо одновременно точная, дешёвая и необслуживаемая не бывает :(
Тут частный случай.
Пневмо это могут быть и шприцы с массовым производством.
И если еще разного диаметра?
У Камаз кузов красиво поднимается.
И еще есть обратная связь через камеру, можно подкорректировать.
Камера нужна для определения положения шайбы, заодно и положение игроков и клюшки успевает определить.
Пневмо это могут быть и шприцы с массовым производством.Шприц не особо многоразовый (который резина-пластик) и быстро начинает подтравливать. Который стекло-металл или стекло-стекло долговечнее, но гораздо туже идёт и больше стоит. Учитывая, что скорость перемещения фигурок большая, т.е. нужен удар по поршню, пневматика далеко не лучший выбор.
Интересно про программную часть тоже, видно, что компьютер делает не очевидные голы, например, с отскоком от стены.
Элемент случайности специально добавлен (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 см за доли секунды
А вариант поставить на ремень шестерню с бОльшим диаметром не рассматривался?
Самый простой способ увеличить скорость перемещения игрока.
Сдвинуть привод с места на малой шестерне мотору легче, да и компактнее стало.
Лопаты, буллиты бьёт?
Буллит — это не тычок. Это более хитрое действие.
Если в Питере, то ради игры с роботом может сходить разок на кубок… (задумался)
Ну это так… в порядке информирования. Мало ли где-то в алгоритме они учитываются.
А будет ли все выложено в опенсорс?
Интересно будет провести турнир онлайн: сделать бота и с другой стороны и позволить другим людям сделать свою прошивку для бота. Разве что не представляю как сделать тестовую среду для разработки...
Круто!
Один момент — с enable=1 на обмотки прикладывается ток удержания и мотор уже не так просто провернуть. Чему он равен — смотрите в даташите, у многих драйверов можно поставить делители 2 или 4 чтобы меньше грелся мотор. Возможно это поможет с вратарем, на видео видно что он пропускает голы когда достаточно было "keep your stick on the ice". Да и нагрев шаговиков явление нормальное, для многих 70 это рабочая температура, по своему ЧПК фрезеру знаю.
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 миллисекунд, хотя обычно там единицы.
Если задаться целью, можно со временем совсем избавиться от Ардуино.
У китайских товарищей есть готовые решения по полтора-два доллара за штуку, ищутся по «Silent Step Stick Protector».
Видел такие на Ali для защиты, нужно будет добавить. Спасибо!
В будущем планирую сделать некий защитный кожух на механику для защиты, чтобы никто руки не повредил. Бывает шайба вылетает туда и доставать её опасно. Хоть алгоритм игры и предусматривает простой в случае отсутствия шайбы на поле, но безопаснее прикрыть механику.
На что ещё способны шаговые моторы? — Забивать голы в настольном хоккее