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