2011-11-25 15 views
13

Sto lavorando a un'applicazione Android in grado di calcolare il movimento del dispositivo in 6 direzioni. Penso di poter usare l'accelerazione come;Utilizzo di accelerometro, giroscopio e bussola per calcolare il movimento del dispositivo nel mondo 3D

"x = a.t^2" ma a non è una costante. E questo è il problema. Come posso calcolare il movimento totale ??

+0

È necessario eseguire il polling del valore di 'a' e calcolare l'accelerazione media e applicare tale media nel periodo di tempo tra i sondaggi. – Bringer128

+0

Molto curioso di come sei riuscito a risolvere questo problema, e se lo hai ottenuto in modo che sia preciso per consentire una navigazione di precisione. – ina

risposta

18

L'accelerometro fornisce tre direzioni (x, y, z). Sono misure di accelerazione che è più difficile sapere quale sia la posizione del dispositivo. Ma, ricorda l'accelerazione è legato alla posizione attraverso l'integrazione:

a(t) = a[x] 
v(t) = a[x]t + c 
x(t) = a[x]t^2 + ct + d 

Il problema è che non si può sapere C o D, perché come si prende la derivata le costanti di drop out. Quindi c'è una somma che non si può risolvere con c e d mancanti. Puoi tentare di compensare ricordando i valori usati per ultimi. Quindi, dopo aver preso 3 campioni, puoi iniziare a calcolare la posizione da questo.

C'è una quantità significativa di informazioni su come interpretare i dati dai sensori. Come capire dove si trova la gravità per l'orientamento e sottrarre la gravità per ottenere l'accelerazione lineare.

http://developer.android.com/reference/android/hardware/SensorEvent.html

Ecco un modo per venire con posizione utilizzando un accelerometro insieme ad un algoritmo per trovare la posizione in dettaglio:

http://www.freescale.com/files/sensors/doc/app_note/AN3397.pdf

+2

Soprattutto il secondo link è una miniera d'oro per me. Molte grazie. – kubudi

+0

Solo un avvertimento: otterrai degli errori di integrazione orribili. – Ali

+0

Sarà. Aspetta. – kubudi

4

E 'vero, si ottiene la posizione integrando la accelerazione lineare due volte. Ma l'errore è orribile. È inutile nella pratica.

Ecco an explanation why (Google Tech Talk) alle 23:20. Consiglio vivamente questo video.

Non è il rumore dell'accelerometro che causa il problema, ma lo gyro white noise, vedere la sottosezione 6.2.3 Propagazione degli errori. (A proposito, avrete bisogno anche dei giroscopi.)

Una domanda simile è Distance moved by Accelerometer.

+0

grazie ma penso di non aver bisogno di giroscopio. Puoi spiegare perché pensi che sia necessario trovare la distanza spostata? – kubudi

+0

Il SensorManager richiede i giroscopi se si utilizza l'accelerazione lineare. Per quanto riguarda la risposta accettata, spero che tu sappia che il risultato ottenuto sarà molto povero. Molto peggio di quanto ti aspetti. – Ali

+0

Perché? Il giroscopio ti sta restituendo la velocità angolare. Di quello che ti serve per l'accelerazione. Io davvero non capisco. – kubudi

Problemi correlati