Der Bereich Robotik ist ein sehr beliebtes Thema, wenn es um den Raspberry Pi geht. Neben normalen Roboterautos können u.a. auch Greifarme gesteuert werden, wobei es verschiedene Modelle gibt. In dieser Bauanleitung mit Tutorial geht es um den Zusammenbau und Testen eines Raspberry Pi 6 DOF Robot Arm, welcher einen Griff hat, womit z.B. Gegenstände gehalten oder aufgegriffen werden können.
Das „DOF“ steht für „degrees of freedom“ bzw. zu deutsch für „Freiheitsgrad„. Damit wird angegeben, wie viele individuell bewegbare Achsen es gibt. So gibt es auch bspw. 2DOF, 4DOF oder 5DOF Bausätze. Da der Preisunterschied aber nur gering ist, habe ich mich für die 6 DOF Variante entschieden. Zusätzlich ist diese auch am weitesten verbereitet, was den Softwaresupport angeht.
Zubehör
Bei den Bausätzen gibt es einige Unterschiede. Dabei sind nicht immer die Servomotoren mit dabei und auch in der unteren Platform gibt es kleinere Unterschiede. Die wichtigen Metallteile sind hingegen bei allen „6 DOF Robot Arm“ Bausätzen gleich.
Bei meinem Bausatz waren die Motoren nicht inklusive, weshalb ich folgendes genutzt habe:
- 6DOF Roboter Arm Bausatz
- 6x MG996R Servomotoren (ggf. zusätzliche als Ersatz)
- PCA9685 Treiber Board
- 5V Netzteil bzw. Schaltnetzteil (10A)
- ggf. Power Jack Adapter bei normalen (Universal-)Netzteil
- Jumper Kabel (ebay)
Zusammenbau des 6 DOF Roboter Arm für den Raspberry Pi
Das Set kommt mit einigen Metallteilen und sehr vielen Schrauben, welche hauptsächlich zwei Aufgaben haben:
- Dünne Schrauben (kurz & lang): Verbinden der Teile
- Dicke Schrauben: Servos an den Metallteilen befestigen
Bevor wir mit dem Aufbau starten, sollten die Servos in Position gebracht werden, damit sie später optimal gesteuert werden können. Dazu solltest du zunächst das Tutorial für den PCA9685 durchgehen. Darin wird die benötigte Bibliothek installiert und gezeigt, wie man die Servo-Positionen setzen kann.
Die Initialwerte der Servos (bei 60Hz) sollten auf diese Werte gesetzt werden:
- Greiffinger: 555
- restliche 5 Motoren: 475
Bei mir haben die Schrauben nicht durch die runden Plastikaufsätze gepasst, weshalb ich die Löcher mit einer Bohrmaschine vergrößert habe (3-4mm). Dies solltest du zunächst mit allen Aufsätzen machen:
Fangen wir nun mit dem Zusammenbau der Teile an.
Als erstes die Basis: Die zwei langen Teile werden zusammen geschraubt:
Darauf kommt eine Servohalterung:
In die Halterung kommt ein Servo Motor, welcher mit großen Schrauben befestigt wird.
Nun nehmen wir eine weitere Halterung und schrauben seitlich eine runde Plastikhalterung an. Diese wird auf dem gerade montierten Motor der Basis befestigt:
Anschließend schrauben wir zwei der U-Stücke aneinander:
Diese werden mit Hilfe einer langen dünnen Schraube und einer der runden Ösen an der vorherigen Servo Halterung befestigt.
Auf einem neuen Servo bringen wir wieder ein rundes Plastikstück an. Wir stellen die U-Stücke senkrecht auf und befestigen sie an dem Plastikstück. Danach platzierst du den eben eingefügten Motor noch mit großen Schrauben an der Halterung.
Am oberen Ende des U-Stücks befestigen wir auf die gleiche Weise eine Halterung (mit langer Schraube und Öse).
Bevor wir nun hier einen Servo befestigen, müssen wir noch eine kleine Vorbereitung treffen. Nimm das verbleibende U-Stück und das L-Stück an der kürzeren Seite und festige beide aneinander:
Dies befestigst du nun an der noch leeren Servo-Halterung:
Dort hinein kommt jetzt erst ein Servo, welcher bereits einen runden Plastikaufsatz montiert hat, hinein. Der Aufsatz sollte ebenfalls nach oben zeigen::
Wir nehmen nun die letzten beiden verbleibenden Halterungen und schrauben diese wie folgt fest:
Mit Hilfe der letzten runden Öse, einer langen Schraube und einer Mutter, befestigen wir die zwei verschraubten Halterungen am letzten U-Stück:
Wahrscheinlich wird es dir bereits klar sein was als nächstes kommt. Der vorletzte Servo wird mit Plastikaufsatz in die Halterung geschraubt (diesmal nicht nach oben zeigend, sondern 90° zur Seite):
Kommen wir zum letzten unverbauten Servomotor. Dieser wird ganz einfach nur auf der letzte Halterung montiert.
Widmen wir uns nun dem Zusammenbau des Metallgriffs. Zunächst befestigen wir das Plastikrädchen mit zwei Schrauben am Griff:
Nun wird noch der Servo mit Schrauben am Griff befestigt:
Nun kannst du Plastikaufsatz anbringen (Griff sollte geschlossen sein) und mit einer Schraube justieren:
Am Gelenk wird ein weiterer Plastikaufsatz angebracht:
Als letztes setzten wir den montierten Griff einfach auf den obersten Motor auf. Falls der Aufsatz zu locker ist, kannst du das letzte Plastikstück erst auf dem Gelenk-Servo befestigen und anschließend erst mit dem Griff verschrauben.
Zusammengebaut sieht das ganze dann so aus:
Die Kabel der Servos sind etwas zu kurz aber wir können sie mit Jumper Kabeln verlängern. Es bietet sich an diese außerdem mit Kabelbindern zu verbinden, damit etwas Ordnung einkehrt.
Verkabelung des Robot Arms am Raspberry Pi’s
Zunächst widmen wir uns der Verkabelung des PCA9685 Servo Treiber Boards, sofern du diesen nicht bereits mit dem Raspberry Pi verbunden hast. Hierbei wird der I2C Bus genommen, wodurch wir das Board wie folgt verbinden:
PCA9685 | Raspberry Pi |
---|---|
SCL | GPIO 3 / SCL (Pin 5) |
SDA | GPIO 2 / SDA (Pin 3) |
VCC / V | 3,3V (pin 1) |
GND | GND (Pin 6) |
Bevor wird die Servos anschließen, kümmern wir und noch um die externe Stromversorgung. Entweder du hast ein 5V Universalnetzteil, welches genügend Strom liefert, oder aber du nutzt ein Schaltnetzteil, so wie ich ebenfalls. Beim Universaltzteil ist lediglich ein Power Jack Adapter nötig. Du kannst die Spannungspins einfach – wie in der Abbildung zu sehen ist – verbinden.
Falls du hingegen ein 5V Schaltnetzteil (10A) nutzt, so brauchst du ein zusätzliches Stromkabel, welches aufgeschnitten wird. Die Kabel werden wie folgt an das Netzteil angeschlossen:
- Schwarzes bzw. braunes Kabel -> „L“.
- Blaues Kabel -> „N“.
- Grün-gelbes Kabel -> „PE“ bzw. Erdungssymbol.
Hier ist Vorsicht geboten! Bei Unsicherheit solltest du einen Fachmann fragen bzw. ein reguläres Universalnetzteil nehmen. Etwas genauer habe ich das Thema u.a. hier erläutert.
Zuguterletzt schließen wir die Servos an den PCA9685. Hierbei kommt der unterste Motor an Position 0, der darüber an Position 1 usw. Der Servo des Griffs ist an Position 5.
Raspberry Pi 6 DOF Robot Arm Bibliothek laden & testen
Um den Roboter Arm zu testen, muss wie gesagt zunächst die Adafruit PCA9685 Bibliothek installiert sein.
Anschließend können wir eine von mir modifizierte kleine Python Bibliothek laden und im Terminal ausführen:
git clone https://github.com/tutRPi/6DOF-Robot-Arm cd 6DOF-Robot-Arm sudo python example.py
Ich habe der ursprünglichen Bibliothek noch etwas Code hinzugefügt, sodass der Arm z.B. „herunterfahren“ (sleep) kann und nicht in sich zusammenfällt, sobald der Strom weg ist.
Habt ihr Anregungen / Ideen für Projekte mit dem 6 DOF Roboterarm oder sogar schon ein Projekt umgesetzt? Als nächstes ist von mir die Steuerung per Xbox 360 Controller geplant.
15 Kommentare
Schöne Sache erstmal 🙂
Gibt es dazu auch mal ein Video, wie das ganze dann in Action aussieht?
MfG
Nico
Bisher nur auf Facebook: https://www.facebook.com/tutorialsRaspberryPi/videos/1709404802686267/
Ich habe den im Artikel abgebildeten Roboterarm bei Amazon leider nicht gefunden… Kann ich bitte einen direkten Link zu ihm bekommen? Ich möchte der Anleitung möglichst genau folgen! Gibt es auch einen Lin kurz dem Motoren
Und welche sind die im Beispiel verwendeten MG996R Motoren ? Sie sollen genau in den Roboterarm passen! Gibt es hier auch einen Link?
Danke, Dirk
Das ist dieser: http://amzn.to/2AdK4lp
MG996R Motoren sind alle baugleich – achte nur auf die Bezeichnung: http://amzn.to/2A9BPJ3
Hallo Felix,
der Arm hat auf Amazon zwei sehr schlechte Bewertungen.
Kannst du diese bestätigen?
Jein, es kommt drauf an: Für den Preis finde ich ihn in Ordnung. Klar ist, dass man keinen Hightech Industrie Roboterarm für wenig Geld bekommt. Daher waren meine Erwartungen auch nicht zu hoch, jedoch entäuscht wurde ich auch nicht.
Das eigentliche „Problem“ sind die Servos: Der Standardansatz (auch in meinem Video) ist direkt die neue Position des Servos zu setzen. Das verursacht Zuckungen (bspw. gerade noch auf 45°, plötzlich auf 90° in wenigen Zehntelsekunden). Daher wäre es besser wenn man langsam interpoliert. Zwar verliert man etwas an Schnelligkeit, dafür ruckelt es aber nicht mehr so. Vielleicht code ich das wenn ich Zeit habe (ansonsten darf jeder gerne mein Repo forken und modifizieren).
LG, Felix
Hallo Felix
Ich habe schon mal vor, einen Roboterarm zu bestellen.
Im Internet habe ich folgenden Roboterarm gefunden:
https://www.reichelt.com/ch/de/?ACTION=3;ARTICLE=207966;SEARCH=ROBOT02
Denkst du, dass dieser geeignet ist, um ihn mit dem Raspberry Pi 3 anzusteuern?
Und kann ich dafür dein Tutorial benutzen?
Falls du mir einen anderen Arm empfehlen würdest, wäre ich sehr dankbar.
Ich danke dir jetzt schon für deine Hilfe.
Freundliche Grüsse
Es kommt nur auf die Motoren an, weniger auf den eigentlichen Arm. Deiner scheint geeignet, du kannst aber auch den verlinkten Arm nehmen.
Kann ich denn genauso mit meinen Motoren umgehen, wie in diesem Tutorial? ( Roboterarm: https://www.conrad.ch/de/joy-it-roboterarm-bausatz-ausfuehrung-bausatzbaustein-bausatz-1573539.html )
PS: Ich habe bis jetzt die Adafruit Bibliothek heruntergeladen und auch die von dir modifizierte Python Bibliothek geladen, doch ich habe es nicht geschafft, den Roboterarm in Bewegung zu kriegen.
Sollten die gleichen Motoren sein, allerdings muss natürlich genug Spannung anliegen.
Hallo Felix.
Kann ich dieses Netzteil für den Roboterarm verwenden?
https://www.conrad.ch/de/acdc-netzteilbaustein-geschlossen-mean-well-rs-50-5-5-vdc-10-a-50-w-1297303.html
Und kann ich einfach zwei Joysticks bestellen, damit ich den Roboterarm damit steuern kann?
Und Wie wurde der Arm im Video Bewegt einfach über Tastatur ? oder Handyapp?
was würde noch gebraucht werden ?
Reicht es das Programm zu starten oder muss davor noch etwas angepasst werden?
Die einzelnen Servomotoren kann ich mit dem Tutorial https://tutorials-raspberrypi.de/mehrere-servo-motoren-steuern-raspberry-pi-pca9685/ ansteuern, eine externe Stromquelle habe ich auch angeschlossen. Bei dem Beispiel für den Roboter passiert allerdings nichts. Mir wird nur die Print-Ausgabe angezeigt:
Report logged HAND: :Open
Report logged SERVO: :Move channel 5 to 60 percent. Value of 420.
…
Kannst du mir weiterhelfen?
Servus
bin neu auf dem Gebiet und würde gern wissen ob man statt PCA9685 Treiber Board auch ein ESP32 nutzen könnte ?