Componentes de la gravedad del acelerómetro

Sé que esta pregunta es definitivamente resuelto en algún lugar muchas veces ya, por favor me ilumine si usted sabe de su existencia, gracias.

Rundown rápido: Quiero calcular a partir de un acelerómetro de 3 ejes el componente de gravedad en cada uno de estos 3 ejes. He usado diagramas de cuerpo libre de 2 ejes para calcular el componente de gravedad del acelerómetro en los ejes XZ, YZ y XY del mundo. Pero la solución parece ligeramente descontrolada, es aceptable para casos extremos cuando sólo 1 eje del acelerómetro está expuesto a la gravedad, pero para un tono y rollo de ambos 45 grados, la magnitud total combinada es mayor que la gravedad (obtenida por Xa ^ 2 + 2 + Za ^ 2 = g ^ 2, Xa, Ya y Za son lecturas del acelerómetro en sus ejes X, Y y Z).

Más detalle: El dispositivo es un Nexus One, y tiene un sensor de campo magnético para azimut, tono y rollo, además del acelerómetro de 3 ejes.

En el eje del mundo (con Z en la misma dirección que la gravedad, y X o Y apunta al polo norte, no creo que esto importe mucho?), Asumí que mi dispositivo tiene un tono (P) en el eje YZ, Y un rollo (R) en el eje XZ. Con eso he usado trig simple para obtener: Sin (R) = Ax / Gxz Cos (R) = Az / Gxz Tan (R) = Ax / Az

Hay otro conjunto para el tono, P.

Ahora definí la gravedad para tener 3 componentes en el eje del mundo, un Gxz que es medible sólo en el eje XZ, un Gyz para YZ, y un Gxy para el eje XY. Gxz ^ 2 + Gyz ^ 2 + Gxy ^ 2 = 2 * G ^ 2 el 2G es porque la gravedad se incluye efectivamente dos veces en esta definición.

Oh y el eje XY producen algo más exótico … Te lo explicaré si lo necesitas más tarde.

A partir de estas ecuaciones he obtenido una fórmula para Az, y eliminado las operaciones tan porque no sé cómo manejar tan90 cálculos (es el infinito?).

Así que mi pregunta es, ¿alguien sabe si hice este derecho / incorrecto o capaz de señalarme la dirección correcta?

¡Gracias! DVD

Cuando entiendo su pregunta, usted conoce el tono y la guiñada de su dispositivo (desde el magnetómetro) y desea utilizar esta información para calcular el componente de gravedad a lo largo de cada uno de sus ejes de coordenadas (de dispositivo)?

Como físico me criaron con ángulos de Euler en lugar de pitch-yaw-roll, pero mirando a http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll me gustaría calcular esto como sigue: Suponga que su dispositivo Se orienta inicialmente a lo largo de la trama global de coordenadas, de modo que la gravedad es gvec:={0,0,-g} (en el marco local). Ahora tenemos que calcular las coordenadas locales de gvec a medida que pasamos a través de la guinada-pitch-roll (yaw no hace nada como usted menciona). Para mí esto es más fácil con las matrices de rotación: tenemos que cambiar el signo de los ángulos desde gvec mantiene puesto. Lo haré con Mathematica porque ese es mi martillo y esto es un clavo

 yaw = RotationMatrix[-yawangle,{0,0,1}]; pitch = RotationMatrix[-pitchangle, {0,1,0}]; roll = RotationMatrix[-rollangle,{1,0,0}]; gvec={0,0,-g} yaw.gvec pitch.yaw.gvec roll.pitch.yaw.gvec 

La salida es las coordenadas locales para gvec antes del guiñada, y después de la guinada, el tono, y el rollo (así que la última línea abajo debe ser tu respuesta):

 {0,0,-g} {0,0,-g} {g Sin[pitchangle],0,-g Cos[pitchangle]} {g Sin[pitchangle],-g Cos[pitchangle] Sin[rollangle],-g Cos[pitchangle] Cos[rollangle]} 

Ojalá lo supiera porque también estoy interesado en este problema.

Un buen lugar para empezar a investigar es en http://www.diydrones.com/ . La gente de allí ya ha resuelto este problema en el contexto de los pilotos automáticos de las aeronaves. Hay un montón de alta calidad, código abierto de código vinculado a partir de ese sitio, así como las discusiones de las matemáticas involucradas.

Me doy cuenta de la publicación es antiguo, pero en caso de que otros lo están utilizando: En su última respuesta que está indicando que todavía se ven algunas desviaciones, especialmente bajo ángulos más grandes. He experimentado lo mismo, pero desapareció cuando he añadido una rutina de calibración para capturar la lectura del acelerómetro en una superficie plana e hizo todas las lecturas posteriores en relación con la lectura de la superficie plana.

Gracias Janus! Su explicación un poco me iluminó con respecto a la matriz de rotación. ¡Y la última línea resolvió mi problema!

Ahora sólo tengo que volver a trabajar mis diagramas de cuerpo libre para averiguar lo que he hecho mal … Ya he encontrado que no debería haber tenido un componente XY de la gravedad, ya que la gravedad es orthonormal para el eje XY …

¡Gracias de nuevo!

Editar: seguimiento de esto, la última línea: {g Sin [pitchangle], – g Cos [tangente] Sin [rollangle], – g Cos [tangente] Cos [rollangle]}

He encontrado en lugar de -g Cos [pitchangle] Sin [rollangle] Sin [rollo] de mi diagrama de cuerpo libre se asemeja más a la aceleración real.

Lo que no puedo entender ahora es el último componente -g Cos [pitchangle] Cos [rollangle] ahora es perfecto para pequeños ángulos de tono y rollo, y funciona bien para un ángulo de tono o rollo mientras que el otro se queda en 0, Pero una desviación se hace significativa cuando tanto el tono como el rollo ya no son un ángulo pequeño (digamos 40 grados). En realidad, también me di cuenta de que para lograr un 45 de rollo y 45 de tono en el nexo uno, el teléfono tendría una lectura de eje 0 Z, con X e Y ambos en la aceleración 6.8ish. Mientras que la fórmula resultante de la multiplicación de la matriz de rotación a 45 cilindros y 45 tono sería 0,5 gravedad.

¿Hay algo mal con la salida del sensor de orientación? O es esto como tono y rollo se supone que funcionan?

¿Alguien sabe cómo dar cuenta de esto?

¡Gracias!

No es fácil obtener el vector de gravedad del sensor de aceleración, necesita otro sensor como girocompás (si está disponible) para obtener la parte de gravedad correcta de las lecturas del acelerómetro.

Respecto Navigator

  • Forma correcta de dar formato a la fecha con cadenas como hoy, ayer, mañana, etc
  • Algoritmo para el reconocimiento de canciones
  • ¿Cómo puedo hacer que sea más difícil para los jugadores hackear datos de nivel de juego?
  • Optimización de algoritmos - paralelo AsyncTasks o hilos?
  • Shamsi / Jalali Calender en Android con parámetros de cadena
  • Obtener coordenadas de líneas no geométricas en una imagen binaria
  • Detectar algoritmo de giro de 360 ​​grados
  • Cómo calcular el pie exacto paso de contar con acelerómetro en android?
  • ¿Cómo se activa el "modo lector" en Firefox?
  • ¿Cómo puedo crear efectos de fotos en Android?
  • Cómo encontrar las esquinas de un objeto Rect en openCV?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.