Auf einem kartesischen Drucker sind Bewegungen wirklich einfach. Wenn wir davon ausgehen, dass der Drucker auf jeder Achse 100 Schritte / mm hat, beträgt eine Bewegung von 10 mm auf einer Achse nur 1000 Schritte auf dieser Achse.
Bewegungen, die nicht an einer Achse ausgerichtet sind, sind ebenfalls einfach. Ein Wechsel von x, y = 0,0 zu 10,10 wäre 1000 Schritte auf x und y.
Bei Deltas muss sich auch bei einfachen Bewegungen mehr als ein Motor bewegen. Die Berechnung der Anzahl der Schritte auf jeder Achse, die zum Erreichen des Ziels erforderlich sind, ergibt wahrscheinlich eine gekrümmte Bewegung.
Was ist der Algorithmus, um die Schritte für eine bestimmte Bewegung für einen Delta-Drucker zu berechnen?
Antworten:
Es gibt zwei spezielle Hauptschritte für die Technik, die von den meisten Open-Source-3D-Druckercontrollern verwendet wird:
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:
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.
quelle
Ich beschreibe, wie dies in der Marlin-Firmware gemacht wird.
Der erste Schritt besteht darin, eine lineare Bewegung von (x, y, z) nach (x ', y', z ') in viele diskrete Segmente aufzuteilen. Zu diesem Zweck wird die Zeit berechnet, die die Bewegung bei einer bestimmten Geschwindigkeit dauern würde, und der Wert delta_segments_per_second wird verwendet, um die Anzahl der verwendeten Segmente zu berechnen.
Dies erfolgt in der Funktion prepare_move_delta in der Datei Marlin_main.cpp. Die Endpunkte jedes dieser Segmente werden dann an die Funktion berechne_delta übergeben :
Diese Funktion kümmert sich um die Delta-Geometrie und die Berechnungen, die erforderlich sind, um die (x, y, z) -Koordinaten der Segmentendpunkte in entsprechende Positionen für die Wagen umzuwandeln. Die übersetzten Koordinaten werden dann an plan_buffer_line übergeben , das die für jeden Schrittmotor erforderlichen Schritte berechnet und diese Schritte tatsächlich ausführt .
Die genaue Kinematik, die in dieser Funktion verwendet wird, wird im Marlin-Github ausführlicher erläutert .
Es ist wichtig zu beachten, dass plan_buffer_line die Wagen linear bewegt und der Druckkopf somit einen Bogen und keine gerade Linie beschreibt. Eine gerade Bewegung wird somit durch viele kleine Bögen angenähert.
quelle