Roboter Arm mit Xbox 360 Controller am Raspberry Pi steuern

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:

 

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):

  1. Mit RB (rechts) und LB (links) wird der unterste Motor gesteuert. Du kannst die Schnelligkeit bzw. den hinzukommenden Winkel im Skript anpassen.
  2. Zum Hoch/Runter fahren des zweiten Motors wird das DPAD genutzt (hoch/runter). Auch hier ist der Winkel anpassbar.
  3. Dieser dritte Motor fährt ebenfalls hoch bzw. runter, wird allerdings mit den Tasten A (hoch) und Y (runter) gesteuert. Winkel ebenfalls anpassbar.
  4. 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.
  5. 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.
  6. 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.

2 Kommentare

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!