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]). 
  • Orientación desde Android Acelerómetro
  • Calcular la altura de mi teléfono
  • Mal Datos del acelerómetro con vibración
  • ¿Es posible detectar movimiento cuando la pantalla está apagada?
  • Dibujo en el aire con el teléfono Android
  • Calcular el ángulo del teléfono (Android)
  • Detección de datos periódicos desde el acelerómetro del teléfono
  • Acelerómetro (acceso rápido) mediante NativeActivity NDK
  • ¿Cómo enviar valores de Acelerómetro falsos a una aplicación en un dispositivo real?
  • Detectar si la persona se cae
  • Gyro Sensor drift y Estimación de ángulo correcto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.