Существует два основных специальных шага к технике, используемой большинством контроллеров 3D-принтеров с открытым исходным кодом:
- Разделите каждый линейный сегмент gcode на множество очень маленьких подсегментов («Сегментация»)
- Используйте некоторую базовую тригонометрию или теорему Пифагора, чтобы привязать положение экструдера к высоте каретки для каждой из трех башен («Обратная кинематика»), чтобы найти целевое положение для каждого небольшого сегмента.
Обратная кинематика удивительно проста. Виртуальный 90-градусный треугольник состоит из двух известных длин, чтобы найти неизвестную третью длину:
- Фиксированная длина дельта-руки - это гипотенуза треугольника
- Горизонтальное расстояние между соединениями колонны и концевыми эффекторными соединениями рассчитывается из координат XY сопла и фиксированного положения колонны, чтобы определить длину нижней стороны треугольника.
- Длина верхней стороны треугольника вычисляется из двух предыдущих по теореме Пифагора
- Длина верхней стороны прибавляется к высоте сопла Z, чтобы получить необходимую высоту каретки
Я думаю, что лучшая ссылка на этот документ с открытым исходным кодом - документ Стив Грейва «Росток кинематики», rev3, доступный для загрузки здесь: https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ.
Некоторые соответствующие изображения:
Эти вычисления обратной кинематики выполняются для каждой каретки, чтобы получить целевое положение «пространства каретки», и это выполняется для каждого подсегмента пути.
Результаты этих шагов затем могут быть снова вставлены в стандартные методики интерполяции линейного пути для принтера, в которых он запускает шаги в необходимых соотношениях и с необходимыми скоростями для получения желаемого профиля движения по прямой и ускорения / скорости. (Как ЭТО сделано - другой вопрос.)
Чистый эффект состоит в том, что принтер будет перемещаться через серию небольших «линейных» перемещений каретки (линейное значение означает постоянную * скорость относительно времени), которые в совокупности приближают необходимые изогнутые (квадратичные по времени) движения каретки, необходимые для создания прямолинейное конечное движение.
* ( Постоянная скорость до замедления ускорения применяется, чтобы в любом случае подчиняться динамическим ограничениям. Опять же, это тема другого вопроса.)
Сегментация очень похожа на процесс использования многоугольника для аппроксимации круга. Если грани достаточно малы, полигон является хорошим приближением. Более высокие скорости сегментации дают меньше ошибок следования по пути. Основное концептуальное различие между дугами окружности рисования и путями движения Дельта состоит в том, что так называемая «граненая дуга» с дельта-сегментацией строится в координатах высота-время-время вместо координат X-vs-Y, которые вы использовали бы для рисования круг на экране компьютера.
Эта система используется в значительной степени потому, что поддержка принтеров в стиле Delta изначально была прикреплена к планировщикам движения на основе GRBL, которые были написаны исключительно для прямых линий движения в декартовых принтерах. Это была относительно минимальная модификация существующей кодовой базы по сравнению с реализацией полной квадратичной интерполяции пути.
Методы развивались на протяжении многих лет. И часто используются альтернативные подходы: например, ветвь dc42 RepRapFirmware выполняет точное отслеживание пути без сегментации, пересчитывая подходящее время для следующего шага после каждого шага . Это функционально эквивалентно аппроксимации круга с таким количеством граней полигона, что каждый пиксель на экране получает свой собственный фасет . Так что это точно так, как позволяет разрешение позиционирования двигателей. Недостатком является то, что этот метод без сегментации довольно ресурсоемкий, поэтому он работает только на относительно быстрых контроллерах, а не на старом 8-битном Atmega AVR, который работает сегодня с большинством существующих принтеров для потребителей и любителей.
Другие методы возможны. Академическая литература по параллельному управлению робототехникой - это целый мир математических методов и сложности для создания обобщенных алгоритмов управления, которые работают с широким спектром механизмов роботов. Версия, которую мы используем в 3d-принтерах с открытым исходным кодом, довольно проста и специфична для конкретного приложения.