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