Data Visualization (Error) via sensor
4 views (last 30 days)
Show older comments
Heyyy, I am working on getting plots of Accelration, Angular Velocity and Magnetic Field and i am pretty close in obtaining them, I am stuck in this error that says:
Index in position 1 exceeds array bounds (must not exceed 10).
I guess that is because the sample rate for my sensor is 10 and it stores 10 values in matrices and my loop exceeds that limit. I just want help in resolving this error. I would be very pleased if someone could modify below code into error free code.
CODE:
%Clearing up ports and all objects
clc
clear all
%Creating Arduino Object
ard = arduino()
%Defining sample rate
fs = 100;
%Creating IMU sensor object
my_imu = mpu9250(ard, 'SampleRate', fs, 'OutputFormat', 'matrix')
%Reading the raw data form sensor and storing them in variables
[my_Accel, my_AngVel, my_Mag] = read(my_imu) %Matrix form
%Provide time frame in seconds
senseFrame = 60;
%Measure approximate execution time of a single read cycle
tic;
[Accel, AngVel, Mag] = read(my_imu);
tDelta = toc;
%Number of samples to be calculated in sensorFrame time frame
numSamples = floor(senseFrame/tDelta);
%Time Vector
tVector = linspace(0, senseFrame, numSamples);
tCorrection = 0;
recordedData = zeros(numSamples, 3, 3);
%Plotting the Data
subplot(3, 1, 1)
hold on
% Create handle to X-axis acceleration animatedline object
hAx = animatedline('color', 'r', 'linewidth', 1.25);
% Create handle to Y-axis acceleration animatedline object
hAy = animatedline('color', 'k', 'linewidth', 1.25);
% Create handle to Z-axis acceleration animatedline object
hAz = animatedline('color', 'b', 'linewidth', 1.25);
legend('A_x (m/s^2)','A_y (m/s^2)','A_z (m/s^2)');
ylabel('Acceleration (m/s^2)');xlabel('Time (s)');
title('Reading Accelerometer values from MPU9250 sensor', 'fontsize', 12);
axis([0 senseFrame -30 30]);
hold off
grid minor
subplot(3, 1, 2)
% Create handle to X-axis angular velocity animatedline object
hVx = animatedline('color', 'r', 'linewidth', 1.25);
% Create handle to Y-axis angular velocity animatedline object
hVy = animatedline('color', 'k', 'linewidth', 1.25);
% Create handle to Z-axis angular velocity animatedline object
hVz = animatedline('color', 'b', 'linewidth', 1.25);
legend('\omega_x (rad/s)','\omega_y (rad/s)','\omega_z (rad/s)');
ylabel('Angular Velocity (rad/s)');xlabel('Time (s)');
title('Reading Angular velocity values from MPU9250 sensor', 'fontsize', 12);
axis([0 senseFrame -10 10]);
hold off
grid minor
subplot(3, 1, 3)
% Create handle to X-axis magnetic field animatedline object
hMagx = animatedline('color', 'r', 'linewidth', 1.25);
% Create handle to Y-axis magnetic field animatedline object
hMagy = animatedline('color', 'k', 'linewidth', 1.25);
% Create handle to Z-axis magnetic field animatedline object
hMagz = animatedline('color', 'b', 'linewidth', 1.5);
legend('\mu_x (\muT)','\mu_y (\muT)','\mu_z (\muT)');
ylabel('Magnetic Field (\muT)');xlabel('Time (s)');
title('Reading Magnetometer values from MPU9250 sensor', 'fontsize', 12);
axis([0 senseFrame -50 50]);
hold off
grid minor
%Read and plot the data from sensor
for i = 1:numSamples
% Read Acceleration, Angular Velocity and Mangnetic field...
% values from the sensor in matrix form
[AccelVal, AngVelVal, MagVal] = read(my_imu);
tic;
addpoints(hAx, tVector(i) + tCorrection, AccelVal(1));
addpoints(hAy, tVector(i) + tCorrection, AccelVal(2));
addpoints(hAz, tVector(i) + tCorrection, AccelVal(3));
addpoints(hVx, tVector(i) + tCorrection, AngVelVal(1));
addpoints(hVy, tVector(i) + tCorrection, AngVelVal(2));
addpoints(hVz, tVector(i) + tCorrection, AngVelVal(3));
addpoints(hMagx, tVector(i) + tCorrection, MagVal(1));
addpoints(hMagy, tVector(i) + tCorrection, MagVal(2));
addpoints(hMagz, tVector(i) + tCorrection, MagVal(3));
recordedData(i, :, 1) = AccelVal(i,:);
recordedData(i, :, 2) = AngVelVal(i,:);
recordedData(i, :, 3) = MagVal(i,:);
tCorrection = toc;
drawnow;
end
0 Comments
Answers (1)
Ryan Salvo
on 10 Oct 2022
Hi Haris,
The AccelVal, AngVelVal, and MagVal variables are incorrectly indexed at the end of final for-loop.
recordedData(i, :, 1) = AccelVal(i,:);
recordedData(i, :, 2) = AngVelVal(i,:);
recordedData(i, :, 3) = MagVal(i,:);
These values are of size SamplesPerRead-by-3. Since the indexing variable i is increasing from 1 to numSamples, once it is greater than the default SamplesPerRead value of 10, the code errors.
Thanks,
Ryan
0 Comments
See Also
Categories
Find more on Weather and Atmospheric Science in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!