2011-11-25 11 views
13

Estoy trabajando en una aplicación para Android que puede calcular el movimiento del dispositivo en 6 direcciones. Creo que puedo usar la aceleración como;Uso del acelerómetro, el giroscopio y la brújula para calcular el movimiento del dispositivo en el mundo 3D

"x = a.t^2" pero a no es una constante. Y este es el problema. ¿Cómo puedo calcular el movimiento total?

+0

Deberá sondear el valor de 'a' y calcular la aceleración promedio, y aplicar ese promedio durante el período de tiempo entre las urnas. – Bringer128

+0

Es muy curioso cómo lograste resolver esto, y si lo conseguiste para que sea preciso permitir una navegación precisa. – ina

Respuesta

18

El acelerómetro le da tres direcciones (x, y, z). Son mediciones de aceleración que es más difícil saber cuál es la posición del dispositivo. Pero, recuerde aceleración está relacionada con la posición a través de la integración:

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

El problema es que no se puede saber cod, porque a medida que se toma la derivada de las constantes abandonan. Entonces, hay una cantidad que no se puede corregir con la falta de C y D. Puedes intentar compensar recordando los valores que usaste por última vez. Entonces, después de tomar 3 muestras, puedes comenzar a calcular la posición a partir de eso.

Existe una gran cantidad de información sobre cómo interpretar los datos de los sensores. Como averiguar dónde está la gravedad para la orientación y restar la gravedad para obtener aceleración lineal.

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

Aquí es una manera de llegar a su posición mediante un acelerómetro junto con un algoritmo para encontrar la posición en detalle:

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

+2

Especialmente el segundo enlace es una mina de oro para mí. Muchas gracias. – kubudi

+0

Solo una advertencia: obtendrá horribles errores de integración. – Ali

+0

Será. Solo espera. – kubudi

4

Es cierto, se obtiene la posición mediante la integración de la aceleración lineal dos veces. Pero el error es horrible. Es inútil en la práctica.

Aquí está an explanation why (Google Tech Talk) a las 23:20. Recomiendo este video.

No es el ruido del acelerómetro el que causa el problema sino el gyro white noise, consulte la subsección 6.2.3 Propagación de errores. (Por cierto, también necesitará los giroscopios).

Una pregunta similar es Distance moved by Accelerometer.

+0

gracias, pero creo que no necesito gyro. ¿Puedes explicar por qué crees que es necesario encontrar distancia movida? – kubudi

+0

El SensorManager necesita los giroscopios si está utilizando la aceleración lineal. En cuanto a la respuesta aceptada, espero que sepas que el resultado que obtienes será muy pobre. Mucho peor de lo que esperabas – Ali

+0

¿Por qué? Gyro te está regresando la velocidad angular. ¿Qué necesitas para la aceleración? Realmente no lo entiendo. – kubudi

Cuestiones relacionadas