diff --git a/classes/components/Parafoil.m b/classes/components/Parafoil.m index d02cc7bd2089750af7c23c2995b3b427843378de..6a60eb018c5948f77be088bb00f59e76cb6aa4f0 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 104a272fbdcc2b5f064d95d67997e2c4d9c869c4..17b484b48e25d2dab6537b7731bf9ed66517b034 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 6c8e9277f399c7d1e2dc20c9446d8db419ada0ae..59d2a43b28624c5a62eac263192333b6d293b450 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 dc15cafae268650811a70261c4b119eef9bbb3d2..ab8c15d18a0351d2132a912230dd1bccb8b00873 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