Una delle novità introdotte nella versione 1.6 dell’SDK di Kinect è la possibilità di capire la posizione del Kinect nello spazio.
La classe KinectSensor espone il metodo AccelerometerGetCurrentReading che permette di recuperare il vettore (oggetto di classe Vector4) con le componenti X, Y e Z dell’accelerazione di gravità che agisce sul device.
Per capire la posizione del Kinect basta ricordarsi la regola della mano destra applicata al centro del device (vedi figura).
L’asse Z è quello uscente dal Kinect nella direzione dei payer e, di conseguenza, l’asse Y è quello rivolto verso l’alto e l’asse X è quello che, guardando il Kinect, esce verso destra.
Le componenti del vettore risultato sono normalizzare in g (cioè anzichè utilizzare la normale unità di misura m/s2 che è piuttosto asettica, viene utilizzato il g=9.81 m/s2).
Una volta avviato il Kinect (anche senza attivare alcun streaming) possiamo richiamare il metodo sopra citato per ottenere il vettore dell’accelerometro.
Nel progetto allegato al post, abbiamo una windows form in cui un timer, ad ogni secondo, recupera il vettore e visualizza le tre componenti dello stesso:
- Private Sub AccelerometerTimerTickHandler(sender As Object, e As EventArgs)
- If Sensor IsNot Nothing AndAlso Sensor.IsRunning Then
- Dim vector = Sensor.AccelerometerGetCurrentReading()
- Me.lblVectorXValue.Text = vector.X.ToString("##0.00000")
- Me.lblVectorYValue.Text = vector.Y.ToString("##0.00000")
- Me.lblVectorZValue.Text = vector.Z.ToString("##0.00000")
- End If
- End Sub
Se eseguiamo l’applicazione (che permette la variazione dell’elevation angle e, inizialmente pone tale elevation angle pari a zero) otteniamo:
Possiamo osservare che I valori delle componenti oscillano anche se il Kinect è fermo e, come detto in precedenza l’unica componente degna di nota è quella lungo l’asse Y (lo zero perfetto nelle componenti X e Z è casuale ma I valori sono sempre molto piccoli in questa situazione).
Se incliniamo il KInect verso il basso (ad esempio impostando –20 gradi l’elevetion angle), osserviamo che la componente Z aumenta in positivo, mentre la componente Y diminuisce:
Il perchè è spiegato con il fatto che dobbiamo considerare il sistema di riferimento X,Y,Z solidale al Kinect come illustrato dalla seguente figura:
Il discorso è del tutto analogo se, anzichè “giocare” con l’elevation angle, icliniamo fisicamente il device.
Commenti