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.
- Imposibilidad de cambiar la velocidad del acelerómetro
- Obtener ángulo de inclinación desde el acelerómetro de Android
- Cómo usar el Acelerómetro para medir la distancia para el desarrollo de aplicaciones para Android
- Rotar marcador según la dirección del usuario en Google Maps V2 Android
- ¿Dónde puedo encontrar recursos y muestras de código para hacer uso de la señal de un acelerómetro?
Cualquier ayuda por favor?
- Combine giroscopio con acelerómetro para obtener el rumbo
- ¿Cómo puedo obtener la dirección del movimiento usando un acelerómetro?
- La música en mi juego perturba los valores del acelerómetro. ¿Cómo resolver esto?
- Acelerómetro con filtro de paso bajo en Android
- ¿Cómo medir la velocidad del coche por teléfono con acelerómetro y giroscopio?
- Uso de la CPU del sensor Android
- Uso de giroscopio Android en lugar de acelerómetro. Encontré un montón de fragmentos, pero no hay código completo
- Frecuencia de muestreo de sensores de los teléfonos samsung android
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]).