Error PlottingΒΆ

Warning

Looking for the raw code or download? See the GitHub repository.

This is the MATLAB code used to plot the error from the log files saved onto the SD card. This is useful for tuning the PI controller and debugging.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 errData = importdata('ERRORLOG.txt');
 dispData = importdata('DISPLOG.txt');
 refData = importdata('toLever.txt');
 tvec = 0:0.1:3;

 figure(8)
 plot(tvec, errData(:,1), tvec, errData(:,2), tvec, errData(:,3))
 xlabel('Time (s)')
 ylabel('Error (radians)')
 legend('Motor 1 Error', 'Motor 2 Error', 'Motor 3 Error', 'Location', 'northwest')
 sum1 = 0;
 sum2 = 0;
 sum3 = 0;

 for i=1:length(dispData)
     sum1 = sum1 + dispData(i,1);
     sum2 = sum2 + dispData(i,2);
     sum3 = sum3 + dispData(i,3);
     totalDisp(i,1) = sum1;
     totalDisp(i,2) = sum2;
     totalDisp(i,3) = sum3;
 end

 figure(9)

 plot(tvec, totalDisp(:,1), '-o', tvec, totalDisp(:,2), '-x', tvec, totalDisp(:,3), '-^', tvec, refData(:,1), '-r.', tvec, refData(:,2), '--r.', tvec, refData(:,3), '-.r.')
 legend('Motor 1 Disp', 'Motor 2 Disp', 'Motor 3 Disp', 'Motor 1 Ref', 'Motor 2 Ref', 'Motor 3 Ref', 'Location', 'northwest')
 xlabel('Time (s)')
 ylabel('Total Displacement (radians)')

 steadyStateErrorMotor1 = ((totalDisp(length(dispData),1)-refData(length(dispData),1))/refData(length(dispData),1))*100
 steadyStateErrorMotor2 = ((totalDisp(length(dispData),2)-refData(length(dispData),2))/refData(length(dispData),2))*100
 steadyStateErrorMotor3 = ((totalDisp(length(dispData),3)-refData(length(dispData),3))/refData(length(dispData),3))*100

 overShoot1 = max(totalDisp(:,1))-refData(length(dispData),1)
 overShoot2 = max(totalDisp(:,2))-refData(length(dispData),2)
 overShoot3 = max(totalDisp(:,3))-refData(length(dispData),3)
 textbox = sprintf('%s\n%f\n%f\n%f', 'Steady State Errors (%):', steadyStateErrorMotor1, steadyStateErrorMotor2, steadyStateErrorMotor3);
 text(.1, max(max(totalDisp))/2, textbox);
 textbox2 = sprintf('%s\n%f\n%f\n%f', 'Overshoots (radians):', overShoot1, overShoot2, overShoot3);
 text(.1, max(max(totalDisp))/4, textbox2);