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.

Cualquier ayuda por favor?

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]). 
  • ¿Cómo puedo simular el acelerómetro en el emulador de Android?
  • Contador de pasos en Android: ¿siempre activado?
  • Mal Datos del acelerómetro con vibración
  • ¿Cómo es posible que la aplicación Google Fit mide el número de pasos todo el tiempo sin drenar la batería?
  • La música en mi juego perturba los valores del acelerómetro. ¿Cómo resolver esto?
  • Manera correcta de usar SOLO Giroscopio y Acelerómetro para obtener el ángulo de corriente fiable en cualquier eje de ANDROID
  • Cómo crear una aplicación de Android que se activa en eventos de sacudidas cuando la pantalla está bloqueada?
  • El acelerómetro detiene la entrega de muestras cuando la pantalla está apagada en Droid / Nexus One incluso con un WakeLock
  • Detección de datos periódicos desde el acelerómetro del teléfono
  • Combine giroscopio con acelerómetro para obtener el rumbo
  • Utilizando acelerómetro, giroscopio y brújula para calcular el movimiento del dispositivo en el mundo 3D
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.