Suche
preisvergleich_weiss

Recherche in 2.544.586 Produkten

Peter König 26

Der einfachste Plotter der Welt

Ein Raspberry Pi, drei Servos, zwei Eisstiele, eine Wäscheklammer, ein paar Kabel, Heißkleber und eine Stunde Zeit – mehr braucht es nicht für den Bau eines BrachioGraphen, der simpelsten denkbaren Zeichenmaschine.

In diesem ergänzenden Online-Artikel finden Sie zunächst die ausführliche Installationsanleitung für die Software des BrachioGraphen auf dem Raspberry Pi und für die Pakete, die für die Umrechnung von Digitalfotos und anderen Pixelbildern in Vektorvorlagen zum Plotten nötig sind. Es schließen sich ein paar Tipps für die Bilderzeugung sowie eine kleine Galerie mit Zeichnungen des Brachiographen an, die wir gerne um Ihre Beispiele erweiteren. Ganz am Ende finden Sie noch den alternativen Verdrahtungsplan, falls Sie die drei Servos an drei einzelne Massepins des Raspberry Pi anschließen wollen.

Software-Installation für den Plotter

Laden Sie sich ein aktuelles Raspbian herunter und packen Sie es auf eine ausreichend große SD-Karte. Wenn Sie das noch nie oder nicht oft genug gemacht haben, dass es Ihnen leicht von der Hand geht, hilft unsere ausführliche Online-Anleitung zum Einrichten des Raspberry Pi.

Schließen Sie an den Raspi Tastatur und Maus an und stecken das Netzteil ein, um den Einplatinenrechner zu starten. Verbinden Sie ihn mit dem Internet (per WLAN oder Ethernet) und spielen Sie alle Updates ein.

Jetzt geht es an die Installation der Pakete, die Sie für den Betrieb des Brachiographen brauchen. Da ist zuerst der Paketmanager pip für Python3. Auf einem frisch eingerichteten Raspbian mit allen Updates sollte der zwar drauf sein. Falls nicht, öffnen Sie ein Terminal und tippen Sie ein:

sudo apt-get install python3-pip

Falls pip für Python 3 (Aufruf später mit pip3) schon installiert ist, ist das kein Drama: Der Raspi merkt und meldet dies und installiert einfach nichts.

Hinweis: Bei unseren Versuchen meldete sich der Paketmanager apt beim ersten Aufruf mit dem Hinweis, dass durch die frisch eingespielten Updates diverse vorhandene Pakete jetzt obsolet wären. Sie können deshalb den Befehl sudo apt autoremove eintippen, der in diesem Hinweis genannt wird, um diese Pakete loszuwerden. Andernfalls kann es sein, dass der Hinweis auf die ausgemusterten Pakete jedesmal aufs Neue kommt, wenn Sie apt benutzen – und das wird in der Folge noch oft der Fall sein.

Des weiteren brauchen Sie die I/O-Pin-Bibliothek PIGPIO. Auch die sollte auf dem aktuellen Raspbian schon mit drauf sein, ansonsten helfen nacheinander die Eingaben:

sudo apt-get install pigpiod
pip3 install pigpio    

Dann installiert man die Mathematikbibliothek Numpy und vorab weitere Bibliotheken, auf die diese aufbaut:

sudo apt install libatlas3-base libgfortran5
pip3 install numpy 

Auf unserem frischen und aktualisierten Raspbian war libgfortran5 schon drauf, nur libatlas3-base wurde geladen. Dabei müssen Sie eine eventulle Nachfrage mit der Taste J (oder Y bei englischer Systemsprache) bestätigen, damit der Download der Pakete tatsächlich passiert (weil das über 11 MB Speicher belegt).

Installieren Sie dann mit pip3 die Hilfspakete tqdm für Fortschrittsbalken in der Konsole und readchar, damit man im Testmodus den Plotter mit Tastenkommandos steuern kann:

pip3 install tqdm readchar

Falls Sie dabei eine Warnung bekommen, dass tqdm nicht in den Path aufgenommen wurde, aber in /home/pi/.local/bin, können Sie die unserer Erfahrung nach ignorieren.

Schließlich muss die Software des Brachiographen noch auf den Pi. Dazu zieht man sich den Code direkt von GitHub. Das Versionskontrollsystem git sollte auf dem Raspi ebenfalls schon drauf sein, falls nicht, tippen Sie ein:

sudo apt-get install git 

Jetzt holen Sie sich den Code des Brachiographen über

git clone https://github.com/MakeMagazinDE/BrachioGraph.git

Die für den Betrieb des Plotters nötigen Python-Skripte erscheinen dadurch frisch von Github importiert im Verzeichnis /home/pi/BrachioGraph.

Funktionstest und Korrektur der Servorichtung

Jetzt wird es spannend. Öffnen Sie ein Terminal und starten Sie den PIGPIO-Demon, indem Sie in die Kommandozeile eingeben:

sudo pigpiod

Dieser Demon ist ein Hintergrundprozess, über den die GPIO-Pins durch die BrachioGraphen-Software angesteuert werden. Er läuft weiter, bis Sie den Raspi herunterfahren, selbst wenn Sie die Skripte für die Ansteuerung des Plotters unterbrechen und den Python-Interpreter beenden.

Anschließend wechseln Sie ins Programmverzeichnis:

cd BrachioGraph

und starten den Python-3-Interpreter durch Eingabe von

python3

Ab jetzt wird alles, was Sie hinter die Eingabeaufforderung von drei spitzen Klammern tippen, als Python-Code interpretiert und ausgeführt, sobald Sie die Enter-Taste betätigen. Keine Panik, Sie können den BrachioGraphen auch ohne jegliche Python-Kenntnisse bedienen. Wir zeigen Ihnen im Folgenden das Nötigste, was Sie dafür wissen müssen.

Tippen Sie nacheinander die beiden folgenden Zeilen und drücken Sie danach jeweils Enter:

from brachiograph import BrachioGraph
bg = BrachioGraph(inner_arm=8, outer_arm=8)

Damit machen Sie der Software die ersten Eigenschaften Ihres BrachioGraphen bekannt: die Länge des Ober- und Unterarms, jeweils in Zentimetern. Gleichzeitig haben Sie definiert, wie Sie Ihre Zeichenmaschine im Programm ansprechen werden, nämlich durch den Bezeichner bg. Wenn Sie im Folgenden Kommandos an den BrachioGraphen absetzen wollen, tippen Sie deshalb bg, gefolgt von einem Punkt und dem gewünschten Befehl – als Nächstes:

bg.set_angles(angle_1=-90, angle_2=90)

Das setzt das Schultergelenk auf den Winkel –90 Grad und das Ellenbogengelenk auf 90 Grad. Wenn sich die Servos jetzt nicht bewegt haben, ist das ein gutes Zeichen, denn sie sollten bei der Initialisierung bereits genau diese Positionen eingenommen haben.

Stecken Sie je ein Servohorn auf Schulter- und Ellenbogengelenk. Dann wiederholen Sie den Befehl von eben, nur dass Sie bei je einer Angabe die Winkelangaben um 5 Grad verändern. Mit den Pfeiltasten nach oben und unten können Sie schnell durch die Liste der zuvor eingegebenen Kommandos blättern und die dann verändern. Wenn Sie einen Wert erhöhen, sollte sich der entsprechende Servo im Uhrzeigersinn bewegen (Achtung: –85 ist größer als –90!). Falls ja, ist alles in Ordnung und Sie können den nächsten Abschnitt überspringen.

Korrektur der Servorichtung

Falls sich Ihr Schulterservo aber gerade andersherum bewegt als gedacht, muss man für ihn bei der Initalisierung des Plotters zusätzlich den Wert des Parameters servo_1_degree_ms angeben. Gibt man nichts an, benutzt die Software für den Schulterservo (servo_1) den Standardwert -10. Setzt man ihn explizit auf 10, dreht sich der Servon andersherum. Dazu startet man den Plotter neu mit:

bg = BrachioGraph(inner_arm=8, outer_arm=8, servo_1_degree_ms=10)

Dreht sich stattdessen der Ellenbogenservo falsch herum, fügt man bei der Plotterinitialisierung servo_2_degree_ms=-10 hinzu. Zu beachten: Hier ist der richtige Wert für die umgekehrte Drehrichtung -10, da der Standardwert 10 ist.

Wenn Sie später, wie im Heft beschrieben, den Plotter nicht jedes Mal aufs Neue von Hand initialisieren, sondern dazu die Datei plotter.py auslesen, müssen Sie natürlich gegebenenfalls auch darin die Werte für die beiden Parameter servo_1_degree_ms und servo_2_degree_ms anpassen.

Software-Installation für die Bildaufbereitung

Wenn Sie die Umwandlung von Pixelbildern in Vektoren und Servokommandos für den BrachioGraphen ebenfalls direkt auf dem Raspi erledigen wollen, können Sie gleich auch noch die dafür nötigen Pakete installieren, wie im folgenden beschrieben. Wir haben die beiden Installationsanleitungen allerdings getrennt, weil es unter Umständen sinnvoll sein kann, die Umwandlung auf einem anderen Rechner vorzunehmen, etwa wenn Sie den Raspi ohne Desktop und übers Netz oder USB betreiben wollen.

In diesem Fall brauchen Sie einen Rechner, auf dem Python 3 installiert ist. Wie für den Betrieb des BrachioGraphen brauchen Sie auch für die Bildvorbereitung die Bibliothek Numpy, wie oben beschrieben. Außerdem kopieren Sie sich auch auf diesen Rechner den Inhalt des oben erwähnten GitHub-Repository, da es auch die Python-Skripte für die Umsetzung von Pixelbildern in Vektorgrafiken und Servokommandos enthält.

Sie brauchen noch die Python-Bildverarbeitungsbibliothek Pillow, die für die Umwandlung von Bitmaps in Vektoren verwendet wird:

sudo apt install libwebp6 libtiff5 libjbig0 liblcms2-2 libwebpmux3 libopenjp2-7 libzstd1 libwebpdemux2 libjpeg-dev
pip3 install pillow

Optional: openCV

Im Prinzip sind Sie jetzt gerüstet für die Aufbereitung von Bildern. Etwas hübscher werden die Ergebnisse aber, wenn Sie noch die Bildverarbeitungsbibliothek openCV installieren.

Wenn Sie Ihre Bilder nicht auf dem Raspi selbst vorbereiten, klappt das ganz einfach durch Installation von openCV für Python, in der abgespeckten headless-Version:

pip3 install opencv-python-headless

Auf unserer frischen Python-3-Installation unter Windows konnten wir das Paket ohne Probleme installieren. Zwar können Sie diesen Schritt auch auf dem Raspberry Pi durchführen und der behauptet anschließend auch, die Installation hätte geklappt. Hat sie aber nicht – stattdessen müssen Sie noch eine Reihe von Paketen nachinstallieren und beim Aufruf von Python 3 eine Bibliotek mitladen, wie der Leser mit dem Pseudonym RMB (1) im Forum beschrieb (vielen Dank dafür!).

Bilder aufbereiten

Egal, ob mit openCV oder ohne – zum Aufbereiten der Bilder wechselt man wieder ins Verzeichnis BrachioGraph und startet den Python-Interpreter:

python3

Anschließend importieren Sie die Funktionen aus linedraw.py:

from linedraw import *

Wenn Sie dies auf dem Raspberry ohne OpenCV-Installation probieren, bekommen Sie eine Warnung, dass in den no-cv-mode gewechselt wird. Die Umsetzung in Linien funktioniert aber trotzdem.

Wandeln Sie anschließend ein Bild in eine JSON-Datei um, die der Plotter plotten kann:

image_to_json("bild", draw_contours=2, draw_hatch=16)

Das Python-Skript erwartet dabei, dass das Bild im Unterordner BrachioGraph/images liegt und legt im selben Verzeichnis eine SVG-Datei als Vorschau und eine JSON-Datei für den Plotter ab. Um eine Vorlage zu zeichen, wie im Heft beschrieben, müssen Sie diese allerdings zuvor ins Verzeichnis BrachioGraph verschieben.

Die beiden Zahlenwerte bei draw_contours und draw_hatch bestimmen die Details und die Dichte der Striche. Daniele Procida empfiehlt in seiner originalen Anleitung zum BrachioGraphen für die Kontur Werte zwischen 0.5 und 2 (je kleiner der Wert, desto mehr Striche werden erzeugt, umso länger dauert allerdings die Berechnung der Grafik vorab und hinterher die Zeichnung) und für die Schraffur (hatch) Werte zwischen 16 und 8. Möglichst viele Details sind nicht immer gut, gerade Porträtfotos sehen oft mit einer höheren Zahl (=weniger Linien) bei den Konturen besser aus.

Apropros Konturen: Falls die Umsetzung auf einer Plattform passiert, auf der openCV funktioniert, sind etwas hübschere Linien die Folge. Zum Vergleich haben wird das erste folgende Bild unter Windows mit openCV umgesetzt, das zweite stammt vom Raspi ohne openCV.

Umsetzung mit openCV-Unterstützung
Umsetzung ohne openCV-Unterstützung

Noch ein Hinweis: Der Plotter ist für Hochformate optimiert, also für Bilder, die höher als breit sind. Möchte man eine Vorlage im Querformat plotten, dreht man die mit einer Bildbearbeitung oder den Bordmitteln des Betriebssystem vor der Umrechnung in Konturen und Schraffuren um 90 Grad, um das Bild so groß wie möglich zu plotten. Allerdings ergibt sich dadurch eine etwas andere Bildwirkung, weil der Algorithmus die meisten Schraffurstriche parallel zur kürzeren Seite anlegt – bei echten Hochformaten verlaufen die horizontal, bei gedrehten Querformaten vertikal.

Galerie

In der folgenden Bildergalerie zeigen wir ausgewählte BrachioGraphien, also Zeichnungen, die unser Plotter geschaffen hat – für einige Bilder sieht man außerdem das Ausgangsbild und/oder die SVG-Vorschau. Wenn Sie selbst einen solchen Plotter gebaut haben, schicken Sie uns gerne Ihre Ergebnisse per Mail zu – wir wollen die Galerie um weitere Werke der Maschinenkunst erweitern!

BrachioGraphien – gezeichnet vom einfachsten Plotter der Welt (19 Bilder)

Für eine Zeichenmaschine ist der BrachioGraph zugegebenermaßen nicht besonders genau ...

Alternative Verkabelung

Wenn Sie statt der im Heft gezeigten Verkabelung lieber für jeden Servo ein einzelnes Jumperkabel für die Masseleitung an den Raspberry Pi anschließen wollen, folgen Sie einfach diesem Plan:

Die Masseleitungen sind hier an die Pins 6, 9 und 14 angeschlossen. (pek)

26 Kommentare

Themen: