From e18c006b6bdb3777db2b41fc2aa03acd76189b5a Mon Sep 17 00:00:00 2001 From: "Pier Francesco A. Bachini" <pierfrancesco.bachini@skywarder.eu> Date: Thu, 25 Jul 2024 16:09:16 +0200 Subject: [PATCH] [gnc] Update Parafoil class and ode with control structure --- classes/components/Parafoil.m | 8 ++------ functions/odeFunctions/descentParafoil.m | 19 ++++++++++--------- .../config/paraConfig.m | 6 ------ missions/missionConfig.m | 3 +-- 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/classes/components/Parafoil.m b/classes/components/Parafoil.m index d02cc7b..6a60eb0 100644 --- a/classes/components/Parafoil.m +++ b/classes/components/Parafoil.m @@ -14,12 +14,6 @@ classdef Parafoil < Para name = '' surface double % [m^2] Surface deltaSMax double % [-] Aerodynamic control coefficient - symmetric, max value - - uMax - uMin - identification - deltaATau - maxSpeed mass double % [kg] Parafoil Mass openingTime double % [s] Parafoil opening time (delay + time to get fully open) @@ -47,6 +41,8 @@ classdef Parafoil < Para cNR double % [-] aerodynamic control coefficient - asymetric, Cnr cNSurface double % [-] aerodynamic control coefficient - asymetric, CnDeltaA + + controlParams = [] % Struct containing all the control parameters end properties(SetAccess = private) diff --git a/functions/odeFunctions/descentParafoil.m b/functions/odeFunctions/descentParafoil.m index 104a272..17b484b 100644 --- a/functions/odeFunctions/descentParafoil.m +++ b/functions/odeFunctions/descentParafoil.m @@ -134,11 +134,11 @@ end % Saturation on servo angle, needed if the actuation is faster than the % integration step if isControlActive - if deltaA > parafoil.uMax - deltaA = parafoil.uMax; + if deltaA > parafoil.controlParams.uMax + deltaA = parafoil.controlParams.uMax; isAngleSaturated = true; - elseif deltaA < parafoil.uMin - deltaA = parafoil.uMin; + elseif deltaA < parafoil.controlParams.uMin + deltaA = parafoil.controlParams.uMin; isAngleSaturated = true; end end @@ -187,7 +187,7 @@ angAcc = inverseInertia*(momentAero - cross(omega, inertia * omega)); dDeltaA = 0; if isControlActive && ~isAngleSaturated deltaARef = control.deltaARef; - if ~parafoil.identification + if ~parafoil.controlParams.identification % set velocity of servo (air brakes) if length(deltaARef) == 2 % for the recallOdeFunction if theta < control.timeChangeRef @@ -204,9 +204,9 @@ if isControlActive && ~isAngleSaturated deltaARef = deltaARef(idxDeltaA, 2); end - dDeltaA = (deltaARef-deltaA)/parafoil.deltaATau; - if abs(dDeltaA) > parafoil.maxSpeed - dDeltaA = sign(deltaARef-deltaA)*parafoil.maxSpeed; % concettualmente sta roba è sbagliata perchè dipende dal passo di integrazione, fixare + dDeltaA = (deltaARef-deltaA)/parafoil.controlParams.deltaA_tau; + if abs(dDeltaA) > parafoil.controlParams.deltaA_maxSpeed + dDeltaA = sign(deltaARef-deltaA)*parafoil.controlParams.deltaA_maxSpeed; % concettualmente sta roba è sbagliata perchè dipende dal passo di integrazione, fixare end end @@ -219,7 +219,7 @@ dY(14) = dDeltaA; if nargout == 2 || ~isempty(wrapper) parout.state = []; - parout.interp = []; + parout.interp.mass = mass; parout.wind.body = windVels; parout.wind.NED = [uw; vw; ww]; @@ -234,6 +234,7 @@ if nargout == 2 || ~isempty(wrapper) parout.air = []; parout.accelerations.body = bodyAcc; + parout.accelerometer.body_acc = forceAero/mass; parout.coeff = []; parout.uncertanty = []; diff --git a/missions/2024_Lyra_Portugal_October/config/paraConfig.m b/missions/2024_Lyra_Portugal_October/config/paraConfig.m index 6c8e927..59d2a43 100644 --- a/missions/2024_Lyra_Portugal_October/config/paraConfig.m +++ b/missions/2024_Lyra_Portugal_October/config/paraConfig.m @@ -67,12 +67,6 @@ para(2, 2).openingTime = 0; % [s] Parafoil opening delay para(2, 2).surface = 0.11; % [m^2] Surface para(2, 2).deltaSMax = 0.1; % max value -uMax = 0; -uMin = 0; -identification = 0; -deltaATau = 0; -maxSpeed = 0; - para(2, 2).semiWingSpan = 2.55/2; % [m] settings.para(2, 2).b: semiwingspan - vela nuova: 2.55/2; - vela vecchia: 2.06/2; para(2, 2).MAC = 0.8; % [m] mean aero chord para(2, 2).surface = 2.04; % [m^2] parafoil surface - vela nuova 2.04; - vela vecchia: 1.64; diff --git a/missions/missionConfig.m b/missions/missionConfig.m index dc15caf..ab8c15d 100644 --- a/missions/missionConfig.m +++ b/missions/missionConfig.m @@ -4,5 +4,4 @@ % such as the current mission. The config "BIOS" mission = Mission(); -mission.name = '2023_Gemini_Roccaraso_September'; -% mission.name = '2024_Lyra_Portugal_October'; \ No newline at end of file +mission.name = '2024_Lyra_Portugal_October'; \ No newline at end of file -- GitLab