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.
- Necesita ayuda para centrar un EditText en un Layout Lineal
- ¿Qué es TextView Gravity de forma predeterminada?
- Configuración de la gravedad del centro de la vista de los niños Cambiar la alineación del diseño de otra vista de los niños en la disposición horizontal?
- ¿Es posible especificar valores de gravedad múltiples en el elemento spinner custom_style.xml?
- Cambiar posición de fondo / gravedad en ImageButton
¿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 ()?
- Android TextView gravedad
- Creando la gravedad del juego en Android (continuación)?
- Android Support Design TabLayout: Centro de Gravedad y Modo Scrollable
- Cómo establecer la gravedad de textview programatically con RelativeLayout?
- La gravedad de TextView no funciona con hebreo
- El centro de gravedad RelayLayout no funciona
- SetGravity para GridLayout no funciona
- Alinear botones en GridLayout
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
- SeekBar en un NavigationDrawer
- Error: ANDROID_HOME no está establecido y el comando "android" no está en tu PATH. Debe cumplir al menos una de estas condiciones