Cómo eliminar Factor de gravedad de las lecturas del acelerómetro en el acelerómetro Android de 3 ejes
¿Puede alguien ayudar en la eliminación del factor g de las lecturas del acelerómetro. Estoy usando SensorEventListener con método onSensorChanged () para obtener los datos de Sensor.TYPE_ACCELEROMETER. Sólo necesito valores de aceleración pura en todas las direcciones. Así que en cualquier estado si el dispositivo es estable (o en velocidad constante), debe dar (0,0,0,0,0,0) aproximadamente. Actualmente, dependiendo de su tono y rollo, me da una salida variable dependiendo de las fuerzas de g que actúan en cada eje.
Espero que haya alguna fórmula para eliminar esto, ya que también obtener valores de orientación (tono y rollo) de Sensor.TYPE_ORIENTATION oyente. Había usado algunos pero no funcionaba.
- Biblioteca FFT en android Sdk
- Android Movimiento acelerómetro bola
- Android Solución para los sensores que no funcionan cuando la pantalla está desactivada
- La precisión del acelerómetro Xoom de Android siempre es poco fiable
- Problemas relacionados con el giroscopio con la orientación del dispositivo
Cualquier ayuda por favor?
- Calculando la distancia usando aceleración lineal android
- ¿Qué es el acelerómetro androide?
- Android: Quiero sacudirlo
- Gyro Sensor drift y Estimación de ángulo correcto
- ¿Dónde puedo encontrar recursos y muestras de código para hacer uso de la señal de un acelerómetro?
- Detectar si la persona se cae
- ¿Es posible tener la distancia movida por un teléfono inteligente utilizando sólo el acelerómetro?
- ¿Cómo mejorar la precisión de los sensores de acelerómetro y brújula?
Echa un vistazo al siguiente enlace.
http://developer.android.com/reference/android/hardware/SensorEvent.html
Puede utilizar un filtro de paso bajo.
Haga esto para cada uno de los valores de su sensor:
g = 0.9 * g + 0.1 * v
Donde v
es su valor actual del sensor y g
es una variable global inicialmente puesta a cero. Tenga en cuenta que necesitará tantas variables g como tenga ejes.
Con v = v - g
puede eliminar el factor de gravedad del valor del sensor.
Utilice Sensor.TYPE_LINEAR_ACCELERATION en lugar de Sensor.TYPE_ACCELEROMETER
Diferenciando con respecto al tiempo una función del tiempo le libera de las constantes.
Así que tomando la derivada de la señal del acelerómetro obtendrá el "Jerk", que puede reintegrarse para obtener la parte no constante de la aceleración que está buscando.
En términos de Layman, tomar una muestra del acelerómetro cada 1 segundo, y restarlo de la muestra anterior. Si la respuesta es (muy cerca de) cero, no se está acelerando relativamente a la tierra. Si el resultado es distinto de cero, inténtelo (en este caso, multiplique por un segundo), tiene su aceleración.
Dos cosas, sin embargo: -Ver por el ruido en la señal, redondear su entrada. -No espere resultados hiper-precisos de los acelerómetros on-chip. Puede usarlos para detectar sacudidas, cambios en la orientación, pero no realmente para saber cuántos G's está experimentando mientras realiza giros bruscos en su coche.
Una manera (para los dispositivos solamente con acelerómetro) es quitar el vector de la gravedad de datos del acelerómetro restando los valores que vendrían en caso estático para la misma orientación. Pero como la orientación se calcula de nuevo tomando lecturas de aceleración y no de forma independiente, no es muy precisa.
Giroscopio puede ayudar en este caso. Pero pocos androides todavía tienen un verdadero giroscopio. Y usar sus lecturas crudas no es tan simple.
Sustraiga g (~ 9.8m / s ^ 2) veces la dirección z de la matriz de rotación. O para ser más explícito al respecto,
a = your accelerometer reading, R = your rotation matrix (as a 9-long vector).
Entonces lo que quieres es
(a[0]-g*R[6], a[1]-g*R[7], a[2]-g*R[8]).