Es gibt zwei spezielle Hauptschritte für die Technik, die von den meisten Open-Source-3D-Druckercontrollern verwendet wird:
- Teilen Sie jedes lineare Gcode-Segment in viele sehr kleine Untersegmente ("Segmentierung").
- Verwenden Sie eine grundlegende Trigonometrie oder den pythagoreischen Satz, um die Extruderposition an die Wagenhöhe für jeden der drei Türme zu binden ("Inverse Kinematics"), um die Zielposition für jedes kleine Segment zu ermitteln
Die inverse Kinematik ist überraschend einfach. Ein virtuelles 90-Grad-Dreieck wird aus zwei bekannten Längen konstruiert, um die unbekannte dritte Länge zu lösen:
- Die feste Delta-Armlänge ist die Hypotenuse des Dreiecks
- Der horizontale Abstand zwischen den Säulenfugen und den Endeffektorfugen wird aus den XY-Koordinaten der Düse und der festen Position der Säule berechnet, um die Länge der Unterseite des Dreiecks zu bestimmen
- Die Länge der Oberseite des Dreiecks wird aus den beiden vorhergehenden über den Satz des Pythagoras berechnet
- Die Länge der Oberseite wird zur Höhe der Düse Z addiert, um die erforderliche Schlittenhöhe zu erhalten
Ich denke, die beste Open-Source-Referenz hier ist Steve Graves Rostock Kinematics-Dokument, rev3, das hier heruntergeladen werden kann: https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ
Einige relevante Bilder:
Diese inversen Kinematikberechnungen werden für jeden Wagen durchgeführt, um eine Zielposition "Wagenraum" zu erhalten, und dies wird für jedes Pfad-Teilsegment durchgeführt.
Die Ergebnisse dieser Schritte können dann wieder in die Standard-Linearpfad-Interpolationstechniken für den Drucker eingefügt werden, bei denen Schritte in den erforderlichen Verhältnissen und mit den erforderlichen Raten ausgelöst werden, um das gewünschte geradlinige Bewegungs- und Beschleunigungs- / Geschwindigkeitsprofil zu erzeugen. (Wie das gemacht wird, ist eine andere Frage.)
Der Nettoeffekt besteht darin, dass sich der Drucker durch eine Reihe kleiner "linearer" Wagenbewegungen bewegt (linear bedeutet konstante * Geschwindigkeit in Bezug auf die Zeit), die sich gemeinsam den erforderlichen gekrümmten (quadratische Position in Bezug auf die Zeit) Wagenbewegungen annähern, die zur Erzeugung von a erforderlich sind geradlinige Endeffektorbewegung.
* ( Konstante Geschwindigkeit vor Beschleunigungsverlangsamungen wird angewendet, um ohnehin dynamischen Einschränkungen zu entsprechen. Auch dies ist das Thema einer anderen Frage.)
Die Segmentierung ist dem Prozess der Verwendung eines Polygons zur Approximation eines Kreises sehr ähnlich. Wenn die Facetten klein genug sind, ist das Polygon eine gute Annäherung. Höhere Segmentierungsraten führen zu weniger Pfadverfolgungsfehlern. Der primäre konzeptionelle Unterschied zwischen dem Zeichnen von Kreisbögen und Delta-Bewegungspfaden besteht darin, dass der sogenannte "facettierte Bogen" mit Delta-Segmentierung in Höhen-Zeit-Koordinaten anstelle der X-gegen-Y-Koordinaten konstruiert wird, die Sie zum Zeichnen von a verwenden würden Kreis auf einem Computerbildschirm.
Dieses System wird größtenteils verwendet, weil die Unterstützung für Delta-Drucker ursprünglich auf GRBL-basierte Bewegungsplaner geschraubt wurde, die ausschließlich für geradlinige Bewegungspfade in kartesischen Druckern geschrieben wurden. Es war eine relativ minimale Modifikation der vorhandenen Codebasis im Vergleich zur Implementierung einer vollständigen quadratischen Pfadinterpolation.
Die Techniken haben sich im Laufe der Jahre weiterentwickelt. Oft werden alternative Ansätze verwendet: Beispielsweise führt die dc42-Verzweigung von RepRapFirmware eine genaue Pfadverfolgung ohne Segmentierung durch, indem nach jedem Schritt die richtige Zeit für den nächsten Schritt neu berechnet wird . Dies entspricht funktional der Approximation eines Kreises mit einer Polygonfacettenanzahl, die so hoch ist, dass jedes Pixel auf dem Bildschirm eine eigene Facette erhält . Es ist also genau so genau, wie es die Positionierungsauflösung der Motoren zulässt. Der Nachteil ist, dass diese segmentierungsfreie Technik ziemlich prozessorintensiv ist, sodass sie nur auf relativ schnellen Controllern funktioniert, nicht auf dem älteren 8-Bit-Atmega-AVR, mit dem die meisten heute vorhandenen Consumer- / Hobby-Drucker betrieben werden.
Andere Techniken sind möglich. Die akademische Literatur zur parallelen Robotiksteuerung ist eine ganz andere Welt mathematischer Techniken und Komplexität, um verallgemeinerte Steuerungsalgorithmen zu erstellen, die für eine Vielzahl von Robotermechanismen funktionieren. Die Version, die wir in Open-Source-3D-Druckern verwenden, ist im Vergleich recht einfach und anwendungsspezifisch.