In einem der vorherigen Tutorials haben wir einen 6-gelenkigen Roboter Arm (6DOF) aufgebaut, verbunden und bereits in Betrieb genommen. In diesem Tutorial möchte ich zeigen, wie man bspw. einen Xbox 360 Controller nutzen kann, um alle sechs Gelenke des Arms von Hand zu steuern. Das hat den Vorteil, dass der Arm recht intuitiv für verschiedene Aufgaben genutzt werden kann.
Der Xbox 360 Controller eignet sich im Generellen sehr gut zur Steuerung von verschiedenen Geräten am Raspberry Pi, wie bspw. unserem Roboter Auto, welches wir bereits in einem vorherigen Tutorial gebaut haben.
Zubehör
Ich gehe davon aus, dass du den Roboter Arm inkl. Zubehör bereits fertig montiert hast. Daher sind nur noch folgende Teile neben dem Raspberry Pi notwendig:
Im Tutorial zum Zusammenbau des 6-gelenkigen Bausatz haben wir folgendes verwendet:
- 6DOF Robot Arm
- 6x MG996R Servos
- PCA9685
- Schaltnetzteil (10A)
- Jumper Kabel, ebay
Aufbau & Vorbereitung
Falls du deinen Roboter Arm noch nicht zusammengebaut hast, solltest du diesem Tutorial folgen:
6-Gelenkigen Roboter Arm am Raspberry Pi betreiben (6DOF)
Dabei aktivieren wir I2C, womit das PCA9685 Treiber Board gesteuert wird. Sofern du alles entsprechen aufgebaut, verkabelt und installiert hast, können wir zum nächsten Schritt übergehen und den nötigen Xbox 360 Treiber für Raspbian installieren.
Öffne hierfür ein Terminal (z.B. per SSH) und gib folgendes ein:
sudo apt-get install xboxdrv
(Wenn du die generelle Steuerung mit dem Xbox 360 Controller verstehen willst, solltest du dir dieses Tutorial ansehen)
Schließe nun den USB Adapter des Controllers an und starte den Xbox Controller. Im verlinkten Tutorial ist ebenfalls beschrieben, wie man testet, ob alles richtig erkannt wurde. Der Prozess ist aber sehr einfach und sollte keine weiteren Schwierigkeiten machen.
Code laden & testen
Zunächst einmal „klonen“ wir den Code meines Verzeichnisses aus Github:
git clone --recursive https://github.com/tutRPi/Raspberry-Pi-6DOF-Robot-Arm-Xbox360-Control
Hierbei werden u.a. die beiden Bibliotheken aus den anderen Tutorials als Abhängigkeiten genutzt.
Starten wir zunächst das Programm mittels:
sudo python control.py
Die Steuerung der Motoren ist wie folgt (von unten):
- Mit RB (rechts) und LB (links) wird der unterste Motor gesteuert. Du kannst die Schnelligkeit bzw. den hinzukommenden Winkel im Skript anpassen.
- Zum Hoch/Runter fahren des zweiten Motors wird das DPAD genutzt (hoch/runter). Auch hier ist der Winkel anpassbar.
- Dieser dritte Motor fährt ebenfalls hoch bzw. runter, wird allerdings mit den Tasten A (hoch) und Y (runter) gesteuert. Winkel ebenfalls anpassbar.
- Der vierte Motor wird mittels der Auf und Ab-Bewegung des linken Joysticks gesteuert. Falls du den Joystick loslassen möchtest, aber der Motor in der Position verbleiben soll, kannst du den Stick drücken, was die Position einfrieren lässt. Erst nach erneutem Drücken kann die Position dann wieder verändert werden.
- Der Motor zur Rotation der Hand wird mit dem rechten Joystick gesteuert, wobei nur seitliche Bewegungen wichtig sind. Ebenfalls kannst du die Position durch Drücken des Joysticks einfrieren.
- Der verbleibende Motor ist nur dazu da die Hand / Greifarm zu öffnen. Die Steuerung erfolgt mittels der Stärke von RT. Komplett gedrückt ist die Hand zu und komplett loslassen lässt die Hand öffnen. Dazwischen wird interpoliert.
Dabei gehe ich davon aus, dass der unterste Motor an Position 0 des PCA9685 verbunden ist, der darüber an Position 1, usw. Solltest du davon abweichen, musst du den Code der Datei entsprechend anpassen.
Neben dieser Anwendungsmöglichkeit kann man den 6DOF Roboter Arm sicherlich auch weiter automatisieren. Was mir hierzu als erstes einfällt ist die Steuerung per Bilderkennung mittels OpenCV.
9 Kommentare
Das für das Tutorial. Kann man auch 4DOF Roboter Arme steuern?
Klar! Du müsstest nur die Tasten ggf. anders belegen.
Hallo Felix,
ich habe ein folgendes Problem.
Wenn ich alles so mache wie oben beschrieben und im vorherigen Tutorial findet er bei mir die python control.py datei nicht. Wenn ich es versuche vom Raspberry hochzuladen geht es auch nicht weil er die komponente nicht findet. Außerdem findet er die Adafruit_pca…. bibliothek nicht.
Kannst du mir da behilflich sein?
Bist du im richtigen Verzeichnis, wo sich die control.py befindet?
Muss ich das seperat angeben? Ich habe die vermutung , dass es an der Python version liegt.
Im Raspberry Program zeigt er mir Python 3.7.3 an
wie kann ich meinen Paketnamen verändern?
Hallo wie kann ich es ändern das ich den Code ohne Wireless Controller nutzen kann?
MFG
Alex
Was genau willst du stattdessen verwenden?
kabel gebundenen Xbox 360 controller