Tutti i possessori o meno di una console XBOX sono a conoscenza dell’esistenza del Kinect, un fantastico dispositivo attraverso il quale la Microsoft ha iniziato a fare concorrenza alla Nintendo Wii, relativamente ai giochi che non prevedono l’utilizzo di un normale gamepad ma che si basano sui movimenti del corpo del giocatore.
Va sottolineato, però, che nel caso del Kinect il solo uso con la XBOX è piuttosto riduttivo ed infatti la Microsoft ha rilasciato ultimamente un SDK attraverso il quale poter sviluppare delle applicazioni che prevedono l’utilizzo del dispositivo collegandolo al PC.
Prima di poter iniziare ad esplorare gli strumenti messi a disposizione nell’SDK, è utile comprendere le funzionalità del dispositivo e preparare il nostro PC con il relativo ambiente di sviluppo.
Il Kinect visto da vicino
Il Kinect è costituito dai quattro seguenti dispositivi principali :
-
Videocamera RGB (RGB camera) : una normale video camera con una risoluzione di 640 x 480 a 30 fps (frames per second);
-
Sensore di profondità (3D Depth Sensors) : costituito da una trasmettitore ad infrarossi ed il corrispondente ricevitore attraverso i quali è possibile calcolare le distanze degli oggetti;
-
Un motore per l’inclinazione (Motorized Tilt) : un piccolo motore che permette di variare l’inclinazione della video camera fino ad un massimo di 27 gradi (in alto o in basso);
-
Una serie di microfoni (Multi-Array Mic) : una serie di quattro microfoni per l’audio;
Installazione : SDK e driver Kinect
L’ambiente necessario per lo sviluppo è Visual Studio 2010, almeno nella sua versione Express (nel mio caso è la Ultimate che uso quotidianamente).
Ad esso vanno aggiunti ed installati :
-
Kinect SDK (ovviamente ancora in versione Beta) che possiamo scaricare al seguente
link (in entrambe le versioni 32 o 64 bit);
-
DirectX Software Development Kit che possiamo scaricare al seguente
link:
Al termine dell’installazione, per verificare che il tutto sia avvenuto correttamente, possiamo collegare il Kinect al nostro PC attraverso il cavo USB e verificarne la sua presenza attraversoGestione Dispositivi nel Pannello di Controllo.
Inoltre, il gruppo dei microfoni dovrebbe essere visibile nella scheda dei Dispositivi di Registrazione.
Per quanto riguarda il cavo di collegamento del Kinect al PC, va sottolineato che quest’ultimo non ha nativamente un connettore USB ma è necessario acquistare un adattatore con relativo alimentatore. Sul Microsoft Store, al seguente link, è riportata la versione per gli Stati Uniti ma è ovviamente possibile acquistare anche la versione Italiana.
Sviluppo : i primi passi
Affrontiamo adesso i primi passi per poter iniziare a sviluppare con il Kinect SDK, introducendo la classe principale di quest’ultimo : la Runtime.
Creiamo un nuovo progetto WPF (ovviamente possiamo utilizzare anche le Windows Forms) e per prima cosa aggiungiamo il riferimento al seguente assembly :Microsot.Research.Kinect.
Inoltre, per poter utilizzare tutte le classi disponibili nell’SDK è necessario aggiungere lo using dei seguenti namespace.
using Microsoft.Research.Kinect.Audio;
using Microsoft.Research.Kinect.Nui;
Definiamo un campo privato nella classe MainWindow di tipo Runtime ed istanziamolo.
public partial class MainWindow : Window
{
private Runtime nui = new Runtime();
public MainWindow()
{
...
...
Infine, utilizzando i due eventi di Loaded ed Unloaded della Window, aggiungiamo nei corrispondenti event handlers le istruzioni per poter inizializzare e deinizializzare l’instanza della Runtime.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
this.nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth);
}
private void Window_Unloaded(object sender, RoutedEventArgs e)
{
this.nui.Uninitialize();
}
Attraverso il metodo Initialize() vengono specificate quale features vogliamo utilizzare del Kinect (in questo caso la video camera ed il sensore di profondità). Il metodo Uninitialize()è invece necessario per rilasciare tutte le risorse unmanaged che il sistema ha allocato per l’utilizzo del Kinect.
Eseguendo questa banalissima applicazione, che non fa assolutamente nulla, noteremo solamente che all’esecuzione del metodo Initialize(), il dispositivo accenderà il trasmettitore ad infrarossi del sensore di profondità; già questo indica che l’inizializzazione è andata a buon fine. Viceversa, chiudendo la finestra dell’applicazione, il trasmettitore verrà spento (in quanto viene eseguito il metodo Uninitialize()); la deallocazione delle risorse è avvenuta correttamente.