Motivation
Mir kam die Idee eines Plotters schon recht früh: Als ich noch viel mit Lego-Technik konstruierte. Damals versuchte ich, möglichst realitätsnah die Funktion eines echten Druckers nach zu bauen. Dadurch bekam der Plotter zwei Achsen. Mein sehr ehrgeiziges Ziel damals war es, zunächst meine auf dem Computer geschriebenen Hausaufgaben in Handschrift umzuwandeln, damit ich diese dann abgeben konnte. Dies hätte mir das mühsame Abschreiben erspart. Nachdem ich zunächst mit Zahnrädern experimentierte, beschloss ich auf Grund der Ungenauigkeit auf einen Seilzug umzusteigen. Doch dies verbesserte das Problem nur minimal. Zudem war es schwierig, für die Lego Technik Motoren einen Treiber zu schreiben. Im Endeffekt war ich so gerade einmal in der Lage ein Rechteck zu zeichnen und da konnte man noch nicht einmal an Kreise denken. Jetzt im Rückblick hätte ich viele weitere Sensoren benötigt, wie zum Beispiel Umdrehungssensoren, um die Positionen des Stiftes zu bestimmen.
Das Bild zeigt den ersten Entwurf meines Plotters von 2017
Durch Inspirationen im Internet bin ich dann später auf die Idee eines zweiarmigen Roboters gekommen. Während ich zunächst für die Berechnungen auf die Trigonometrie zurückgriff, konnte ich später sehr viel „einfacher“ diese mit Hilfe der Vektorrechnung durchführen. Letztendlich konnte ich durch eine eigene Simulation meine Berechnungen bestätigen.
Aufbau des Plotters
Der Plotter ist nicht abgebaut wie ein normaler Drucker mit X -und Y Achsen, sondern der menschlichen Motorik nachempfunden. Er besitzt zwei Arme mit zwei Motoren. Ein Stift ist am vorderen Ende der beiden Arme angebracht. Somit kann sich dieser Punkt nur durch die Einstellung der beiden Winkel bewegen. Dabei sind Bewegungen in alle Richtungen in einem bestimmten Umkreis möglich. Der Umkreis ist abhängig von den Längen der einzelnen Segmente. Allerdings ist auch die punktuelle Abdeckung des Einflussbereiches abhängig von der Genauigkeit der Motoren und nimmt mit dem Radius ab. Ich arbeite mit den Schrittmotoren der Nema 17er Reihe, welche im 3D Druck oft eingesetzt wird. Sie können eine komplette Drehung in 200 Schritte einteilen. Somit kann pro Schritt eine Genauigkeit von 1,8° erreicht werden. Eine höhere Genauigkeit könnte mit einer entsprechenden Übersetzung erreicht werden. In diesem Projekt habe ich mich allerdings dazu entschieden, eine direkte 1:1 Übersetzung zu wählen, bin aber für eine spätere Änderung dieser Strategie offen.
Grundsätzlich stellen sich aber zwei Fragen: Wo befindet sich der Stift, wenn ich zwei Winkel an den Motoren einstelle? Und welche Winkel muss ich einstellen, um einen Punkt X zu erreichen?
Das Bild zeigt den ersten Entwurf meines Plotters von 2017
Der Plotter besteht aus zwei Ober -und Unterarmen, welche mit Vektoren beschrieben werden können. Von oben betrachtet bildet sich durch die Anordnung der Vektoren so ein Pentagon. Dadurch ergeben sich drei Punkte, welche es zu bestimmen gilt. Die Position der Motoren ist bereits gegeben. Zu diesen drei Punkten gehören auch drei Winkel. Je nachdem welche Größen gesucht werden, sind die beiden Winkel der Motoren bekannt oder auch nicht. Alle Winkel besitzen „nicht erlaubte“ Zustände, um Selbstkollisionen zu vermeiden. Dazu später mehr.
Skizze für die nachfolgenden Berechnungen
Um die Berechnungen zu vereinfachen, bleibe ich im zweidimensionalen Bereich. Dies kann später aber durch eine Transformation auf eine Ebene im dreidimensionalen Raum erweitert werden. Da ich bei meinen Berechnungen auf konkrete Werte verzichte, können die Längen der einzelnen Armsegmente später mit einer beliebigen positiven Zahl belegt werden. In meinen Veranschaulichungen werde ich das Koordinatensystem wie folgt definieren: Die Motoren befinden sich auf der Y-Achse. Und die beiden Arme sind nach Links in den positiven Zahlenbereich der X-Achse ausgerichtet. Die Motoren befinden sich in einem definierten Abstand zueinander. Dabei lege ich die Mitte dieser Länge auf der X-Achse.
Mathematische Formeln
Nachfolgend die erforderlichen Berechnungen für die Position, sowie auch für die beiden Winkel.
Die Berechnungen mit dem Programm OneNote skizziert
Der Python-Simulator
Den Python-Simulator des Plotters habe ich vor allem deshalb gebaut, um meine theoretischen Berechnungen praktisch nachzuweisen zu können. Dies hat mir besonders geholfen noch einige Hürden zu erkennen. Die Grafik ist dabei bewusst relativ simpel gehalten. Für die Erstellung der Oberfläche habe ich die einfache Python Library Tkinter genutzt. Für die mathematischen Berechnungen habe ich die Standard-Library numpy hinzugezogen. Zentral sind die beiden Funktionen “position” und “angles”.
Die Funktion Position kann anhand eines Punktes die fehlenden Punkte und Winkel des Pentagons berechnen. Die Rückgabe erfolgt als Pentagon-Objekt. Dabei wird auch die Tatsache berücksichtigt, dass nicht alle Punkte erreichbar sind und Selbstkollisionen ausgeschlossen werden können.
Die Funktion Angles kann durch die Übergabe der aktuellen Winkel an den beiden Motoren die genaue Position des Stiftes ermitteln. Daher stellt dies die Umkehrung der Funktion Position dar. Hierbei werden natürlich auch Winkel-Grenzen beachtet.
Falls du den Simulator auch auspobieren willst, findest du den Code in meinem Reposiory auf Github.
Mitlerweile brauche ich zwar keine handschriftlichen Schulhausaufgaben mehr abzugeben, aber dies schein in greifbare Nähe zu rücken.