2010-06-07 17 views
7

Sé que esta cuestión definitivamente se ha resuelto en alguna parte muchas veces, por favor ilumíname si sabes de su existencia, gracias.Componentes de gravedad del acelerómetro

Despliegue 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 utilizado diagramas de cuerpo libre de 2 ejes para calcular el componente de gravedad del acelerómetro en los ejes mundiales X-Z, Y-Z y X-Y. Pero la solución parece un poco apagada, es aceptable para casos extremos cuando solo 1 eje del acelerómetro está expuesto a la gravedad, pero para un paso y balanceo de 45 grados, la magnitud total combinada es mayor que la gravedad (obtenida por Xa^2 + Ya^2 + Za^2 = g^2; Xa, Ya y Za son lecturas del acelerómetro en sus ejes X, Y y Z).

Más detalles: El dispositivo es un Nexus One, y tiene un sensor de campo magnético para azimut, cabeceo y balanceo 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 cree que esto importa mucho?), Asumí que mi dispositivo tiene un tono (P) el eje YZ y un rodillo (R) en el eje XZ. Con que utilicé trigonométrica sencilla de obtener: Sin (R) = Ax/GXZ Cos (R) = Az/GXZ Tan (R) = Ax/Az

Hay otro conjunto de lanzamiento, P.

Ahora he definido la gravedad para tener 3 componentes en el eje del mundo, un Gxz que se puede medir solo en el eje XZ, un Gyz para YZ y un eje Gxy para XY. Gxz^2 + Gyz^2 + Gxy^2 = 2 * G^2 el 2G se debe a que la gravedad se incluye efectivamente dos veces en esta definición.

Oh y el eje X-Y producen algo más exótico ... Explicaré si es necesario más tarde.

De estas ecuaciones obtuve una fórmula para Az, y eliminé las operaciones de tan porque no sé cómo manejar los cálculos tan90 (¿es infinito?).

Así que mi pregunta es, ¿alguien sabe si hice esto bien/mal o puedo dirigirme en la dirección correcta?

Gracias! Dvd

Respuesta

1

Desearía saber porque también estoy interesado en este problema.

Un buen lugar para comenzar a investigar está 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 una tonelada de alta calidad, código fuente abierto vinculado desde ese sitio, así como discusiones de las matemáticas involucradas.

5

Según entiendo su pregunta, ¿conoce el cabeceo y 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 (dispositivo)?

Como físico me crié con ángulos de Euler en lugar de cabeceo-viraje en eventos, pero mirando a http://en.wikipedia.org/wiki/Yaw,_pitch,_and_roll Yo calcularía de la siguiente manera: Supongamos que el dispositivo está orientado inicialmente a lo largo del sistema de coordenadas global, por lo que la gravedad es gvec:={0,0,-g} (en el marco local). Ahora tenemos que calcular las coordenadas locales de gvec a medida que avanzamos en el giro de cabeceo (la guiñada no hace nada como usted menciona). Para mí, esto es más fácil con matrices de rotación: tenemos que cambiar el signo de los ángulos, ya que gvec se queda.Voy a hacer esto con Mathematica porque ese es mi martillo y este 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 de guiñada, y después de guiñada, cabeceo y balanceo (por lo que la última línea de abajo debería ser su 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]} 
0

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

Ahora solo tengo que volver a trabajar mis diagramas de cuerpo libres para descubrir lo que hice mal ... Ya encontré que no debería haber tenido un componente XY de gravedad, ya que la gravedad es ortonormal al eje XY. ..

¡De nuevo!

Editar: seguimiento a la presente, la última línea: {g sen [pitchangle], - g Cos [pitchangle] Sin [rollangle], - g Cos [pitchangle] Cos [rollangle]}

I He encontrado en lugar de -g Cos [pitchangle] Sin [rollangle] Sin [roll] 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 ángulos pequeños de cabeceo y balanceo, y funciona bien para un ángulo de cabeceo o balanceo mientras que el otros se quedan en 0, pero una desviación se vuelve significativa cuando tanto el tono como el balanceo ya no son un ángulo pequeño (digamos 40 grados). En realidad, también me di cuenta de que para lograr un tono de 45 y 45 en el nexo uno, el teléfono tendría una lectura de 0 Z, con X e Y ambos con una aceleración de 6.8. Mientras que la fórmula resultante de la multiplicación de la matriz de rotación en 45 rollos y 45 pasos sería 0.5 gravedad.

¿Hay algún problema con la salida del sensor de orientación? ¿o es así como se supone que el pitch and roll funciona?

¿Alguien sabe cómo explicar esto?

Gracias!

+0

Estoy buscando un problema similar. Entonces obtuviste una fórmula exacta para eliminar el factor de gravedad de todos los ejes, teniendo en cuenta los valores de orientación del dispositivo en ese instante. Solo quiero aceleración pura en todos los ejes sin componentes de gravedad. – Pritam

+1

Esto no debería ser una respuesta. Esto debería ser un comentario a la respuesta de Janus, o anexado a su pregunta con "Actualización:" – bcorso

0

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

respecto Navigator

+0

Hola, estoy buscando un pseudocódigo para hacer esto con el acelerómetro y el giroscopio. – Bresiu

1

que dan cuenta de la publicación es antiguo pero en caso de que otros lo están utilizando: En su última respuesta, estás indicando que todavía ve alguna desviación especialmente bajo ángulos grandes. Experimenté lo mismo, pero desapareció cuando agregué una rutina de calibración para capturar la lectura del acelerómetro en una superficie plana e hice todas las lecturas posteriores en relación con la lectura de la superficie plana.

Cuestiones relacionadas