Ángulo entre dos sensores inerciales

1 visualizzazione (ultimi 30 giorni)
Josepa Rico Salvador
Josepa Rico Salvador il 26 Feb 2024
Risposto: Raj il 4 Apr 2024
Estoy tratando de hallar el ángulo entre dos sensores inerciales, uno situado en el brazo y otro en el antebrazo. Lo estoy haciendo mediante quaternios pero no estoy obteniendo el resultado esperado, solo obtengo ruido. ¿Alguien puede ayudarme a identificar mi error o a indicarme si lo estoy haciendo de forma incorrecta? Gracias.
Este es mi código:
accel1 = [accel1Ax, accel1Ay, accel1Az];
gyro1 = [gyro1Gx, gyro1Gy, gyro1Gz];
mag1 = [mag1Mx, mag1My, mag1Mz];
accel2 = [accel2Ax, accel2Ay, accel2Az];
gyro2 = [gyro2Gx, gyro2Gy, gyro2Gz];
mag2 = [mag2Mx, mag2My, mag2Mz];
Fs = 200; % Hz
fuse = complementaryFilter('SampleRate', Fs);
q1 = fuse(accel1, gyro1, mag1);
q2 = fuse(accel2, gyro2, mag2);
Q12 = dist(q2,q1);
%disp(Q12);
angle = rad2deg(Q12);
%disp(angle);
plot(angle);

Risposta accettata

Raj
Raj il 4 Apr 2024
Hola, Como el español no es mi lengua materna, responderé a esta pregunta en inglés. Gracias por su comprensión.
As per my understanding of your query, you wish to find the angle between two inertial sensors. I see in your code in the following lines-
q1 = fuse(accel1, gyro1, mag1);
q2 = fuse(accel2, gyro2, mag2);
The output of the 'fuse' object should be in form of [orientation,angularVelocity]. The orientation can either be in form of N-by-1 vector of 'quaternion'(default) or 3-by-3-by-N array of rotation matrices, where N is the number of samples.
Consider changing the above code lines to-
[q1,v1] = fuse(accel1, gyro1, mag1);
[q2,v2] = fuse(accel2, gyro2, mag2);
Further, you can refer to the documentation of 'complimentaryfilter' function for better understanding-
I hope this solves the issue you were facing!

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!