GPN12:Kinect-Touchpad: Unterschied zwischen den Versionen

aus dem Wiki des Entropia e.V., CCC Karlsruhe
(richtige galerie)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
 
== Riesentouchpad aus Beamer und Kinect ==
= Riesentouchpad aus Beamer und Kinect =
Ich würde gerne ein großes Touchpad aus einem Beamer und einer Kinect bauen. Mit dem Beamer kann man beliebige Bilder auf den Boden, einen Tisch oder eine Wand projizieren, mit der Kinect kann man feststellen, wenn jemand die Fläche berührt.  
Ich würde gerne ein großes Touchpad aus einem Beamer und einer Kinect bauen. Mit dem Beamer kann man beliebige Bilder auf den Boden, einen Tisch oder eine Wand projizieren, mit der Kinect kann man feststellen, wenn jemand die Fläche berührt.  
Interaktive Hüpfkästchen oder ein interaktiver Tisch wären damit dann schnell machbar.  
Interaktive Hüpfkästchen oder ein interaktiver Tisch wären damit dann schnell machbar.  

Version vom 11. März 2012, 17:58 Uhr

Riesentouchpad aus Beamer und Kinect

Ich würde gerne ein großes Touchpad aus einem Beamer und einer Kinect bauen. Mit dem Beamer kann man beliebige Bilder auf den Boden, einen Tisch oder eine Wand projizieren, mit der Kinect kann man feststellen, wenn jemand die Fläche berührt. Interaktive Hüpfkästchen oder ein interaktiver Tisch wären damit dann schnell machbar.

Die Technik dahinter ist nichts Neues, nur habe ich bisher keine OpenSource Lösung für diese Anwedung gesehen und ich glaube, dass man mit dieser Riesen-Touchpad viel Spaß haben kann.

Alleine zu Arbeiten ist langweilig, daher suche ich noch Leute, die mitspielen wollen. Es gibt zwei große Bereiche, in denen man sich austoben kann:

- Bau des eigentlichen Touchpads

- Entwicklung von Spielen/Anwendungen für das Touchpad

Damit auch schon bei der GPN etwas vorzeigbares rauskommt, werde ich schon im Vorfeld einen Prototypen bauen.


Wer also schon immer mal mit der Kinect arbeiten wollte, vielleicht etwas über Bildverarbeitung lernen will oder auch ein Spiel für eine 4m^2 große interaktive Wand schreiben will, ist herzlich eingeladen, bei dem Projekt mitzumachen. Kommentare, Fragen, usw. am besten auf die Diskussionsseite hier.

Nikolas 01:13, 24. Feb. 2012 (CET)

Aktueller Zwischenstand:

Beamer und Projector können kalibriert werden (dauert 30s), so dass jeder Punkt in der Welt beliebig gefärbt werden kann. Die Bilder sind aus einer simplen Demo, bei der jeder Punkt vor der Tafel blau eingefärbt wird.


Wer einen Roboter wie den PR2 schon immer mal anmalen wollte, kann dazu einfach einen Projektor nehmen. Für das Bild wurde der Abstand eines Punktes auf dem Roboter zum Boden mit der Kinect gemessen und in einen Farbwert umgerechnet.

Bau des Touchpads

Da der Beamer meist nicht direkt über dem Feld installiert werden kann, wird das Bild recht stark verzerrt werden, was algorithmisch ausgeglichen werden sollte. Zudem muss klar sein, welches Pixel angesprochen werden muss, wenn ein bestimmter Fleck auf dem Tisch seine Farbe wechseln soll. Daher ist es notwendig, die Position des Beamers und der Kinect relativ zum Tisch zu bestimmen. Für die Kinect mit der Tiefeninformation ist das recht einfach machbar, für den Beamer muss man dann etwas Mathe rausholen. Für die Beamerkalibrierung (Bestimmung der Projektionsmatrix/Homographie) kann man den Beamer als inverse Kamera betrachten und über die normalen markerbasierten Algorithmen gehen.

Kalibrierungsmuster

Die Marker werden im Kinect-Bild erkannt und mit der bekannten Tiefe können ihnen 3d-Positionen zugeordnet werden. Diese Positionen werden dann in Tischkoordinaten (x,y,0) umgerechnet, und damit die Projektionsmatrix berechnet. Soll dann ein bestimmes Bild auf dem Tisch angezeigt werden, kann darüber die auszugleichende Verzerrung berechnet werden. Weiter Bilder auch im github.

Erkennung der Nutzerinteraktion

Über die Tiefenwerte wird eine Ebene in den Tisch gefittet. Für jeden Punkt, den die Kinect sieht, kann damit der Abstand der Ebene und der nächste Punkt in der Ebene berechnet werden. Sobald ein Punkt sehr nahe am Tisch ist, kann ein MouseDown ausgelöst werden, und das Object verfolgt werden, bis es sich wieder vom Tisch entfernt, was dann ein MouseUp darstellt. Bewegt sich ein Objekt nahe der Oberfläche (2-20cm) könnte auch ein MouseOver ausgegeben werden. Aufgaben hier wäre hier eine möglichst glatte Mausbewegung und eine Erkennung der verschiedenen Events. Da der Tisch multitouch-fähig sein soll, müssen auch mehrere Objekte gleichzeitig getrackt werden. (z.B. für eine Zoom-Geste mit zwei Händen).