Ответ на пост «Восстание машин откладывается»

Ну вы конечно проснулись. Видео про 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

Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост

Почему Teensy 4.0?

Потому что он работает на частоте 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 мм. Я закреплял рабочую поверхность четырьмя болтами, чтобы обеспечить максимально ровную поверхность. Прикрепляю еще несколько фотографий, сделанных во время работы над проектом.

Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост
Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост
Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост
Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост
Ответ на пост «Восстание машин откладывается» Робот, Робототехника, Настольный теннис, Пинг-понг, Своими руками, Перевод, Видео, Ответ на пост, Длиннопост