Ну вы конечно проснулись. Видео про Octo-Bouncer вышло на Ютубе почти два года назад:
Автор написал короткую статью о разработке, привожу ее перевод.
Я задумался о создании машины для жонглирования мячом в 2015 году. Первые попытки осуществить задуманное я совершил в 2017. Сейчас на дворе 2020 год, и наконец-то у меня получилось создать аппарат, способный надежно жонглировать мячом для настольного тенниса. Текущая конфигурация робота способна удерживать мяч в движении в течение нескольких часов.
- 1х микроконтроллер Teensy 4.0, прошитый вот этим кодом
- 4х драйвер для шаговых двигателей StepperOnline DM442S
- 4х шаговый двигатель Nema 17 с планетарным редуктором 5:1
- 1х блок питания на 48 В, 8 А
- 1х камера e-con Systems See3CAM_CU135
- Компьютер с Windows и OpenCV
- Чертежи частей выполнены в этом проекте Fusion360
- Управляющая программа, написанная в Unity
Потому что он работает на частоте 600 МГц. Сравните с 16 МГц, на которых работает большинство плат Arduino. Почему тактовая частота так важна? Потому что необходимо генерировать импульсы с частотой до 250 кГц для каждого из 4-х шаговых двигателей. Поскольку мы хотим, чтобы шаговые двигатели запускались и останавливались плавно, интервал между импульсами должен увеличиваться/уменьшаться по синусоидальному или сигмовидному закону. Линейное увеличение скорости, скорее всего, не сможет обеспечить необходимую плавность движения. Выходит слишком много вычислений для 16 МГц, поэтому я остановил свой выбор на Teensy 4.0.
В качестве приятного бонуса мы получаем FPU (модуль для работы с числами с плавающей запятой), поддерживающий как 32-битные, так и 64-битные числа.
Нам действительно нужно 600 МГц?
«Но зачем генерировать импульсные сигналы с частотой 250 кГц? Моторы ведь вращаются не так быстро. Разве не хватит, например, 10 кГц?» Хороший вопрос. Вот что я обнаружил, пытаясь заставить свои моторы двигаться как можно быстрее:
- Чем больше микрошагов, тем лучше- Чем выше напряжение, тем лучше
Я установил настройку микрошага на своих драйверах на 25 600 шагов за оборот. Не забывайте, что мы используем редуктор 5:1. Выходит 128 000 шагов за оборот. Выбор частоты 250 кГц уже не кажется слишком нелогичным. На следующем изображении показаны первые 9 мс сигнала длительностью 150 мс:
Отчетливо видно, как импульсы сужаются ближе к правому краю. Частота плавно увеличивается. Движение начинается медленно и плавно набирает скорость. Имейте в виду, что на изображении видны только первые 9 миллисекунд этого сигнала. Частота пойдет вверх, а затем снова начнет уменьшаться.
Что делает микроконтроллер?
Микроконтроллер Teensy 4.0 выполняет простую программу:
1. Слушает команды движения, передаваемые по последовательной шине
2. Генерирует импульсы для управления шаговыми двигателями
Команды выглядят следующим образом:
0.11941:0.11941:0.11941:0.11941:0.15000
Каждая команда содержит 5 чисел, разделенных двоеточиями. Первые 4 значения — это абсолютные позиции двигателей (в радианах), пятое значение — время движения. С помощью инструкции, приведенной в качестве примера, мы говорим машине переместить все свои двигатели в абсолютное положение 0.11941 радиан за 0.15 секунд. Машина будет выполнять команды последовательно, в порядке поступления.
Что делает приложение на компьютере?
Я написал приложение для обработки изображений размером 640x480 пикселов со скоростью 120 кадров в секунду. Приложение выполняет следующую программу:
- Настраивает камеру (поток данных 120 FPS, разрешение 640x480, усиление, экспозиция, контрастность, ISO, насыщенность) через OpenCV
- Распознает окружность с помощью алгоритма преобразования Хафа из библиотеки OpenCV
- Находит трехмерное положение мячика для пинг-понга
- Рассчитывает скорость мяча
- Использует положение и скорость шарика для расчета коррекции наклона пластины с помощью ПИД-регулятора
- Рассчитывает инверсную кинематику, чтобы выяснить, как с помощью поворота двигателей поднять пластину на определенную высоту с определенным наклоном
- Отправляет результаты расчета инверсной кинематики в микроконтроллер через последовательный интерфейс
- Отрисовывает мяч, движения машины и результаты обработки изображения с камеры
Как я изготовил алюминиевые части
Мой аппарат состоит из более чем 150 алюминиевых деталей. Производство всех деталей потребовало очень много терпения. Мой станок Benbox CNC 1310 работал (почти) без остановок в течение нескольких недель. Общее время обработки всех деталей составило около 160 часов.
«Почему станок с ЧПУ такой медленный?» Потому, что шпиндель не такой мощный, как хотелось бы, всего на 80 Вт.
Еще я сделал звуконепроницаемый контейнер для станка, чтобы не сойти с ума :)
Я использовал фрезу диаметром 1.5 мм и лист алюминиевого сплава 6061 толщиной 3 мм. Я закреплял рабочую поверхность четырьмя болтами, чтобы обеспечить максимально ровную поверхность. Прикрепляю еще несколько фотографий, сделанных во время работы над проектом.