How can I fix the X-Axis plot flipping when 180° are reached?

조회 수: 5 (최근 30일)
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

채택된 답변

Ananya Tewari
Ananya Tewari 2021년 3월 23일
I understand you want to unwrap the flipped samples on X-axis.
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 :

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by