Snake

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche


snake_.jpg


Motivation und Ziel

Das Ziel unseres Projektes war die Bewegungsrichtung einer Schlange per Gesteerkennung zu steuern. So teilte sich unsere Arbeit in zwei haupt Phasen. Die Erste bestand darin in Java eine Schlange zu implementieren. Dabei sollte einen ServerSocket hinzugefügt werden um Signale über Port empfangen zu können. In der zweite Phase, sollte mit EyesWeb eine Schaltung zur Gesteerkennung realisiert werden. Diese Geste sollte als Signale interpretiert und über CleintTCP an unsere Programm code gesendet werden. SChließlich sollte unsere code die Signale so auswerten dass die Schlange in der gewünschte Richtung beweglich sei. In den kommenden Punkten werden wir plus eine grobe Erklärung der Entwicklung und der Realisierung darstellen. Aber zum Ansehen des ganzes Source Code und des Patches stehen zwei Links zur Verfügung.

Implementierung von Snake

Für die Implementierung unserer Schlange haben wir zehn java Klasse gebraucht (siehe bild), aber hier werden wir nur in Anspruch nehmen die, die die relevanter Informationen beinhalten.
JavaSnakeAuDSnake1.png

GridWindow.java

Damit erzeugen wir einen weisses Panel auf einen JFrame (Java Frame) in dem wir Zelle bauen mit bestimmter Eigenschaften. Wie setColor, getColumns, getRows...USW. Sodass man jede Zelle lokalisieren und eine Farbe zuweisen kann.
Donald.png

Sssnake.java

Hier wird die Schlange als eine Array von Typ GridPosition deklariert(da hängt vom GridWindow´s Zellen ab) mit einem dynamische Länge. Diese Länge ist am Anfang eins und wird nach jeder Kollision mit dem Pickup (Essen des Pickup) um eins erhört. Um die Schlange darzustellen, malen wir nur einfach die Zelle unsere Grid Fenster mit eine Farbe.

JavaSnakeAuDSnake5.png

Isst die Schlange den Picup dann wird den Sclange Array um eins erhört und am Ende der Schlange eine Zelle gemalt.



MoveAndAte.png
SnakeAndPickup1.png


Die Bewegungsrichtung der Schlange erfolgt durch die Funktion peekMove().

SnakeFuehren.png

PickUp.java

Den PickUp wird von der Schlange gegessen. Den PickUp ist plus ein Array mit eine fester Länge eins, was nachdem er gegessen wird neue per Random an eine andere bellibige Stelle erzeugt wird.

Pickup.png

Schnittstelle

Dann sollten wir eine Schnittstelle zur Kommunikation zwischen Eyesweb und unser Java Code bauen. EyesWeb sollte als Client bestimmte Signal-Werte per TCP an unser Code (Server) senden. Die Übetragung haben auf dem Port 10035 gesetzt. Um diese TCPVerbindung zu realisieren sollten wir in java das Modul java.net importieren um die vorhandene TCP-Funktionen verwenden zu können.



SocketEstablisched.png


Hier finden Sie den ganzen Packet wo alle Klasse implementiert werden. snake-Daten

EyesWeb

Dann sollten wir wie oben erwährnt eine Schaltung in Eyesweb implementieren. Das bauen der Schaltung wurde nach dem folgenden Schema erledigt.

Flussdiag.png


Ferner wurde andere Projekt als Hilfsquelle genommen wie ZB "KungFu Sounds","Multik"


Farbe Segmentierung


Fbseg.png


Hier geht´s um die HSV-Konvertierung des Bildes
1. Dank den Framegraber Box kann man die Aufnahme des Webcams an Eyesweb übermitteln.
2. Farbtons(hue):Durch das Setzten von geeigneten Schwellwerten können die gewünschten Bildanteile, hier die Gelbe Farbe extrahiert werden. 30 < Gelb < 45 => HUEmin = 30 , HUEmax = 45. Farbsättigung(Saturation).
3. Zum Schluss der gewünschte Wert holen durch multiplikation der beide Anteil und dann binarisieren

Anlegen von ROI und Vergleich mit Schwellwert


ROI2 .png


1. ROI= Region Of Interress: zur lokalisierung eines Bereiches. Dafür haben wir insgesamt vier ROI gebraucht (für oben, unten, recht, und links).
2. GetImageStatistics: zum Zählen von Weisse Punkte in ROI.
3. Vergleich der Anzahl von Weissen Punkte mit Schwellwert.
4. Zur Visualisierung des ROI auf der Kamera.
5. Schwellwert auf 1000 gesezt.

Ergebnis Signal an ClientTCP übermitteln


TcpEnd .png


Dann wird das Ergebniss des Vergleichs (1 oder 0) durch einen Wert multipliziert die nach unserer Festlegung die Bewegungsrichtung der Schlange entsprechen sollte. Dass heisst 1 = unten(ROI 1) , 2 = oben(ROI 2) , 3 = links(ROI 3), 4 = Recht(ROI 4). So wenn das gelbe Objekt(hand mit gelbe Handschue zB) in einer ROI lokalisiert wird, wird die Anzahl von weissen Punkten in dieser ROI oberhalb des Schwellwertes und so kommt ein eins nach dem Vergleich raus. Dieses eins wird je nach dem durch 1,2,3 oder 4 multipliziert (den Rest auf null gesezt), das ganze wird zusammen addiert und an TCPClient gesendet. Nachdem wir festgelegt haben dass TCPClient den empfangenen Wert in ASCI wandelte.(empfängt 1 aber liefert 49,2 und liefert 50,3 und liefert 51,4 und liefert 48), sollten wir diese Umwandlung in unserer Code berücksichtigen. (Siehe Bild neben der Schaltung) EyesWeb-Patch