Fernsteuerung mit Gamepad oder Joystick

Überblick

Bereits im vorherigen Beitrag wurde die Möglichkeit vorgestellt, mit einem Joystick oder Gamepad, einem PC und einem PiKoder/SSC bis zu acht Servos über eine USB-Schnittstelle zu steuern. Hier wird nun beschrieben, wie eine drahtlose Modellfernsteuerung mit einem PiKoder – Empfänger, dem PiKoder/SSC RX, realisert werden kann.  Zur Signalübertragung kommt Bluetooth zum Einsatz.

Aufbau

Zunächst ist der PiKoder/SSC RX auf der Ebene des Betriebssystems mit dem PC zu verbinden. Hierzu sucht man zunächst in der Gerätesteuerung nach neuen Bluetoothgeräten.

Nach kurzer Zeit sollte das Bluetooth-Modul des Empfängers angeboten werden. Der PIN lautet “1234”.

Mit der Auswahl “Verbinden” erfolgt die Kopplung (Pairing) auf Systemebene.

Wie die folgende Ansicht aus dem Geräte-Manager zeigt, werden mit der Kopplung systemseitig auch zwei virtuelle serielle Schnittstellen angelegt auf die wir später im Programm zum Verbindungsaufbau zugreifen. 

Damit ist die Einrichtung abgeschlossen und das Programm JoystickRC kann jetzt wie im vorherigen Beitrag beschrieben gestartet werden. 

DiddyBorg mit QGroundControl – Joystick fernsteuern

In diesem Blog beschreibe ich, wie ich die Joystick- / Gamepad-Fernsteuerung meines RPI-gesteuerten DiddyBorg zu QGroundControl und MAVLink als Kommunikationsprotokoll weiter entwickelt habe. 

Damit habe ich die Basis geschaffen, um zukünftig in einer Standardumgebung weitere Sensoren zu verarbeiten und Missionen für den DiddyBorg zu planen und durchzuführen.

Softwareinstallation auf dem Raspberry Pi (RPi)

Auf dem RPi installieren Sie zunächst pymavlink, die Python-Version der MAVLink-Libraries. Am einfachsten geht dies mit PIP:

pip install pymavlink

Danach müssen Sie das Modul mavutil.py ersetzen, weil ansonsten aufgrund eines pymavlink-Issues keine Verbindung zwischen dem RPi und QGroundControl zustande kommt. Hierzu suchen Sie den Installationsort der pymavlink-Library mit:

pip list -v  

 

Dann ersetzen Sie das mavutil.py – Modul mit der Version im github-Repository zu diesem Blog. Die neue Version ist rückwärtskompatibel.

Schließlich erstellen Sie ein Verzeichnis, z.B. diddy2QGC in das Sie die Python-Module diddy2QGroundControl.py und ThunderBorg3.py kopieren. In diesem Verzeichnis starten Sie dann später das Python-Skript mit:

 python diddy2QGroundControl.py

 

Softwareinstallation auf dem Desktop

Installieren Sie QGroundControl auf Ihrem Desktop.

Starten der Anwendungen

Stellen Sie sicher, dass sich der RPi und Ihr Desktop im gleichen Netzwerk befinden und starten Sie QGroundControl (QGC) und das Python-Skript (die Reihenfolge ist ohne Bedeutung). 

Der DiddyBorg meldet sich bei der QGC an und Sie finden dann in den Vehicle-Einstellungen die Möglichkeit, Ihren Joystick einzulernen. Bitte beachten Sie dabei, dass diddy2QGroundControl.py im Mode 2 den Roll-Kanal für die Rechts/Links-Steuerung und den invertierten Wert des Pitch-Kanals für die Motorsteuerung verwendet.

 

 

DiddyBorg mit Gamepad oder Joystick fernsteuern

In diesem Blog stelle ich meine Windows-App JoystickRC4DiddyBorg zur Fernsteuerung des DiddyBorg (von PiBorg) mit einem Joystick oder Gamepad vor. 

Die DiddyBorg-Beispielprogramme, die vom Hersteller PiBorg veröffentlicht wurden, enthalten zwar auch ein Python-Fernsteuerscript mit Joystick, die aber Bluetooth verwendet und daher nur eine recht beschränkte Reichweite aufweist. 

Die hier vorgestellte App verwendet das vorhandene WLAN und UDP als Protokoll, um eine ausreichende Agilität der Fernsteuerung sicher zu stellen. Aus Sicherheitsgründen ist die Time-Out-Logik der Motorsteuerung ThunderBorg aktiviert.

Installation der Software

Der DiddyBorg benötigt als Empfänger ein Python-Script JoystickRC4DiddyBorg, das Sie auf github.com finden. Zusätzlich zum Empfängerprogramm finden Sie im Repository auch eine Version der ThunderBorg – Library für Python 3.x (die  Beispielprogramme für den DiddyBorg basieren noch auf Python 2.x).

Am einfachsten ist es, die beiden Dateien zusätzlich in das Verzeichnis mit den Beispielen zu kopieren – dann sollte das Script ohne weitere Anpassungen von Pfadnamen funktionieren.

Auf der PC – Seite installieren Sie die gleichnamige Windows App JoystickRC4DiddyBorg, die Sie kostenfrei im Microsoft App Store erhalten. 

Bedienung

Starten Sie zuerst das Python-Script auf dem DiddyBorg. Wenn Sie einen Bildschirm angeschlossen haben, dann meldet sich das Programm und gibt an, dass es auf einen  Client wartet.

Wenn Sie die PC App starten, dann sucht diese automatisch nach einem DiddyBorg mit einem aktiven und kompatiblen Empfänger im lokalen WLAN (mit dem sowohl der DiddyBorg als auch der verwendete PC verbunden sein müssen). Kann keine Verbindung hergestellt werden, dann erfolgt eine entsprechende Fehlermeldung. 

Nach dem erfolgreichen Verbindungsaufbau können die Kanäle den verschiedenen Joystickachsen und Tasten zugeordnet werden. Die Kanäle 3 und 4 werden als Taster verwendet und ermöglichen beispielsweise eine schnelle / langsame Drehung (die Funktion der Taster kann im Python-Script nachvollzogen werden). 

Die Zuordnung der Kanäle wird gespeichert und beim nächsten Programmstart wieder hergestellt.

Joystick Modellfernsteuerung mit Multiprotokoll-TX-Modul iRangeX IRX4+

In den beiden vorhergehenden Beiträgen zur Modellfernsteuerung mit Joystick wurde ein “ganz normaler” Fernsteuersender zur Kommandoübertragung genutzt. Dabei wurden die Steuerknüppel und diversen Schalter nicht benötigt, weil die Steuerung selber ja durch den Joystick wahrgenommen wird.

Von daher kann der Gesamtaufbau vereinfacht werden, indem statt des kompletten Fernsteuersenders ein Multiprotokoll-TX-Modul wie das iRangeX  iRX4+ eingesetzt wird.

Das Modul kann – genauso wie der Fernsteuersender – direkt über das PPM-Signal vom USB2PPM – PiKoder angesteuert werden. Da das iRangeX bereits ab einer Betriebsspannung von 5 Volt arbeitet, ist keine zusätzliche Batterie erforderlich sondern die Spannungsversorgung erfolgt ebenfalls über den USB2PPM PiKoder. 

Aufbau 

Der USB2PPM PiKoder wird entsprechend der Anleitung aufgebaut. Auch wenn Sie bisher nur eine Cynch-Buchse bestückt haben, lässt sich der dreipolige Header problemlos nachrüsten.

Die Verbindung zwischen dem iRX4+ Moduls wird über ein dreiadriges Kabel (Vcc, PPM und Gnd) hergestellt (s. Bild links unten). An einem Ende des Kabels befindet sich eine dreipolige Buchse zum Aufstecken auf die entsprechende Stiftleiste des USB2PPM, auf der anderen Seite werden die fünf Buchsen des Moduls adaptiert – die Pinbelegung, die das Modul erwartet, sehen Sie im rechten Bild. 

  

 

 

 

 

 

Es sind darüber hinaus keine weiteren Anpassungen oder Änderungen erforderlich. 

Und der hier beschriebene Aufbau ist natürlich genauso in Verbindung mit einem Windows-Notebook zu verwenden.

Joystick Modellfernsteuerung mit Spektrum DXe (2)

Der erste Beitrag dieser Reihe hat ein Notebook verwendet, um die Joystick-Eingaben in Kommandos für den USB2PPM zu übersetzen. Alternativ hierzu kann für ausgewählte Joysticks auch ein Android(TM) Smart Device mit einer entsprechenden App zum Einsatz kommen.  

Der Hardwareaufbau im Titelbild gleicht der Konfiguration im Teil 1 bis auf den Computer, der durch das Smart Device ersetzt wird und den Hub: in Verbindung mit dem Smart Device ist unbedingt ein USB OTG Hub zu verwenden. 

Hinsichtlich der Vorbereitung des Fernsteuersenders gelten die gleichen Überlegungen zur Ergonomie und es empfiehlt sich, die Fernsteuerung wie in Teil 1 beschrieben, mit einem Schalter zu erweitern.

Hinsichtlich der App selber haben Sie die Auswahl zwischen der kostenlosen App Joystick2PPM und einer speziellen  App für Quadrocopter Joystick4UAV (s.u.); beide Apps finden Sie im Google Play Store. 

Joystick2PPM (Android App)

Die Bedieneroberfläche der App entspricht weitgehend der Windows Implementierung und ist intuitiv und einfach verständlich. Auf der linken Seite befinden sich die Joystick – Bedienelemente und die Abbildung auf die Servokanäle erfolgt auf der rechten Seite mit Drop-Down-Boxen.

Der Joystick und der USB2PPM werden nach dem Starten der APP automatisch erkannt. Der Benutzer muss beim erstmaligen Gebrauch den Zugriff der Anwendung auf die entsprechenden USB-Schnittstellen freigeben. 

Bitte beachten Sie, dass die App derzeit nur eine beschränkte Anzahl von Joysticks und anderen Bediengeräten unterstützt. Den aktuellen Stand der kompatiblen Geräte finden Sie jederzeit im Playstore. 

Joystick4UAV (Android App)

Die Joystick4UAV App stellt eine Weiterentwicklung der Joystick2PPM Anwendung dar, die auf die Belange der Fernsteuerung von Quadrocoptern oder anderen Fahrzeugen (UGV) und Booten (USV) mit einem Flight Controller ausgerichtet ist.

Vom grundsätzlichen Aufbau her entspricht die Joystick4UAV den bereits beschriebenen Apps. Die Abbildung der vier Joystick-Achsen erfolgt auf die Fernsteuerkanäle 1-4 entsprechend der üblichen Belegung für Flight Controller. Diese Zuordnung innerhalb der vier Kanäle können Sie natürlich entsprechend Ihrer Präferenzen anpassen. Alle Kanäle können durch Checken der zugehörigen Box invertiert werden.

Der Flight Mode wird im Kanal 5 kodiert. Es stehen sechs Modi zur Verfügung. Die Umschaltung erfolgt über die Joystick-Taster 7-12 (s. Bild rechts unten), wobei Taster 7 Flugmode “1” einstellt und Taster 12 den Flugmode “6”. Der gewählte Flugmode wird jeweils numerisch angezeigt (“1” im Bild oben) und der Balken entspricht dem übertragenen Kanalwert.

Die verbleibenden Taster 1-6 (Button B1 .. B6 im oberen Bereich) und der Hat-Switch stehen für Sonderfunktionen zur Verfügung und können beliebig den Kanälen 6-8 zugeordnet werden. Wird die zum Kanal gehörige Box aktiviert, dann verhält sich der Taster als Schalter.

Bitte beachten Sie, dass in der App derzeit nur der Logitech Extreme 3D Pro Joystick unterstützt wird.

Modellfernsteuerung mit Webbrowser – intuitiver und reaktiver

In meinen bisherigen Blogs zum Thema Modellfernsteuerung mit Webbrowser habe ich Lösungen vorgestellt, die hinsichtlich der Bedieneroberfläche und der Responsezeiten (Agilität) der Fernsteuerung nur für einfache und nicht zeitkritische Anwendungen geeignet waren.

Die zuerst vorgestellte tastenorientierte Bedieneroberfläche war vergleichsweise träge, weil nach jeder Bedienung wieder die komplette Seite übertragen und neu aufgebaut wurde.

Das verbesserte “Joystick-artige” Konzept benutzt bereits AJAX, um die Reaktionsgeschwindigkeit zu erhöhen. Allerdings erfordert die Steuerung noch, dass eine Bewegung durch einmaliges Antippen gestartet wird und dann durch erneutes Tippen an einer anderen Stelle des Bildschirms gestoppt wird während man eigentlich erwarten würde, dass die Bewegung solange aktiviert ist, wie die Taste “gedrückt” wird.

Die neueste Version von httpRC erfüllt nun auf Basis einer tastenorientierten Bedieneroberfläche beide Anforderungen hinsichlich Reaktionsgeschwindigkeit und Logik: ein Befehl wird nur solange ausgeführt, wie der Button gedrückt wird.

Der Source Code für den ESP8266-01 wird über github bereit gestellt. Für die Programmierung habe ich sowohl den bereits beschriebenen Programmieradapter als auch den Arduino Due erfolgreich eingesetzt.

Weitere Informationen zum Empfängerbausatz selber finden Sie auf der entsprechenden Pikoder-Webseite.

Modellfernsteuerung mit Arduino über XBee

Durch die Kombination der Arduino-basierten digitalen Open Source Fernsteuerung arduinodtx mit einem intelligenten Servocontroller wie dem PiKoder/SSC, einem XBee Shield und einem XBee Modul entsteht eine hochwertige Modellfernsteuerung.

Hierbei wird eine transparente Übertragung eingesetzt, so dass keine Anpassungen an der Arduino Software oder der PiKoder/SSC Firmware erforderlich sind; es steht der volle Funktionsumfang der Fernsteuerung zur Verfügung.

Der prinzipielle Aufbau des Senders mit der Jumperstellung für das Arduino XBee Shield ist im Bild unten dargestellt, die Verdrahtung der Steuerknüppel entspricht dem Aufbau auf der arduinodtx Webseite.

xbee-digital-rc_404p

Der Aufbau des kompletten Empfängers bestehend aus dem XBee-Breakout Adapter, dem PiKoder/SSC und einem Spannungswandler zur Erzeugung der benötigten 3,3 Volt Versorgungsspannung sowie die Programmierung der XBee Module ist in der PiKoder/SSC Application Note #3: XBee Communication detailiert beschrieben.

complete-receiver-unit

Prototyp Empfängeraufbau

Modellfernsteuerung mit Tablet oder Smartphone 2.0

Benutzen Sie Ihr Android Tablet oder Smartphone als Fernsteuerung: mit Touch-Kommandos oder durch Bewegen des Tablets kann beispielsweise ein Roboter oder ein Modellauto über Bluetooth ferngesteuert werden. Als Basis dient die Android App picCAR, die als Open Source released wurde und in ablauffähiger Version im Play Store erhältlich ist.  

Diese App unterstützt in der aktuellen Version 1.3 nun zusätzlich zur bisherigen Robotersteuerung ( = Richtungsänderung über Geschwindigkeitsänderung der Antriebsmotoren)  auch “normale” Fahrzeuge, bei denen ein Kanal zur Lenkung und ein Kanal zur Geschwindigkeitsregelung verwendet wird.

Foto_hoch

Das Tablet oder Smartphone steuert einen PiKoder/SSC über BlueTooth an. Der Einbau und die Verdrahtung des PiKoder/SSC ist schnell vorgenommen.

Detail Einbau PiKoder

Nähere Informationen zum Aufbau des Empfängers finden Sie auf der PiKoder Bluetooth-Fernsteuerseite.

Android Based Robotics

Auf der Suche nach einer geeigneten Plattform für eigene Roboter-Experimente bin ich auf Android Based Robotics gestoßen. Die Idee, die Sensoren, die Kamera und die Rechnerperformance eines Android Smartphone zur Steuerung eines Roboters zu verwenden, hat mich angesprochen.

Die Ansteuerung der Roboterhardware, wie beispielsweise der Motoren, erfolgt über ein IOIO Board, das ja speziell dazu entwickelt wurde, über ein Android Smartphone Aktoren zu steuern.  Die Verbindung zwischen IOIO und Phone wird über Bluetooth realisiert.

Ansicht_02

Der Aufbau der Hardware ist nicht besonders schwierig und erfolgte in meinem Fall auf einer Pertinaxplatte. Das aktuelle PCB-Release des IOIO-Boards hat nur noch einen micro-USB Port, so dass der zur Kommunikation verwendete USB BT Dongle über das mitgelieferte (rote) Kabel adaptiert werden musste.

Die gesamte Verdrahtung kann wesentlich vereinfacht werden, wenn eine Prototyp-Leiterplatte, wie im Bild gezeigt, eingesetzt wird.

Android_Based_Robotics_02

Das komplette Android Based Robotics Projekt ist Open Source; allerdings war der verfügbare Source Code hinsichtlich der Entwicklungsumgebung und verwendeten Libraries für die Videoverarbeitung und IOIO Ansteuerung nicht auf dem neuesten Stand. Ein aktualisierter Stand des ABR_client ist bei github verfügbar.