zebresel Logo
zebresel Logo

BLOG.
Aktuelles aus der Welt, frisch auf den Tisch zebreselt.
 
 
10
JUN
2011
xbox_thumb

Zebresel Air View – Teil 3 – Kinect-Programmierung

Zebresel Team - 10. Juni 2011 - 13 Kommentare - Zebresel

In dem heutigen Teil möchten wir euch gerne unsere erste Komponente in unserer Umsetzung erläutern: Die Bewegungssteuerung mit Hilfe der Microsoft Kinect. Am Ende des Artikels findet ihr eine Anleitung zur Verwendung der Kinect.

Was ist die Kinect?

Diese Frage stellt sich eventuell dem ein oder anderem von euch. Bei der Kinect handelt es sich um eine Erfindung von Microsoft welche die Antwort auf die weltweite bekannte Nintendo Wii Steurung sein soll. Besonderes Merkmal des Eingabegerätes ist dass zur Verwendung keine üblichen Steuerknöpfe oder Analaogsticks notwendig sind. Die Interaktion mit der Anwendung erfolgt allein durch den Körper. Microsoft definiert ihr Gerät wie folgt:

Kinect revolutioniert die Art und Weise, wie du Spiele und Unterhaltung erlebst – ganz ohne Controller. Bei Kinect tritt die Technologie in den Hintergrund. Im Mittelpunkt steht die Unterhaltung.

Programmierung mit der Kinect

Die Kinect ist ein Produkt von Microsoft entwickelt für die XBOX360. Jedoch lässt sich die Kinect dank USB-Anschluß an den PC zu Hause verbinden und nutzen. Die benötigten Treiber liefert die OpenNI Organisation mit. Diese Treiber haben wir verwendet um die Daten der Kinect ab zugreifen. Mit dessen Hilfe können Daten abgefragt werden wie:

  • User-Tracking
  • Hand-Tracking
  • Skeleton-Tracking
  • Kamerabild und Tiefenbild

In unsere Anwendung wurde besonders auf eine “Full Body Interaction” Wert gelegt, weshalb nur das Skeleton-Tracking, bei dem ein digitales Abbild der Gliedmaßen nach empfunden wird, infrage kam. Mithilfe dieser Daten ist es uns möglich, Gesten zu erkennen und bestimmte Aktionen daraufhin auszuführen.

Kleiner Tipp: In den kommenden Wochen will Microsoft eigene Treiber für ihr Gerät bereitstellen. Wir dürfen gespannt sein.

Loslegen

Um die Kinect mit eurem Computer betreiben zu können benötigt ihr zum einen die OpenNI Bibliothek und die Treiber von PrimeSense. Alle benötigten Dateien findet ihr unter www.openni.org zum Download.

Wie erstelle ich nun ein erstes Programm mit meiner Kinect. Hierzu ein kleines Zootorial über das Hand-Tracking mit der Kinect:

Quellcode
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace KinectHandTracking
{
    class Program
    {
        //Verbindungsstück zwischen Programm und Kinect
        static xn.Context kinect;

        //Gestenerkennung
        static xn.GestureGenerator gesture;

        //Hand erkennen
        static xn.HandsGenerator hands;

        static void Main(string[] args)
        {
            //Verbidnung zur Kinect herstellen
            kinect = new xn.Context("SampleConfig.xml");

            //Gestengenerator erzeugen und einstellen
            gesture = kinect.FindExistingNode(xn.NodeType.Gesture) as xn.GestureGenerator;
            gesture.AddGesture("Wave");
            gesture.GestureRecognized += new xn.GestureGenerator.GestureRecognizedHandler(gesture_GestureRecognized);
            gesture.StartGenerating();

            //Handgenerator erzeugen und einstellen
            hands = kinect.FindExistingNode(xn.NodeType.Hands) as xn.HandsGenerator;
            hands.HandCreate += new xn.HandsGenerator.HandCreateHandler(hands_HandCreate);
            hands.HandUpdate += new xn.HandsGenerator.HandUpdateHandler(hands_HandUpdate);

            //While-Schleife zum Aktualisieren der Kinect
            while (true)
            {
                //Kinectkomponenten aktualisieren
                kinect.WaitAndUpdateAll();
            }
        }

        //Wird aufgerufen wenn neue Positionsdaten der Hand vorhanden sind
        static void hands_HandUpdate(xn.ProductionNode node, uint id, ref xn.Point3D position, float fTime)
        {
            Console.WriteLine("Position: " + position.X + " " + position.Y + " " +position.Z);
        }

        //Wird aufgerufen wenn Hand erzeugt wurde
        static void hands_HandCreate(xn.ProductionNode node, uint id, ref xn.Point3D position, float fTime)
        {
            Console.WriteLine("Hand erstellt");
        }

        //Wird aufgerufen wenn eine Geste (hier: Wave) erkannt wird
        static void gesture_GestureRecognized(xn.ProductionNode node, string strGesture, ref xn.Point3D idPosition, ref xn.Point3D endPosition)
        {
            Console.WriteLine("Geste erkannt");
            hands.StartTracking(ref idPosition);
        }
    }
}

Den Quellcode könnt ihr euch hier runter laden: C# Kinect Hand Tracking Example

Die Zebresel Air View -- Blog-Serie im Überblick
  1. Zebresel Air View – Von der Vision zum ersten Prototypen in 4 Wochen
  2. Einführung Mikrokopter
  3. Kinect-Programmierung
  4. Konzept & Interaktionsszenarien
  5. GUI Entwurf
  6. Mikrokopterkommunikation & Steuerung
  7. Die Hochzeit – Kinect meets Mikrokopter
  8. GUI-Entwicklung mit Livebildeinbindung
  9. Eine Notlösung bitte!
  10. Ausblick

Wenn ihr nichts verpassen wollt dann könnt ihr unseren Blog abonnieren oder ein “Gefällt Mir” bei Facebook tut es auch.

Suche
Kategorien
Archiv
Sehenswert