android eliminar la gravedad de las lecturas de acelerómetro

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

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

¿Podrías por favor ayudarme? Mi código debe 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 ()?

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

Simplemente se habla de un filtro de paso bajo construye un promedio ponderado de todos sus valores de la historia. Si tiene por ejemplo 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 sólo empujará su valor medio lentamente debido al 10%.

Aceleración lineal es lo que usted necesita. Compruebe Sensor.TYPE_LINEAR_ACCELERATION aquí .

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 el uso de 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 .

No muy seguro de lo que está tratando de lograr, pero si usted está buscando la magnitud (que dará un resultado entre 0 y 1), entonces todo lo que haces es dividir el resultado por 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

  • Android: Alinea un texto a la izquierda y centra la vista de texto en la vista de los padres
  • ¿Por qué android: layout_gravity = "derecho" no funciona aquí en android xml
  • layout_gravity no funciona
  • Configuración de la gravedad de ImageView en el centro de android mediante programación
  • Desplazamiento de Android TextView hacia abajo
  • Administrar el diseño dentro de un radiogrupo horizontal orientado
  • Cómo establecer gravedad y gravedad de diseño de un LinearLayout programatically
  • Android: Selección de spinner alineada a la izquierda
  • ¿Cuál es la diferencia entre sensores de "gravedad" y "aceleración" en Android?
  • Cómo configurar textview en el centro del botón de inicio de sesión de G + en Android
  • Textview La gravedad no funciona correctamente en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.