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.

¡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

  • Decodificación y reproducción de vídeo en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.