Android obtener acelerómetros en el sistema de coordenadas de la tierra
Me gustaría obtener acelerómetros en Android y tenerlos en el sistema de coordenadas de tierra, al igual que en este tema Aceleración desde el sistema de coordenadas del dispositivo en el sistema de coordenadas absolutas o aquí Transformación de datos del acelerómetro de las coordenadas del dispositivo a coordenadas del mundo real, trabaja para mi. Estoy trabajando en Procesamiento. El proyecto consiste simplemente en rastrear las aceleraciones del teléfono en el espacio, no importa cómo es (de pie, en el lado …). Soy nuevo en Android también. ¡Agradecería su ayuda! Gracias.
Edit: No necesito la posición exacta de los teléfonos, sólo aceleraciones.
- Java equivalente de #ifdef que permite código no compilable
- Procesamiento para Android, uso de bibliotecas
- Rendering problemas y no puede resolver R en Android Studio 2.0, ¿por qué se produce y cómo resolver estos?
- Build.xml da errores al compilar un boceto de Procesamiento que incluye ArduinoAdkUsb
- Problemas de compilación de build.xml en Android SDK con procesamiento
- ¿Cómo debo llamar al método onDraw () de una vista de Android 30 veces por segundo
- Reducción de tamaño de archivo de vídeo MediaMuxer (compresión, disminución de resolución)
- Cómo guardar una imagen de Android Processing Sketch
- Enviar datos desde Arduino a la aplicación para Android mediante Bluetooth
- Android.app.SuperNotCalledException: La actividad no ha llamado a super.onStop ()
- ¿Por qué desaparece un conjunto de imágenes de Android?
- Problema de renderización de VectorDrawable
- Cómo pausar / dormir hilo o proceso en Android?
¡Finalmente lo solucioné! He combinado 2 respuestas anteriores, aquí está el código:
monSensorManager.getRotationMatrix(Rotate, I, gravity_values, mag_values); float[] relativacc = new float[4]; float[] inv = new float[16]; relativacc[0]=lin_values[0]; relativacc[1]=lin_values[1]; relativacc[2]=lin_values[2]; relativacc[3]=0; android.opengl.Matrix.invertM(inv, 0, Rotate, 0); android.opengl.Matrix.multiplyMV(earthAcc, 0, inv, 0, relativacc, 0);
1) Obtener el vector de unidad de teléfono en coordenadas de tierra 2) Invertir matriz para obtener el vector de unidad de tierra en coordenadas de teléfono 3) Multiplicar aceleración de teléfono por vector unidad para transformar coordenadas de teléfono a coordenadas de tierra. ¡Gracias por toda tu ayuda!
Los accelerometers
se dan en términos del sistema de coordenadas del dispositivo. Para expresar los accelerometers
en términos del sistema de coordenadas de tierra, es necesario encontrar el cambio de matriz de base desde el sistema de coordenadas del dispositivo al sistema de coordenadas de tierra. Esto es lo que la rotation matrix
está en el método getRotationMatrix
.
Por lo tanto, tiene que registrarse para TYPE_MAGNETIC_FIELD
y filtrar valores TYPE_ACCELEROMETER
o usar TYPE_GRAVITY
para obtener la rotation matrix
. Una vez obtenida la rotation matrix M
, es fácil convertir el accelerometer vector
en el sistema de coordenadas del dispositivo al sistema de coodinación de tierra.
A_E = M * A_D
Es decir
A_E[0] = M[0] * A_D[0] + M[1] * A_D[1] + M[2] * A_D[2]; A_E[1] = M[3] * A_D[0] + M[4] * A_D[1] + M[5] * A_D[2]; A_E[0] = M[6] * A_D[0] + M[7] * A_D[1] + M[8] * A_D[2];
Donde A_D
es el acelerómetro devuelto en onSensorChanged
- Captura de firmas para android usando phonegap
- ¿Cambia el color de fondo en android destruir el aspecto del widget?