2012-05-08 2 views
6

Sto provando a creare un'applicazione basata su Kinect e iPhone.Come interpretare le letture dell'accelerometro da iPhone

Sto provando a calcolare l'accelerazione delle mie mani nel tempo su ciascuno degli assi X Y e Z in base alla traiettoria restituita dal kinect. Fondamentalmente sto selezionando un intervallo di tempo standard di 0,5 secondi o 15 frame (dt) e 3 punti, (x0, x1 e x2) nel tempo che sono separati da 0,5 secondi. Per prima cosa dovrei ricordare che la posizione dei 3 punti è menzionata in metri. Usando questi punti sto calcolando due velocità (v0 = (x1 - x0)/dt e v1 = (x2 - x1)/dt). Infine, utilizzando queste velocità, sto calcolando l'accelerazione tra x1 e x2 come acc = (v1 - v0)/dt.

Ripeto questi calcoli su ogni frame e ottengo una serie di accelerazioni.

Come ho detto, ho anche un iPhone e voglio vedere in quale mano ho il mio iPhone, la mano sinistra o la mano destra. Voglio farlo cercando di far combaciare le accelerazioni della mia mano con le accelerazioni di iPhone tenute nella giusta posizione in modo da avere lo stesso sistema di assi.

L'unico problema è che c'è un'enorme differenza tra le mie accelerazioni e le accelerazioni del telefono.

Le letture di acceelaration del telefono sono comprese tra -2 e 2 per ciascun asse, mentre le mie tra -10 e 10. Come dovrei interpretare le accelerazioni di iPhone per ottenere misure simili alla mia in metri/secondi?

+0

Fondamentalmente, ho calcolato l'errore di somma al quadrato tra le letture di iPhone per un dato intervallo e le accelerazioni Kinect. Tuttavia, data la diversa scala dei valori, i risultati ottenuti non sono così affidabili. – Simon

+0

Sì, è logico –

risposta

2

I dati dell'accelerometro su iPhone sono forniti in unità di forza g. L'asse x è allineato con il bordo superiore dello schermo del telefono, l'asse y è allineato con il bordo sinistro e l'asse z viene direttamente fuori dallo schermo verso di te se lo stai osservando. Quindi, con il telefono appoggiato sul tavolo rivolto verso l'alto, è necessario ottenere valori di (0, 0, -1) rispettivamente per gli assi x, yez. Se si rilascia il telefono, mentre è in caduta libera si dovrebbe ottenere (0, 0, 0).

Supponendo di mantenere il telefono allineato come questo quando ci si sposta in giro, per ottenere l'accelerazione 3-Dimensional in metri al secondo quadrato:

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration 
{ 
    float g = 9.80665f; 
    float x = acceleration.x * g; 
    float y = acceleration.y * g; 
    float z = (acceleration.z + 1.0f) * g; 
    // x, y, and z now hold the absolute acceleration in ms^-2 
} 

Si noti che è necessario sottrarre l'effetto della gravità terrestre, al fine per ottenere l'accelerazione relativa al tuo salotto piuttosto che relativa allo spazio-tempo 4-Dimensionale.

Inoltre, tenere presente che l'accelerometro di iPhone è piuttosto rumoroso e questi valori oscillano anche quando il telefono è statico, quindi è necessario applicare una levigatura. Tuttavia, se si utilizza una tecnica simile a ciò che si sembra fare con i dati di posizione, inserendo i valori in una matrice per ciascun fotogramma per ottenere una media mobile negli ultimi 0,5 secondi, questo sarà già corretto per i dati.

Un'altra cosa di cui essere a conoscenza è che l'accelerometro di iPhone ha un picco di circa 2,3 g. Queste forze g non sono difficili da raggiungere (per esempio se battete le mani insieme) in modo da poterle superare e le tecniche che accumulano i dati non saranno molto affidabili.