From ee02a2b27d7bcb81ad4fa54a8dcb20138036bc7c Mon Sep 17 00:00:00 2001
From: Andy Snawerdt <Andy Snawerdt>
Date: Fri, 3 Feb 2017 20:45:35 -0600
Subject: [PATCH] Updated scripts for calculating thrust and drag constant

---
 .../thrustAndDragConstant/calcDragConstant.m  |  22 +++++++++---------
 .../calcThrustConstant.m                      |   6 ++---
 .../thrustDragConstantCalculations.m          |  12 +++++-----
 .../Thrust and Drag Constant Data v2.xlsx     | Bin 0 -> 4897 bytes
 4 files changed, 20 insertions(+), 20 deletions(-)
 create mode 100644 controls/dataCollection/Thrust and Drag Constant Data v2.xlsx

diff --git a/controls/MATLAB/thrustAndDragConstant/calcDragConstant.m b/controls/MATLAB/thrustAndDragConstant/calcDragConstant.m
index 1a888d4f6..5f46efe50 100644
--- a/controls/MATLAB/thrustAndDragConstant/calcDragConstant.m
+++ b/controls/MATLAB/thrustAndDragConstant/calcDragConstant.m
@@ -30,22 +30,22 @@ rotor_speed_3 = data.(5) * (pi/30);
 % done by stacking the data of each motor in a single array and performing
 % a least squares approximation of all of the data.
 %
-%       u: Defined in section 4.2.5
-%       omega: vector of each rotors speed in rad/s
-%       A: column vector of each rotors speed squared
-%       b: Defined in section 5.5.4.1
-%       Kd_vector: Vector containing all experimental Kd values
-%       Vb: Battery voltage
-u1 = ((data.(1)/100) - Pmin)/(Pmax - Pmin);
-u2 = ((data.(1)/100) - Pmin)/(Pmax - Pmin);
-u3 = ((data.(1)/100) - Pmin)/(Pmax - Pmin);
-u4 = ((data.(1)/100) - Pmin)/(Pmax - Pmin);
+% u: Defined in section 4.2.5
+% omega: vector of each rotors speed in rad/s
+% A: column vector of each rotors speed squared
+% b: Defined in section 5.5.4.1
+% Kd_vector: Vector containing all experimental Kd values
+% Vb: Battery voltage
+u1 = ((data.(1)) - Pmin)/(Pmax - Pmin);
+u2 = ((data.(1)) - Pmin)/(Pmax - Pmin);
+u3 = ((data.(1)) - Pmin)/(Pmax - Pmin);
+u4 = ((data.(1)) - Pmin)/(Pmax - Pmin);
 u = [u1; u2; u3; u4];
 Vb = [data.(6); data.(6); data.(6); data.(6)];
 omega = [rotor_speed_0; rotor_speed_1; rotor_speed_2; rotor_speed_3];
 A = omega.^2;
 b = ((u.*Vb)/(Rm*Kq))-omega./(Rm*Kq*Kv)-If/Kq;
 
-Kd = ((A'*A)^-1)*A'*b
+Kd = ((A'*A)^-1)*A'*b;
 end
 
diff --git a/controls/MATLAB/thrustAndDragConstant/calcThrustConstant.m b/controls/MATLAB/thrustAndDragConstant/calcThrustConstant.m
index c69b9fe88..91e8e7618 100644
--- a/controls/MATLAB/thrustAndDragConstant/calcThrustConstant.m
+++ b/controls/MATLAB/thrustAndDragConstant/calcThrustConstant.m
@@ -21,11 +21,11 @@ A = (rotor_speed_0.^2 + rotor_speed_1.^2 + rotor_speed_2.^2 + rotor_speed_3.^2);
 % multiplying by the acceleration of gravity.
 T = (data.Scale_g_/1000)*9.8;
 
-% Calculate the thrust constant (Kt) through the following
-% equation: Kt = (A'A)^-1.*A'.*T as defined on page 65 of "Model
+% Calculate the thrust constant (Kt) through least squares approximation
+% Kt = (A'A)^-1.*A'.*T as defined on page 65 of "Model
 % development, system identification, and control of a quadrotor
 % helicopter" (Matt Rich's Thesis).
-Kt = ((A'*A)^(-1))*(A'*T) 
+Kt = ((A'*A)^(-1))*(A'*T); 
 
 end
 
diff --git a/controls/MATLAB/thrustAndDragConstant/thrustDragConstantCalculations.m b/controls/MATLAB/thrustAndDragConstant/thrustDragConstantCalculations.m
index 1ef354792..827ae3c87 100644
--- a/controls/MATLAB/thrustAndDragConstant/thrustDragConstantCalculations.m
+++ b/controls/MATLAB/thrustAndDragConstant/thrustDragConstantCalculations.m
@@ -2,9 +2,9 @@
 addpath('C:\Users\Andy\Documents\School\MicroCART\GitRepo\MicroCART_17-18\controls\MATLAB\zeroLoadCurrent')
 
 % Import data as a table.
-data = readtable('C:\Users\Andy\Documents\MATLAB\MicroCART\Thrust and Drag Constant\Thrust and Drag Constant Data.xlsx');
+data = readtable('C:\Users\Andy\Documents\School\MicroCART\GitRepo\MicroCART_17-18\controls\dataCollection\Thrust and Drag Constant Data v2.xlsx');
 
-filePath_noLoadCurrentData = 'C:\Users\Andy\Documents\MATLAB\MicroCART\Zero Load Current\No Load Friction Current.csv';
+filePath_noLoadCurrentData = 'C:\Users\Andy\Documents\School\MicroCART\GitRepo\MicroCART_17-18\controls\dataCollection\No Load Friction Current.xlsx';
 
 [I_0, I_1, I_2] = zeroLoadCurrent(filePath_noLoadCurrentData);
 
@@ -14,8 +14,8 @@ rotor_speed_2 = data.(4) * (pi/30);
 rotor_speed_3 = data.(5) * (pi/30);
 
 % Define Pmin and Pmax, as well as the motor parameters Rm, Kv, Kq, and If
-Pmin = 0.40;
-Pmax = 0.8;
+Pmin = 1e5;
+Pmax = 2e5;
 Rm = 0.2308;
 Kv = 96.3422;
 Kq = 96.3422;
@@ -26,8 +26,8 @@ If3 = I_0 * sign(rotor_speed_3) + I_1 * rotor_speed_3 + I_2 * rotor_speed_3.^2;
 If = [If0; If1; If2; If3];
 
 % Call the calc_thrust_constant() function.
-Kt = calcThrustConstant(data);
+Kt = calcThrustConstant(data)
 
 % Call the calc_drift_constant() function.
-Kd = calcDragConstant(data, Pmin, Pmax, Rm, Kv, Kq, If );
+Kd = calcDragConstant(data, Pmin, Pmax, Rm, Kv, Kq, If)
 
diff --git a/controls/dataCollection/Thrust and Drag Constant Data v2.xlsx b/controls/dataCollection/Thrust and Drag Constant Data v2.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..b187c4f2eb2211604727e86c58726f207be56ae4
GIT binary patch
literal 4897
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

literal 0
HcmV?d00001

-- 
GitLab