Mit Xbox 360 Controller Raspberry Pi Roboter fernsteuern (Teil 6)

21. Januar 2017
886 Views
22 Comments

In diesem Teil wollen wir den Roboter nun auch noch mit einem Xbox 360 Controller fernsteuern. Im Vergleich zu der Infrarot Fernbedienung hat der Controller den Vorteil, dass er zwei Joysticks besitzt, welche optimal zum Steuern geeignet sind. Zusätzlich lässt sich mit dem zweiten Joystick z.B. eine Kamera drehen und die Knöpfe können ebenfalls mit Funktionen versehen werden.

Auch wenn wir bereits eine Steuerung realisiert haben, finde ich diese Art doch um einiges cooler. Daher geht es in diesem Video um die Einrichtung der kabellosen Xbox 360 Controller Fernsteuerung.

 

Zubehör

In diesem Tutorial wird nicht viel benötigt, im speziellen nur der Controller und Adapter:

Wer einen Raspberry Pi Zero verwendet, wird ggf. Probleme mit der Stromversorgung bekommen. Nichtsdestotrotz ist ein kleiner USB Hub nötig, da der einzige USB Port des Zero Models höchstwahrscheinlich für den Wlan Adapter gebraucht wird.

 

Vorbereitung & Installation des Xbox360 Controllers

Bevor wir den Controller mit dem Raspberry Pi verbinden und die Funktionen definieren, müssen die benötigten Treiber installiert werden. Im Tutorial „Raspberry Pi mittels Xbox 360 Controller steuern“ ist die Installation und einige Tests, ob der Controller erkannt wurde, genau erklärt. Die Beispiel Schritte sowie die Nutzung als Maus kannst du überspringen. Wichtig ist nur, dass bevor du fortfährst dein Xbox Controller also erkannt und bereit sein sollte.

Da das Kabel des Adapters doch recht lang ist, würde ich das beiliegende Gummi erst gar nicht abnehmen oder das Kabel ggf. wieder aufwickeln. Die Platzierung spielt dabei keine Rolle, da keine visuellen Infrarotsignale sondern Funksignale gesendet und empfangen werden. Im Video habe ich den Adapter vorne über die Ultraschall-„Augen“ gehängt, was vielleicht nicht die beste Wahl ist, sofern auch die automatisches Hinderniserkennung beibehalten bleiben soll 😉

 

Modul laden und Code erweitern

Zum Erkennen der Signale nutzen wir die selbe Bibliothek, die im vorherigen Tutorial auch genutzt wurde. Dafür laden wir uns zunächst diese Datei in unseren Roboter Ordner:

cd robot/
wget https://raw.githubusercontent.com/FRC4564/Xbox/2dcc49eb198e57e4dd0af9a15e53fef85c411ea1/xbox.py

Diese (und die math) Bibliothek binden wir in unserer Main-Datei ein. Dazu bearbeiten wir sie und ergänzen den Code am Anfang um die beiden import Befehle.

sudo nano robot.py

 

Anschließend gilt es den Code am Ende zu erweitern. Dazu erstellen wir zwei Funktionen, dessen Erklärung du nachfolgend findest.

Speichere und beende mit STRG+O und STRG+X.

Die Funktion xboxControl ist zum Verwalten der Tastendrücke/Bewegungen des Joysticks von dem Controller da. Hier können wir bestimmte Funktionen aufrufen, sofern eine Taste gedrückt wurde. In unserem Fall soll das Drücken der A-Taste den Roboter stoppen lassen (auch wenn der Joystick bewegt wird). Falls die Taste nicht gedrückt wird, so wollen wir den Roboter mit Hilfe des linken Joysticks steuern.

Die eigentliche Bewegung findet wiederum in der Funktion moveByAxis statt. Ist der Joystick in der Mitte (x = y = 0), so soll der Roboter stoppen, ansonsten in die angegebene Richtung fahren. Da der Code recht selbstbeschreibend ist, gehe ich hier nun nicht weiter darauf ein. Solltest du eine spezielle Frage haben, kannst du diese gerne als Kommentar posten.

Der Vollständigkeit halber muss noch gesagt werden, dass ein Bewegen des Joysticks nach hinten rechts bzw. hinten links keine zugeordnete Bewegung hat, da ich sie nicht gebraucht habe. Falls du die Funktionalität einbauen möchtest, musst du analog zu den vorherigen Abfragen den Winkel betrachten: Dieser liegt zwischen 180 und 270 falls der Stick sich unten links befindet und zwischen 270 und 360 im unteren rechten Bereich.

 

Code testen

Abschließend wollen wir den Roboter natürlich auch fahren lassen. Stelle dazu sicher, dass der Xbox 360 Controller an ist und erkannt wurde (gedrückte Tasten sollten erscheinen):

sudo xboxdrv --detach-kernel-driver

Wird die Eingabe erkannt, brich mit STRG+C ab.

Nun öffnest du die Python Konsole (sudo python) und kopierst folgenden Code hinein:

Sofern alles funktioniert kannst du den Roboter mit dem linken Steuerknüppel fernsteuern. Im nachfolgenden Video siehst du wie ich meinen Raspberry Pi Roboter mit Hilfe des Xbox 360 Conrtollers hin und her navigiere.

Sofern du nur eine kurze Drehung möchtest, darf der Stick auch nur kurz in diese Richtung gedreht werden. Da es damit manchmal gar nicht so einfach ist, den Roboter präzise zu steuern, habe ich den A-Knopf als Bremse vorgesehen.

 

Als Zusatz kann nun der rechte Controller bspw. einen Servo- oder Schrittmotor drehen, auf dem eine Livestream Kamera befestigt ist.

22 Kommentare

    • Du meinst mit Kamera drauf, sodass er automatisch diese erkennt? Falls ja, muss ich sagen, dass das den Rahmen sprengt. Damit beschäftigen sich u.a. ganze wissenschaftliche Teams und Firmen (Stichwort autonomes Fahren) und ist nicht so einfach wie es klingt 😀

      Antworten
  1. Was für mich auch interessant wäre, … hat evtl. jemand das Tutorial erfolgreich mit einem 4WD-Bausatz hinbekommen? Ich möchte das Fahrzeug gerne mit 4 Rädern statt diesen 3 Rädern bauen.

    Antworten
    • Du müsstest dazu nur den Code zum Fahren ein wenig ändern: Statt nur ein rechtes/linkes Rad zu drehen, müssen sich beide drehen. Und einen L293D mehr bräuchtest du.

      Antworten
  2. Hallo super Tutorial, es gibt zu diesen Themen sehr wenig in Deutsch.
    Was mich interessieren würde wäre eine Objektverfolgung über Kamera.

    Antworten
  3. Hallo,

    hat das hier zufällig jemand mit einem Playstation 3 Controller geschafft?
    Ich habe einen Raspberry Pi 3, welcher ja Bluetooth integriert hat und habe den Controller auch schon gekoppelt, sodass er unter /dev/input/js auftaucht.
    Allerdings habe ich keine Ahnung, wie ich den Controller hier einbinde um ihn für das Steuern der Servos zu nutzen :/ Bräuchte da bitte etwas Hilfe

    Antworten
    • Das Tutorial hier ist nur für Xbox 360 Controller und wird nicht mit einem Playstation Controller funktionieren. Eventuell gibt es andere Packages, die ihn unterstützen.

      Antworten
  4. Wie wäre es mit einem WebInterface zum Steuern des Roboters inkl. LiveStream des Bildes?
    Das ganze wäre mit einer Pan/Tilt-Kamera ganz interessant (könnte man über 2 Servos SG90 realisieren) und diese Servos noch über den XBox-Controller steuern.

    Antworten
  5. Hallo, ich wollte mich nach dem Tutorial für die Tiefenerkennung mit OpenCV erkundigen. Ist sowas geplant oder schon umgesetzt?

    Antworten
      • evtl. könnte man mit OpenCV auch Marker tracken und damit den Roboter selbstständig fahren lassen oder sowas? Fände ich auch interessant 🙂 Wäre schön, wenn du sowas umsetzen könntest.

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!