
How can I fix the X-Axis plot flipping when 180° are reached?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Nicolò Dall'Acqua
am 20 Mär. 2021
Bearbeitet: Nicolò Dall'Acqua
am 9 Sep. 2021
Hello everybody,
I am using accelerometer and gyroscope data from an unknown brand IMU, acquired at 833Hz.
I'm trying to represent the IMU orientation during the trial using the imufilter command. When I plot the orientation data, the overall output seems reasonable, but the X-axis has ~20 samples flipped of 180°, and I don't know how to fix this.
I tried to use the unwrap command, but with no success so far.
Could you please help me?
I attach a ZIP with an image of the aforementioned plot and the data matrix.
Thank you,
Nico

close all
clear all %#ok<CLALL>
clc
%% LOAD DATA
dataA = load('accelReadings.mat');
accelReadings = dataA.accelReadings;
dataG = load('gyroReadings.mat');
gyroReadings = dataG.gyroReadings;
%% INSERT Fs AND TIME
Fs = 833; % SAMPLING FREQ [Hz]
time = linspace(0,7850,7851)/833; % TIME VECTOR [s]
Ts = mean(diff(time)); % SAMPLING INTERVAL
%% KALMAN
accelReadings = sgolayfilt(accelReadings,3,11); % FILTER
gyroReadings= sgolayfilt(gyroReadings,3,11); % FILTER
%gyroReadings = unwrap(gyroReadings);
FUSE = imufilter('SampleRate',Fs);
q = FUSE(accelReadings, gyroReadings);
figure
plot(time,eulerd(q,'ZYX','frame')) % PLOT ANGLES
title('3^{rd} Bike Stunt: ESTIMATED ORIENTATION')
legend('Z-axis', 'Y-axis', 'X-axis')
xlabel('Time [s]')
ylabel('Rotation [°]')
grid on
clearvars dataA dataG
0 Kommentare
Akzeptierte Antwort
Ananya Tewari
am 23 Mär. 2021
The unwrap function accepts the threshold in radians. So converting the x-axis samples into radians and then using unwrap for π radians should resolve the issue
q = FUSE(accelReadings, gyroReadings);
% converting quaternions to euler angles
k = eulerd(q,'ZYX','frame');
% converting x-axis angles to radian for using unwrap
x = unwrap(deg2rad(k(:,3)),pi);
% converting radians back to degrees
x = rad2deg(x);
% updating the orientation angles
k(:,3) = x;
% PLOT ANGLES
figure
plot(time,k)
title('3^{rd} Bike Stunt: ESTIMATED ORIENTATION')
legend('Z-axis', 'Y-axis', 'X-axis')
xlabel('Time [s]')
ylabel('Rotation [°]')
grid on
The output of the following code :

1 Kommentar
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Tracking and Sensor Fusion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!