Por alguna razón, parece que me he metido en una gran confusión sobre cómo procesar datos de mi giroscopio de 3 ejes y acelerómetro de 3 ejes para obtener valores de rotación del giroscopio 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 ajusto los valores de mi giroscopio, medidos a lo largo del mismo marco de referencia de los sensores (x,y,z) como que en realidad estoy midiendo la rotación sobre el marco de la Tierra x (Norte), y (Oeste) y z (hacia abajo) en dirección?
Parece que no puedo entender el uso de la matriz de rotación. ¿Simplemente empleo una matriz de rotación 3d y multiplico el vector, , por una matriz de rotación, R? Luego asumo que los ángulos de rotación se derivan de alguna manera de las salidas filtradas del acelerómetro, 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. ¿Quizás alguien pueda ayudar? Gracias
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á hacia arriba, no puede distinguir entre el norte y el oeste. IE 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, es posible que no le interese saber la diferencia entre el norte real y el oeste real. Es posible que solo desee dos ejes horizontales ortogonales. Asumiré lo último.
Defina nuestros marcos primero. El marco del dispositivo es (X, Y, Z). El marco de la tierra es (V, H1, H2).
Supongamos que las lecturas de su acelerómetro (Ax, Ay, Az) están en el rango -1 .. +1, donde +1 significa directamente hacia arriba. Inmediatamente sabes en qué dirección está 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 ángulo recto con ambos. Por lo tanto, podemos encontrar fácilmente un vector en ángulo recto con Up. 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 cuadro.
Llamemos a las lecturas del giroscopio (Gx, Gy, Gz). Vamos a convertirlos en coordenadas de rotación del sistema terrestre (GV, GH1, GH2). Todo lo que tiene que hacer es pensar en las lecturas del giroscopio como un solo vector 3D. Hacia dónde apunta en el marco del dispositivo. ¿Hacia dónde apunta en el marco de la Tierra?
La respuesta es simplemente:
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 correcto)...
solojeff
galamina
solojeff