Autofahren

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung

Die grundlegende Idee zu diesem Projekt bestand darin nur mittels Gesten ein RC(Remote Controlled)-Car fern zu steuern. Die Gesten sollten intuitiv und damit einher gehend ohne Verrenkungen umzusetzen sein. Die beste Ganzkörper-Erfassung sollte uns hier die Mircosoft Kinect liefern mit deren Hilfe wir am PC die Bewegungen erfassen und mittels Processing interpretieren. Wie die Weiterleitung von Signalen an das RC-Car geschehen sollte war am Anfang noch nicht klar, da die Wahl des passenden RC-Cars noch nicht getroffen wurde.

Autofahren11.jpg

RC-Car: mit Kinect steuern

Gesten

Für intuitive Gesten orientieren wir uns an gegebenen und institutionalisieren Bewegungen, welche auch in der Praxis (hier: Das Autofahren an sich) Anwendung finden. Da die Lenkbewegung beim Autofahren für jeden Nachvollziehbar ist (selbst von Kindern) ist diese unser Vorbild für die Umsetzung der Lenkbewegung.

Da Synapse an Processing die Koordinaten der Hände mitteilt, ist die Interpretation sehr einfach: Es gibt einen neutralen Bereich, d.h. die Hände befinden sich ungefähr auf einer Höhe, in dem keine Lenkbewegung eingeleitet wird. Soll nun eine Lenkbewegung nach Links eingeleitet werden, so betrachtet man die Y-Koordinate der Hände. Sollte sich die rechte Hand oberhalb der linken Hand befinden (abzüglich des Toleranzbereichs) so wird nach Links gelenkt. Nach Rechts sinngemäß die Hände vertauscht. Damit war die Grundlage unserer Gesten geschaffen und wir widmeten uns der Beschleunigung bzw. des Rückwärtsfahrens.

Um die Lenkbewegung beim Vorwärts- und Rückwärtsfahren nicht zu beeinflussen, welche sich wie beschrieben durch die Differenz der Y-Werte der Hände ergibt, behalfen wir uns den Absolutwerten der Y-Position der Hände.

Der neutrale Bereich bildet sich in Abhängigkeit der Y-Koordinate der Hüfte, wodurch die Höhe des neutralen Bereichs festgelegt wird, sowie die Differenz zwischen Hüfte und Kopf, mit deren Hilfe die Dicke des Bereichs in Abhängigkeit zur Entfernung und Körpergröße des Anwenders berechnet wird.

Sollte sich nun eine Hand oberhalb des neutralen Bereichs befinden, so fährt das Auto vorwärts. Für das Rückwärtsfahren muss sich eine Hand unterhalb des neutralen Bereichs befinden. Dadurch ist gewährleistet, dass auch bei starken Lenkbewegungen eine Bewegung des Autos möglich ist. Sollte sich eine Hand oberhalb und die andere unterhalb des neutralen Bereichs befinden, so wird kein Signal an das RC-Car weitergeleitet.


Synapse

Synapse ist ein closed-source Programm welches frei verfügbar ist und die Daten, welche von der Microsoft Kinect gesendet werden, dahingehend interpretiert, dass OSC-Signale der Koordinaten der grundlegenden Skelettmerkmale (Kopf, Hände, Ellenbogen, Füße, Knie und Torso (ca. Bauchnabel)) aussendet. Diese OSC-Signale werden dann von Processing erfasst und können dort Interpretiert werden.

Autofahren14.png

Synapse: Kalibrierung

Processing

Bei der Programmierumgebung mussten wir wolgenden Kriterien berücksichtigen: 1. Man braucht eine IDE (Interactive Developer Environment), die für alle von uns gewählten Komponenten eine entsprechende Schnittstelle anbietet. Es sollen Bibliotheken für das OSC-Protocoll sowie für das Adruino-Board vorhanden sein. 2. Diese IDE soll mit den 2D-Skelett-Daten vom Synapse umgehen und diese in einem 2D-Raum einordnen können. 3. Der einfache Zugang zu Koordinatenpunkten in dem 2D-Raum soll gewärleistet werden. Hierbei deckt “Processing” alle von uns gestellten Anforderungen, weswegen wir uns auch dafür entschieden haben. Die Standard-Processingversion könnten wir mit der “P5”-Bibliothek koppeln, um die OSC-Daten auslesen zu können. Diese haben wir dann als 2D-Kreise im Processingfenster darstellen lassen. Gewählte Punkte haben wir übersichtlichkeitshalber mit Strichen verbunden, so dass diese einem Strichmänchen ähneln. Die erfassten Daten beschränken sich auf Handgelenke , Ellenbogen, Kopf und Torso, zu denen jeweils eine Punkt zugeordnet ist. Auf der Weise bekommen wir die verschiedenen Positionen des Autofahrers in dem 2D-Processing-Fenster. Man braucht danach die Steuerungsgesten nur noch zu analysiren und die destinktive processingrelewante Merkmale als IF-Funktionen ausarbeiten. Zum Beispiel: ”Wenn beide Hände sich über dem Torsomittelpunkt befinden (ausgestreckt sind) und der Y-Wert der linken Hand disktintiv höher als der Y-Wert der rechten ist, dann soll die Funktion linksAbbiegen() aufgerufen warden.”

Autofahren13.jpg

Processing-Fenster: Abbiegen-Gestenerkennung

Processing-Code (.pde)

Arduino-Board

Das Arduino Uno, welches bei uns Anwendung gefunden hat, kann per USB an den PC angeschlossen werden und dank Treiber und der Arduino Bibliothek für Processing können nun die div. Ports des Boards angesprochen werden, welche man nun auf Strom oder nicht-Strom setzen kann. Mit den in Processing definierten Bedingungen können nun entsprechend zu den Gesten die Ports, welche an den entsprechenden Kontakten an der Fernsteuerung gelötet wurden, Signale an die Fernbedienung und damit an das RC-Car übermittelt werden.

Autofahren12.jpg

RC-Steuerung: Verbindung mit Arduino

Zusammenfassung

Die Finale Umsetzung ergibt folgende Kette an Hard- und Software: Kinect -> Synapse -> Processing -> Arduino -> Fernsteuerung -> RC-Car

Der Verlauf unseres Projekts hat uns gezeigt, dass auch ohne einem genauen Plan für die praktische Umsetzung, das Projekt realisiert werden konnte. Mit der Programmierung in Processing wurde der Grundstein gelegt. Damit konnten wir schlicht ausprobieren, ob das Arduino-Board und die Verbindung mit der Fernsteuerung ein gewünschtes Ergebnis liefern und die Fernbedienung richtige Signale an das RC-Car sendet. Da dies nach vielen Fehlversuchen geglückt war, konnten wir damit endlich mittels Gesten unser Auto steuern. Als Erweiterung können wir uns eine Integration einer Kamera vorstellen, welche am RC-Car befestigt ein Bild an einen Rechner weiterleitet.