Girando los valores de salida de un giroscopio en un marco de referencia relativo a la tierra

3

Por alguna razón, parece que me he torcido en una gran confusión sobre cómo procesar los datos de mi giroscopio de 3 ejes y mi acelerómetro de 3 ejes para obtener los valores de rotación de giroscopios relacionados con el marco de referencia de la Tierra. es decir, dado que mi acelerómetro mide la gravedad (asumimos que es estable) a lo largo del marco de referencia de los sensores (x, y, z), ¿cómo puedo ajustar los valores de mi giro, medidos a lo largo del mismo marco de referencia de los sensores (x, y, z)? ¿Realmente estoy midiendo la rotación alrededor del marco x (Norte), y (Oeste) y z (hacia abajo) de la Tierra?

Parece que no puedo envolver mi cabeza con el uso de la matriz de rotación. ¿Simplemente empleo una matriz de rotación 3d y multiplico el vector, \ $ [gyro_x, gyro_y, gyro_z] ^ T \ $, por una matriz de rotación, R? Luego asumo que los ángulos de rotación se derivan de alguna manera de las salidas del acelerómetro filtrado, pero tengo problemas para decidir cuáles deberían ser.

Todavía tengo que encontrar una referencia concisa sobre cómo mover los valores de rotación y aceleración del marco de referencia del sensor al marco de referencia global de la tierra. Tal vez alguien pueda ayudar? Gracias

    
pregunta gallamine

1 respuesta

7

Es posible que su confusión se deba al hecho de que existen múltiples soluciones al problema. Si bien su acelerómetro puede decirle qué camino está arriba, no puede distinguir entre el Norte y el Oeste. ES DECIR. Si gira el dispositivo sobre el eje vertical, las salidas de los acelerómetros no cambiarán.

¿Cómo puedes distinguir entre el norte y el oeste? La mejor manera es probablemente agregar una brújula digital a la mezcla. Alternativamente, puede que no te importe saber la diferencia entre el Norte real y el Oeste real. Es posible que solo desee dos ejes horizontales ortogonales. Asumiré lo último.

Define nuestros marcos primero. El marco del dispositivo es (X, Y, Z). El marco de la tierra es (V, H1, H2).

Supongamos que las lecturas del acelerómetro (Ax, Ay, Az) están en el rango -1 .. +1, donde +1 significa hacia arriba. Inmediatamente sabes qué dirección es hacia arriba: es simplemente (Ax, Ay, Az). Pero, ¿cómo obtenemos un eje horizontal? Hay una función llamada Cross Product , que toma dos vectores como entradas y devuelve otro vector en ángulos rectos a ambos. Por lo tanto, podemos encontrar fácilmente un vector en ángulos rectos hacia arriba. En C:

Vector3D V  = (Ax, Ay, Az);
Vector3D H1 = RANDOM_VECTOR;

Vector3D H2 = CrossProduct(V, H1);
H1 = CrossProduct(V, H2);

Normalise(H1);
Normalise(H2);

Entonces, ahora tenemos un vector vertical V y dos vectores horizontales H1 y H2 . Ahora solo necesitamos rotar las lecturas del giroscopio en el mismo marco.

Llamemos a las lecturas del giroscopio (Gx, Gy, Gz). Vamos a convertirlos en coordenadas de rotación del marco de la tierra (GV, GH1, GH2). Todo lo que tienes que hacer es pensar en las lecturas del giroscopio como un solo vector 3D. En qué dirección apunta en el marco del dispositivo. ¿Hacia dónde apunta en el marco de la Tierra?

La respuesta es simple:

GV  = (Gx*V.x)  + (Gy*V.y)  + (Gz*V.z);
GH1 = (Gx*H1.x) + (Gy*H1.y) + (Gz*H1.z);
GH2 = (Gx*H2.x) + (Gy*H2.y) + (Gz*H2.z);

(Espero que sea así) ...

    
respondido por el Rocketmagnet

Lea otras preguntas en las etiquetas