Panzerroboter

Aus ChaosChemnitz
Wechseln zu: Navigation, Suche

Wir haben einen tollen Panzerroboter zur Verfügung gestellt bekommen. Dieser soll nun reversengineered und umgebaut werden.

Es hat sich bereits jemand die Mühe gemacht und das umgesetzt, was wir wollen: [1]

Fernbedienung

Die Fernbedienung arbeitet im 27-MHz-Band. Die Übertragung erfolgt digital mit einer Art LIN-Protokoll, wobei eine Manchestercodierung angewendet wird.

Konzept

Hier werden grundsätzliche Anforderungen geklärt.

Steuerung

Der Roboter wird über ein oder mehrere PCs ferngesteuert. Genau ein Bedien-PC ist der Master. Er kann den Roboter an- oder ausschalten und auswählen welcher PC die Kontrolle über den Roboter hat. Der Master kann selbstverständlich auch sich die Kontroller zuweisen.

Fällt der Master aus, wird der Roboter deaktiviert. Fällt der Slave aus, der die Kontrolle hat, deaktiviert sich der Roboter ebenfalls. Der Master kann dann auf sich oder einen anderen funktionierenden Slave umschalten. Geht der ausgewählte Slave wieder online, hat er unmittelbar wieder die Kontrolle.

Master und Slaves senden ihre Daten direkt zum Roboter um eine schnelle zuverlässige Verbindung zu ermöglichen.

Zusätzlich übernimmt der Steuer-PC die Kontrolle über die Robo-Kamera. Mit zwei Zusatz-Achsen am Joystick lässt sich die Robo-Kamera schwenken. Ein Button auf dem Joystick fährt die Kamera auf die Nullposition.

Bildübertragung

Das Bild wird von der Kamera auf dem Roboter ebenfalls über Netzwerk zum Master und Slave zurückgesendet. Master als auch Slave sollen das Bild sehen. Der Master kann das Bild für den Slave kappen.

Die Robo-Kamera streamt zu einem mjpegplexer. Diese Webseite wird durch den Master und dem Slave aufgerufen. Mit dem Return-Button oder dem Joystick-Fire-Button wird ein Formular geöffnet.

Umsetzung

Hier werden die Details der verwendeten Technik beschrieben.

Steuerung

Die Steuerinformationen werden über Netzwerk/WLAN übertragen. Dazu wird UDP/IP verwendet.

Fehler der Multifunction Unit: Zum Stoppen immer 0b01111 (velocity bzw. direction) verwenden! Ein Sprung von voller Rückwärtsfahrt (0b11110) auf 0b10000 (leicht rückkwärts/Stillstand) lässt das Fahrzeug weiter mit voller Geschwindigkeit rückwärts fahren! Das Gleiche gilt für das Lenken.

PC-Seite

Am PC werden Tastatur oder Joystick (oder beides) zur Steuerung verwendet.

Tastatur

Die Tastatur wird durch /dev/input/event2 repräsentiert. Diese Gerätedatei kann nur als root gelesen werden.

Es werden nur Events übertragen. Es ist daher wichtig, dass das Loslassen einer Taste nicht "überhört" wird.

Ein Tastatur-Thread empfängt diese Events (blockierend) und wandelt sie in Zustände um. Diese Zustände werden an den Ausgabe-/Übertragungsthread asynchron weitergeben. Eine atomic-read/write-operation ist nicht notwendig.

Joystick

Ein Joystick am Gameport soll als Alternative zur Tastatur zum Steuern des Roboters benutzt werden. Um den Gameport unter Linux nutzen zu können, muss neben den Treibern ns558 und joydev auch analog geladen werden. Zum Zeitpunkt des Ladens von analog muss bereits ein Joystick angesteckt sein. Erst dann werden /dev/input/js0 und /dev/input/js1 erzeugt. Es wird die Knüppelbewegung zweimal mit dem Abstand von 4 ms gemessen und verglichen, weicht sie zu stark ab, wird dies als nicht angesteckter Joystick gewertet. Dieser Vorgang findet nur einmal beim Laden von analog statt. Der Gameport unterstützt Hotpluging nicht offiziell. Ein nachträgliches Anstecken des Joysticks wird nicht registriert. Das Modul analog ist dazu zu entladen und erneut zu laden.

Das Steuerprogramm UDPclient läuft als root, damit es auf /dev/input/js0 zugreifen kann. Es wertet alle Joystick-Events aus.

Robo-Seite