tutoriales studio proyectos programacion guia desarrollo avanzado aplicaciones android accelerometer gravity

programacion - proyectos android studio pdf



Android elimina la gravedad de las lecturas del acelerĂ³metro (4)

Estoy desarrollando una aplicación para Android en la que necesito eliminar la gravedad de las lecturas del acelerómetro. He leído varias discusiones sobre este problema, también he encontrado un algoritmo here , pero realmente no lo entendí.

Quiero filtrar la gravedad de cada eje, no de la aceleración total.

¿Podría por favor ayudarme? Mi código debería ser algo como:

public void onSensorChanged(SensorEvent sensorEvent) { float vals[] = sensorEvent.values; float accelerationX = filterGravity(vals[0]); float accelerationY = filterGravity(vals[1]); float accelerationZ = filterGravity(vals[2]); }

¿Qué código debo colocar en el método filterGravity ()?


No está muy seguro de lo que intenta lograr, pero si busca la magnitud (que dará un resultado entre 0 y 1), entonces todo lo que debe hacer es dividir el resultado entre 10

public void onSensorChanged(SensorEvent sensorEvent) { float vals[] = sensorEvent.values; float accelerationX = (vals[0]/10); float accelerationY = (vals[1]/10); float accelerationZ = (vals[2]/10);

}

En un entorno de juego, cuando el sensor está a plena inclinación, su objeto estará a su velocidad máxima


Para una solución básica, necesitaría un filtro de paso bajo; otros enfoques, como un filtro de Kalman, son bastante difíciles con respecto a las matemáticas que hay detrás. Un simple ejemplo de Android está a un clic de su enlace en http://developer.android.com/reference/android/hardware/SensorEvent.html#values .

En pocas palabras, un filtro de paso bajo genera un promedio ponderado de todos sus valores históricos. Si, por ejemplo, tiene un factor de filtrado de 0.1, significa que el 10% de su valor actual se agrega al valor medio anterior: newMeanValue = 10% de currentValue + 90% de oldMeanValue. Eso significa que incluso si hay un pico abrupto, solo empujará su valor medio lentamente debido al 10%.


Si no tiene un teléfono con TYPE_LINEAR_ACCELERATION, está atascado con TYPE_ACCELERATION, que no puede separar la gravedad (inclinación) de la aceleración lineal.

Una opción es aplicar el filtro de paso bajo. Otro enfoque es utilizar la fusión de sensores si el giroscopio está disponible. Ambos enfoques tienen sus ventajas y desventajas.

Tengo muchos ejemplos de trabajo en el proyecto de código abierto Acceleration Explorer .


Aceleración lineal es lo que necesitas. Compruebe Sensor.TYPE_LINEAR_ACCELERATION here .