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.

Servosteuerung mit Raspberry Pi über I2C

Dieser Beitrag beschreibt die Ansteuerung von Modellbauservos durch den Raspberry Pi über den I2C-Bus. Hierbei wird, wie auch im vorherigen Beitrag, ein PiKoder/SSC PRO als I2C Slave eingesetzt, der die präzise Erzeugung der Impulse zur Servoansteuerung übernimmt.

Die erforderlichen Verbindungen zwischen dem Raspberry Pi und und dem PiKoder/SSC PRO sind im nachfolgenden Bild dargestellt. Der Raspberry Pi übernimmt die Spannungsversorgung.

Belegung Connector Raspberry Pi

Die Ansteuerung der Servos erfolgt über Python-Programme (Version 2.x). Das folgende Beispiel zeigt den prinzipiellen Ablauf:

# Control of RC servos by I2C with PiKoder/SSC PRO
#
# Please refer to www.pikoder.com for more information #
# Imports
import smbus, os
import time
import subprocess
#
# Init variables
ServoPosition = 0
ReturnCode = 0
bus = smbus.SMBus(1)
#
# Main Loop
while 1:
    try:
        bus.write_byte_data(0x40,0x1,ServoPosition)
        ReturnCode = 0
        ServoPosition = (ServoPosition + 20) % 255
    except IOError as err:
        ReturnCode = err.errno
        subprocess.call('i2cdetect','-y','1') print ("Servo position: ", ServoPosition, " - Return code: ", ReturnCode)
    time.sleep(1)

Weitere Informationen zum PiKoder/SSC PRO wie ein ausführliches USER’s Manual und Schaltungsvorschläge finden Sie auf der PiKoder/SSC PRO Webseite.