From 73cde9da92b38a634e16bef93ba8d823ff0f801f Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Thu, 23 May 2024 09:37:00 +0200 Subject: [PATCH] [refactoring-ode][classes] Added openingDelay to Para --- classes/components/Parachute.m | 3 +- classes/components/Parafoil.m | 1 + functions/miscellaneous/getOdeFcn.m | 35 ++++++++----------- .../config/paraConfig.m | 13 +++---- 4 files changed, 22 insertions(+), 30 deletions(-) diff --git a/classes/components/Parachute.m b/classes/components/Parachute.m index 27e5ccb..9144fd0 100644 --- a/classes/components/Parachute.m +++ b/classes/components/Parachute.m @@ -14,7 +14,7 @@ classdef Parachute < Para name = '' surface double % [m^2] Surface mass double % [kg] Parachute Mass - openingDelay double % [s] drogue opening delay + openingTime double % [s] Parachute opening time (delay + time to get fully open) finalAltitude double % [m] Final altitude of the parachute chordLength double % [m] Shock Chord Length chordK double % [N/m^2] Shock Chord Elastic Constant @@ -25,7 +25,6 @@ classdef Parachute < Para cl double % [/] Parachute Lift Coefficient m double % [m^2/s] Coefficient of the surface vs. time opening model nf double % [/] Adimensional Opening Time - deployDuration double % [s] Time to get the parachute to full aperture forceCoefficient double % [-] Empirical coefficient to obtain correct peak force at deployment end diff --git a/classes/components/Parafoil.m b/classes/components/Parafoil.m index 7ccbb5f..68ce77f 100644 --- a/classes/components/Parafoil.m +++ b/classes/components/Parafoil.m @@ -16,6 +16,7 @@ classdef Parafoil < Para deltaSMax double % [-] Aerodynamic control coefficient - symmetric, max value mass double % [kg] Parafoil Mass + openingTime double % [s] Parafoil opening time (delay + time to get fully open) inertia % [kg*m^2] 3x3 Inertia Matrix (the diagonal is made of the inertia vector values) finalAltitude double % [m] Final altitude of the parafoil diff --git a/functions/miscellaneous/getOdeFcn.m b/functions/miscellaneous/getOdeFcn.m index 3b23cd9..691bd98 100644 --- a/functions/miscellaneous/getOdeFcn.m +++ b/functions/miscellaneous/getOdeFcn.m @@ -21,29 +21,24 @@ end % OUTPUTS: % - allSteps, struct, which contains all the parameters needed. -if length(solution) == 1 - args = solution.extdata.varargin; - fun = solution.extdata.odefun; - wrapper = args{end}; - data = wrapper.getData(startIdx); +args = solution.extdata.varargin; +fun = solution.extdata.odefun; - %% Fixing points at t = 0, t = end +wrapper = args{end}; +data = wrapper.getData(startIdx); - [~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1}); - [~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1}); -else - extData = [solution.extdata]; - startFun = extData(1).odefun; - startArgs = extData(1).varargin; - endFun = extData(end).odefun; - endArgs = extData(end).varargin; +%% Fixing points at t = 0, t = end - wrapper = endArgs{end}; - data = wrapper.getData(startIdx); +[~, data(1)] = fun(solution.x(startIdx), solution.y(:,startIdx), args{1:end-1}); +[~, data(end)] = fun(solution.x(end), solution.y(:,end), args{1:end-1}); - [~, data(1)] = startFun(solution(1).x(startIdx), solution(1).y(:,startIdx), startArgs{1:end-1}); - [~, data(end)] = endFun(solution(end).x(end), solution(end).y(:,end), endArgs{1:end-1}); -end +%% Adding solution timesteps +out = wrapper.packageData(data); +out.state.time = solution.x; +out.state.Y = solution.y; +out.state.iEvent = []; -out = wrapper.packageData(data); \ No newline at end of file +if ~isempty(solution.ie) + out.state.iEvent = find(solution.x == solution.xe(1), 1, "first"); +end \ No newline at end of file diff --git a/missions/2024_Lyra_Portugal_October/config/paraConfig.m b/missions/2024_Lyra_Portugal_October/config/paraConfig.m index 0946cf8..59d2a43 100644 --- a/missions/2024_Lyra_Portugal_October/config/paraConfig.m +++ b/missions/2024_Lyra_Portugal_October/config/paraConfig.m @@ -7,7 +7,7 @@ para(1, 1).surface = 0.6; % [m^2] Surface para(1, 1).mass = 0.15; % [kg] Parachute Mass para(1, 1).cd = 0.75; % [/] Parachute Drag Coefficient para(1, 1).cl = 0; % [/] Parachute Lift Coefficient -para(1, 1).openingDelay = 1; % [s] drogue opening delay +para(1, 1).openingTime = 1.1; % [s] drogue opening delay para(1, 1).finalAltitude = 350; % [m] Final altitude of the parachute para(1, 1).cx = 1.4; % [/] Parachute Longitudinal Drag Coefficient para(1, 1).chordLength = 1.5; % [m] Shock Chord Length @@ -17,7 +17,6 @@ para(1, 1).m = 1; % [m^2/s] Coefficient of the surface para(1, 1).nf = 12; % [/] Adimensional Opening Time para(1, 1).expulsionSpeed = 5; % [m/s] Expulsion Speed para(1, 1).forceCoefficient = 1.8; % [-] Empirical coefficient to obtain correct peak force at deployment -para(1, 1).deployDuration = 0.1; % [s] Time to get the parachute to full aperture % parachute 2 para(2, 1) = Parachute(); @@ -27,7 +26,7 @@ para(2, 1).surface = 14; % [m^2] Surface para(2, 1).mass = 1.05; % [kg] Parachute Mass para(2, 1).cd = 0.6; % [/] Parachute Drag Coefficient para(2, 1).cl = 0; % [/] Parachute Lift Coefficient -para(2, 1).openingDelay = 0; % [s] drogue opening delay +para(2, 1).openingTime = 0.9; % [s] drogue opening delay para(2, 1).finalAltitude = 0; % [m] Final altitude of the parachute para(2, 1).cx = 1.15; % [/] Parachute Longitudinal Drag Coefficient para(2, 1).chordLength = 6; % [m] Shock Chord Length @@ -37,7 +36,6 @@ para(2, 1).m = 1; % [m^2/s] Coefficient of the surface v para(2, 1).nf = 8.7; % [/] Adimensional Opening Time para(2 ,1).expulsionSpeed = 0; % [m/s] Expulsion Speed para(2, 1).forceCoefficient = 2.2; % [-] Empirical coefficient to obtain correct peak force at deployment -para(2, 1).deployDuration= 0.9; % [s] Time to get the parachute to full aperture %% PAYLOAD CHUTES % parachute 1 @@ -48,7 +46,7 @@ para(1, 2).surface = 0.11; % [m^2] Surface para(1, 2).mass = 0.15; % [kg] Parachute Mass para(1, 2).cd = 1.2; % [/] Parachute Drag Coefficient para(1, 2).cl = 0; % [/] Parachute Lift Coefficient -para(1, 2).openingDelay = 1; % [s] drogue opening delay +para(1, 2).openingTime = 1; % [s] drogue opening delay para(1, 2).finalAltitude = 450; % [m] Final altitude of the parachute para(1, 2).cx = 1.4; % [/] Parachute Longitudinal Drag Coefficient para(1, 2).chordLength = 1.5; % [m] Shock Chord Length @@ -58,19 +56,18 @@ para(1, 2).m = 1; % [m^2/s] Coefficient of the surface v para(1, 2).nf = 12; % [/] Adimensional Opening Time para(1, 2).expulsionSpeed = 10; % [m/s] Expulsion Speed para(1, 2).forceCoefficient = 0; % [-] Empirical coefficient to obtain correct peak force at deployment -para(1, 2).deployDuration = 0; % [s] Time to get the parachute to full aperture - % parachute 2 para(2, 2) = Parafoil(); para(2, 2).name = "Payload AIRFOIL"; para(2, 2).mass = 0.50; % [kg] Parafoil Mass +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 -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).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; para(2, 2).inertia = [0.42, 0, 0.03; -- GitLab