From d65c6d95a40edd94ad432a66085e5c6ee8e6c4b5 Mon Sep 17 00:00:00 2001 From: Mauco03 <marco.gaibotti@skywarder.eu> Date: Fri, 23 Feb 2024 21:04:30 +0100 Subject: [PATCH] [code-refactoring][missions] modified configs --- missions/README.md => README.md | 0 {missions => _old}/Motors.mat | 0 .../config/OLDaerodynamicsConfig.m | 32 ++ .../config/aerodynamicsConfig.m | 39 -- .../config/engineConfig.m | 8 - .../config/environmentConfig.m | 13 +- .../config/geometryConfig.asv | 50 +++ .../config/geometryConfig.m | 20 +- .../config/motorConfig.m | 8 + .../config/settingsConfig.m | 5 +- .../config/stochasticConfig.m | 4 +- .../config/windConfig.m | 2 +- .../data/aeroCoefficients.mat | 3 + .../data/aeroCoefficientsHighAOA.mat | 3 + .../data/{HREmotors.mat => motors.mat} | 0 .../simulationsData.m | 335 ------------------ missions/HREmotors.mat | 3 - 17 files changed, 123 insertions(+), 402 deletions(-) rename missions/README.md => README.md (100%) rename {missions => _old}/Motors.mat (100%) create mode 100644 missions/2024_Lyra_Roccaraso_September/config/OLDaerodynamicsConfig.m delete mode 100644 missions/2024_Lyra_Roccaraso_September/config/aerodynamicsConfig.m delete mode 100644 missions/2024_Lyra_Roccaraso_September/config/engineConfig.m create mode 100644 missions/2024_Lyra_Roccaraso_September/config/geometryConfig.asv create mode 100644 missions/2024_Lyra_Roccaraso_September/config/motorConfig.m create mode 100644 missions/2024_Lyra_Roccaraso_September/data/aeroCoefficients.mat create mode 100644 missions/2024_Lyra_Roccaraso_September/data/aeroCoefficientsHighAOA.mat rename missions/2024_Lyra_Roccaraso_September/data/{HREmotors.mat => motors.mat} (100%) delete mode 100644 missions/2024_Lyra_Roccaraso_September/simulationsData.m delete mode 100644 missions/HREmotors.mat diff --git a/missions/README.md b/README.md similarity index 100% rename from missions/README.md rename to README.md diff --git a/missions/Motors.mat b/_old/Motors.mat similarity index 100% rename from missions/Motors.mat rename to _old/Motors.mat diff --git a/missions/2024_Lyra_Roccaraso_September/config/OLDaerodynamicsConfig.m b/missions/2024_Lyra_Roccaraso_September/config/OLDaerodynamicsConfig.m new file mode 100644 index 0000000..dc20a75 --- /dev/null +++ b/missions/2024_Lyra_Roccaraso_September/config/OLDaerodynamicsConfig.m @@ -0,0 +1,32 @@ +% CONFIG - This script sets up control parameters + +%% STATES +% State values in which the aerodynamic coefficients will be computed +aerodynamics.mach = 0.05:0.05:1; +aerodynamics.alpha = [-22 -15 -10 -7.5 -5 -2.5 -1 -0.5 -0.1 0 0.1 0.5 1 2.5 5 7.5 10 15 22]; +aerodynamics.beta = [-8 -5 -2.5 -0.1 0 0.1 2.5 5 8]; +aerodynamics.altitude = settings.z0 + (0:400:4000); + +%% HIGH AOA +aerodynamics.highAOA.mach = 0.05:0.05:0.7; +aerodynamics.highAOA.alpha = [-170 -130 -115 -90 -60 -35 -10 -5 -1 0 1 5 10 35 60 90 115 130 170]; +aerodynamics.highAOA.beta = [-170 -130 -115 -90 -60 -35 -10 -5 -1 0 1 5 10 35 60 90 115 130 170]; +aerodynamics.highAOA.alt = settings.z0 + (0:400:4000); + +%% AERODYNAMICS DETAILS +% These coefficients are obtained using MISSILE DATCOM, check simulator/README.md for further details. + +settings = loadConfig("settingsConfig.m"); + +if not(isfield(settings.flags,'autoMatProt_flag')) || settings.flags.autoMatProt + % genera matrici +end + +coefficients = load("aeroCoefficients.mat"); +coefficientsHighAOA = load("aeroCoefficientsHighAOA.mat"); + +aerodynamics.coefficients = coefficients.aeroCoefficients; +aerodynamics.highAOA.coefficients = coefficientsHighAOA.aeroCoefficients; + +% aerodynamics.highAOA.tb = aerodynamics.tb; +% aerodynamics.highAOA.timeEngineCut = aerodynamics.timeEngineCut; \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/aerodynamicsConfig.m b/missions/2024_Lyra_Roccaraso_September/config/aerodynamicsConfig.m deleted file mode 100644 index 853f316..0000000 --- a/missions/2024_Lyra_Roccaraso_September/config/aerodynamicsConfig.m +++ /dev/null @@ -1,39 +0,0 @@ -% CONFIG - This script sets up control parameters - -%% AERODYNAMICS DETAILS -% These coefficients are obtained using MISSILE DATCOM, check simulator/README.md for further details. - -features = loadConfig("settingsConfig.m"); - -if not(isfield(aerodynamics,'autoMatProt_flag')) || features.flags.autoMatProt - - % Coefficients - Coeffs = load(filename_coeffs); - aerodynamics.Coeffs = Coeffs.CoeffsTot; - - % Geometry - aerodynamics.Geometry = Coeffs.Geometry; - aerodynamics.Geometry.xcg = Coeffs.Geometry.xcg'; - - % State - aerodynamics.State.Alphas = Coeffs.State.Alphas'; - aerodynamics.State.Betas = Coeffs.State.Betas'; - aerodynamics.State.Altitudes = Coeffs.State.Altitudes'; - aerodynamics.State.Machs = Coeffs.State.Machs'; - aerodynamics.State.Controls = Coeffs.State.hprot'; - aerodynamics.State.xcgTime = Coeffs.State.xcgTime'; - clear('Coeffs'); - - CoeffHighAOA = load('HighAOA.mat'); - aerodynamics.highAOA.Coeffs = CoeffHighAOA.CoeffsTot; - aerodynamics.highAOA.State.Alphas = CoeffHighAOA.State.Alphas'; - aerodynamics.highAOA.State.Betas = CoeffHighAOA.State.Betas'; - aerodynamics.highAOA.State.Altitudes = CoeffHighAOA.State.Altitudes'; - aerodynamics.highAOA.State.Machs = CoeffHighAOA.State.Machs'; - aerodynamics.highAOA.State.Controls = CoeffHighAOA.State.hprot'; - aerodynamics.highAOA.State.xcgTime = CoeffHighAOA.State.xcgTime'; - clear('CoeffHighAOA'); - - aerodynamics.highAOA.tb = aerodynamics.tb; - aerodynamics.highAOA.timeEngineCut = aerodynamics.timeEngineCut; -end \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/engineConfig.m b/missions/2024_Lyra_Roccaraso_September/config/engineConfig.m deleted file mode 100644 index 158e439..0000000 --- a/missions/2024_Lyra_Roccaraso_September/config/engineConfig.m +++ /dev/null @@ -1,8 +0,0 @@ -% CONFIG - This script sets up parameters for the engine - -engine.name = 'HRE_FURIA-Rv2-T04T03'; -engine.burnTime = inf; % [s] Burn duration -engine.ignitionTime = 000; %0.4; % [s] Ignition transient -engine.cutOffTime = 000; %0.3; % [s] Cut-off transient - -filename_coeffs = strcat(engine.name, '.mat'); \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/environmentConfig.m b/missions/2024_Lyra_Roccaraso_September/config/environmentConfig.m index 96c77af..1f90f25 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/environmentConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/environmentConfig.m @@ -5,7 +5,12 @@ environment.lat0 = 41.8084579; % [deg] Launchpad latitude environment.lon0 = 14.0546408; % [deg] Launchpad longitude environment.z0 = 1414; % [m] Launchpad Altitude -environment.lpin1 = 000; % [m] Distance from the upper pin to the upper tank cap -environment.lpin2 = 000; % [m] Distance from the lower pin to the lower tank cap -environment.lrampa = 000; % [m] Total launchpad length -environment.g0 = gravitywgs84(environment.z0, environment.lat0); % Gravity costant at launch latitude and altitude \ No newline at end of file +environment.g0 = gravitywgs84(environment.z0, environment.lat0); % Gravity costant at launch latitude and altitude +environment.pin1Length = 000; % [m] Distance from the upper pin to the upper tank cap +environment.pin2Length = 000; % [m] Distance from the lower pin to the lower tank cap +environment.rampLength = 000; % [m] Total launchpad length + +% environment.altitude ? +environment.temperature = NaN; +environment.pressure = NaN; +environment.rho = NaN; \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.asv b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.asv new file mode 100644 index 0000000..5e23dc1 --- /dev/null +++ b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.asv @@ -0,0 +1,50 @@ +% CONFIG - This script contains information about the geometry of the +% rocket + +%%% Boat-tail +% The boat-tail is simulated as a trunc of cone with the major diameter +% equal to the rocket one (settings.C) +geometry.boat.length = 000; % [m] Boat-tail length +geometry.boat.diameter = 000; % [m] Boat-tail base diameter + +%%% Center-body +geometry.center.length = 000; %1.517; % [m] Central body length +geometry.center.caliber = 000; % [m] Caliber (Fuselage Diameter) +geometry.center.crossSection = pi*geometry.center.caliber^2/4; % [m^2] Cross-sectional Surface + +%%% Nose +geometry.nose.length = 000; % [m] Nosecone Length +geometry.nose.ogiveType = 'MHAACK'; % [-] Nosecone shape +geometry.nose.power = 000; %3/4; % [-] Nosecone power type parameter +geometry.nose.p = 000; %1.250152e+00; % [-] P coefficient for modified nosecone shapes +geometry.nose.c = 000; %1.799127e-01; % [-] C coefficient for modified nosecone shapes + +%%% Pitot tube +geometry.pitot.initialConeLength = 0; % [m] Pitot initial conic section length +geometry.pitot.finalConeLength = 0; % [m] Pitot final conic section length +geometry.pitot.initialConeDiameter = 0; % [m] Pitot initial conic section diameter +geometry.pitot.finalConeDiameter = 0; % [m] Pitot final conic section diameter +geometry.pitot.length = 0; % [m] Pitot tube length +geometry.pitot.diameter = 0; % [m] Pitot tube diameter + +%%% Finset +geometry.fins.attachedChordLength = 0.30; % [m] attached chord length +geometry.fins.freeChordLenght = 0.14; % [m] free chord length +geometry.fins.height = 0.11; % [m] fin heigth +geometry.fins.deltaXLE = 0.13; % [m] start of Chord 2 measured from start of Chord 1 +geometry.fins.nPanel = 3; % [m] number of fins +geometry.fins.leadingEdgeRadius = [0 0]; % [deg] Leading edge radius at each span station +geometry.fins.axialDistance = 0.012; % [m] distance between end of root chord and end of center body +geometry.fins.zupRaw = 0.00175; % [m] fin semi-thickness +geometry.fins.LmaxuRaw = 0.00175; % [m] Fraction of chord from leading edge to max thickness + +%%% Protub data +geometry.protuberances.xDistance = 1.517; % [m] axial position from nosecone base +geometry.protuberances.n = 3; % [-] number of brakes +geometry.protuberances.length = 0.008; % [m] brakes thickness +geometry.protuberances.width = 0.1002754821; % [m] brakes width (normal) + +%%% +% geometry.mNoMot = 000; %16.423; % [kg] Mass of everything above engine +% geometry.xcgNoMot = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) + diff --git a/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m index c1be047..bfc832e 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/geometryConfig.m @@ -1,27 +1,24 @@ % CONFIG - This script contains information about the geometry of the % rocket - -%% Boat-tail +%%% Boat-tail % The boat-tail is simulated as a trunc of cone with the major diameter % equal to the rocket one (settings.C) geometry.boat.length = 000; % [m] Boat-tail length geometry.boat.diameter = 000; % [m] Boat-tail base diameter -%% Rocket ogive and central body +%%% Center-body geometry.center.length = 000; %1.517; % [m] Central body length geometry.center.caliber = 000; % [m] Caliber (Fuselage Diameter) geometry.center.crossSection = pi*geometry.center.caliber^2/4; % [m^2] Cross-sectional Surface +%%% Nose geometry.nose.length = 000; % [m] Nosecone Length geometry.nose.ogiveType = 'MHAACK'; % [-] Nosecone shape geometry.nose.power = 000; %3/4; % [-] Nosecone power type parameter geometry.nose.p = 000; %1.250152e+00; % [-] P coefficient for modified nosecone shapes geometry.nose.c = 000; %1.799127e-01; % [-] C coefficient for modified nosecone shapes -% geometry.mNoMot = 000; %16.423; % [kg] Mass of everything above engine -% geometry.xcgNoMot = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) -%% Aerodynamics %%% Pitot tube geometry.pitot.initialConeLength = 0; % [m] Pitot initial conic section length geometry.pitot.finalConeLength = 0; % [m] Pitot final conic section length @@ -31,8 +28,8 @@ geometry.pitot.length = 0; % [m] Pitot tub geometry.pitot.diameter = 0; % [m] Pitot tube diameter %%% Finset -geometry.fins.attachedChordLength = 0.30; % [m] attached chord length -geometry.fins.freeChordLenght = 0.14; % [m] free chord length +geometry.fins.rootChord = 0.30; % [m] attached chord length +geometry.fins.freeChord = 0.14; % [m] free chord length geometry.fins.height = 0.11; % [m] fin heigth geometry.fins.deltaXLE = 0.13; % [m] start of Chord 2 measured from start of Chord 1 geometry.fins.nPanel = 3; % [m] number of fins @@ -46,3 +43,10 @@ geometry.protuberances.xDistance = 1.517; geometry.protuberances.n = 3; % [-] number of brakes geometry.protuberances.length = 0.008; % [m] brakes thickness geometry.protuberances.width = 0.1002754821; % [m] brakes width (normal) + +%%% xCG + +geometry.nXCG = 5; +geometry.xCG = NaN; % [m] XCG entire rocket (from nosecone base - leave NaN to auto-compute xCG) +geometry.xCGNoMotor = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) + diff --git a/missions/2024_Lyra_Roccaraso_September/config/motorConfig.m b/missions/2024_Lyra_Roccaraso_September/config/motorConfig.m new file mode 100644 index 0000000..4e2dbe7 --- /dev/null +++ b/missions/2024_Lyra_Roccaraso_September/config/motorConfig.m @@ -0,0 +1,8 @@ +% CONFIG - This script sets up parameters for the engine + +motor.name = 'HRE_FURIA-Rv2-T04T03'; +motor.burnTime = inf; % [s] Burn duration +% motor.ignitionTime = 0.4; % [s] Ignition transient +% motor.cutOffTime = 0.3; % [s] Cut-off transient + +filename_coeffs = strcat(motor.name, '.mat'); \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/settingsConfig.m b/missions/2024_Lyra_Roccaraso_September/config/settingsConfig.m index a6970da..9adeba5 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/settingsConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/settingsConfig.m @@ -4,6 +4,7 @@ % mission (e.g. whether a specific algorithm is used, the engine type, % flags...) -settings.engineType = 'hybrid'; % [-] choices are: solid, hybrid +settings.motorType = 'hybrid'; % [-] choices are: solid, hybrid -settings.flags.autoMatProt = false; \ No newline at end of file +settings.flags.autoMatProt = false; +settings.flags.highAoA = true; \ No newline at end of file diff --git a/missions/2024_Lyra_Roccaraso_September/config/stochasticConfig.m b/missions/2024_Lyra_Roccaraso_September/config/stochasticConfig.m index 5c107b6..448a134 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/stochasticConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/stochasticConfig.m @@ -3,8 +3,9 @@ % Use this file to specify numbers of simulations, parameter variations... stochastic.n = 10; % Number of cases -stochastic.parThreads = false; % choose true if you are running low on ram on your pc, note: it will use twice the workers and be more intensive on your cpu +stochastic.parallelThreads = false; % choose true if you are running low on ram on your pc, note: it will use twice the workers and be more intensive on your cpu stochastic.confidence = [0.65 0.90]; + stochastic.plots = true; stochastic.geoPlots = false; stochastic.internalStressPlots = false; @@ -17,7 +18,6 @@ stochastic.formatPlotsASD = false; % 4-both ballistic and parachute descent % 5-stability stochastic.simType = 4; - stochastic.parameters = addParameter(); % Parameters to add: type help addParameters for more info % stochastic.parameters = addParameter('CA', 4, 1, -0.2, 0, ... diff --git a/missions/2024_Lyra_Roccaraso_September/config/windConfig.m b/missions/2024_Lyra_Roccaraso_September/config/windConfig.m index 42c88a0..de6c16f 100644 --- a/missions/2024_Lyra_Roccaraso_September/config/windConfig.m +++ b/missions/2024_Lyra_Roccaraso_September/config/windConfig.m @@ -1,7 +1,7 @@ % CONFIG - This script sets up wind direction and magnitude based on % altitudes % -% Wind azimuth angle indications (wind directed towards): +% Wind azimuth angle indications (wind directed towards): !!! SABGLAITO % 0 deg (use 360 instead of 0) -> North % 90 deg -> East % 180 deg -> South diff --git a/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficients.mat b/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficients.mat new file mode 100644 index 0000000..186ee1c --- /dev/null +++ b/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficients.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc3a05269cb230d41b1a4b6d46d5cb9f72a463e652a381e1fc72561dc2162f68 +size 24160751 diff --git a/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficientsHighAOA.mat b/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficientsHighAOA.mat new file mode 100644 index 0000000..471ff64 --- /dev/null +++ b/missions/2024_Lyra_Roccaraso_September/data/aeroCoefficientsHighAOA.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce1c4ce8e2c9a3d01ccf32a2188ac05baa99359840212d11ef24542fe22daf3e +size 2036339 diff --git a/missions/2024_Lyra_Roccaraso_September/data/HREmotors.mat b/missions/2024_Lyra_Roccaraso_September/data/motors.mat similarity index 100% rename from missions/2024_Lyra_Roccaraso_September/data/HREmotors.mat rename to missions/2024_Lyra_Roccaraso_September/data/motors.mat diff --git a/missions/2024_Lyra_Roccaraso_September/simulationsData.m b/missions/2024_Lyra_Roccaraso_September/simulationsData.m deleted file mode 100644 index f3ee141..0000000 --- a/missions/2024_Lyra_Roccaraso_September/simulationsData.m +++ /dev/null @@ -1,335 +0,0 @@ -%{ - -ROCKET DATA FILE - -Project name: Crater -Year of launch: 2024 -Location of Launch: Roccasarso (ITA) -Date of launch: TBD - -Last update: 01/10/2024 - -Copyright © 2021, Skyward Experimental Rocketry, AFD department -All rights reserved - -SPDX-License-Identifier: GPL-3.0-or-later - -%} - -% launchpad - Roccaraso -settings.z0 = 1414; % [m] Launchpad Altitude -settings.lpin1 = 000; % [m] Distance from the upper pin to the upper tank cap -settings.lpin2 = 000; % [m] Distance from the lower pin to the lower tank cap -settings.lrampa = 000; % [m] Total launchpad length -settings.lat0 = 41.8084579; % Launchpad latitude -settings.lon0 = 14.0546408; % Launchpad longitude -settings.g0 = gravitywgs84(settings.z0, settings.lat0); % Gravity costant at launch latitude and altitude - -settings.Local = []; %% ENGINE DETAILS - -%% load motors data -settings.HREmot = true; % non runna con false perche mancano le inerzie totali nel simulationsData - -filename = '../HREmotors.mat'; -load(filename); - -% engineName = 'HRE_FURIA-Rv2-T04T03'; -engineName = 'TBD'; - -iMotor = strcmp({HREmotors.MotorName}, engineName); -settings.motor.expTime = HREmotors(iMotor).t; % [s] Engine time vector -settings.motor.expThrust = HREmotors(iMotor).T; % [N] Engine thrust vector -settings.motor.expM = HREmotors(iMotor).m; % [Kg] Propellant Mass (in time) -settings.motor.L = HREmotors(iMotor).L; % [m] Engine length -settings.motor.Ltank = HREmotors(iMotor).Ltank; % [m] Tank length -settings.motor.xcg = HREmotors(iMotor).xcg; % [m] Engine xcg from tank tip -settings.motor.mc = HREmotors(iMotor).mc; % [kg] Engine Structural Mass -settings.motor.Pe = HREmotors(iMotor).Pe; % [Pa] Eflux pressure -settings.motor.Ae = HREmotors(iMotor).Ae; % [Pa] Eflux Area -settings.motor.mFuel = HREmotors(iMotor).mFu; % [kg] Fuel (grain) initial mass -settings.motor.mOx = HREmotors(iMotor).mOx; % [kg] Oxidizer initial mass -settings.mp = HREmotors(iMotor).mp; % [kg] Initial propellant Mass -settings.tb = HREmotors(iMotor).t(end) ; % [s] Burning time - -% Engine fuselage data -settings.motor.mFuselage = HREmotors(iMotor).mFus; % [kg] Fuselage of the engine only -settings.motor.xcgFuselage = (settings.motor.L - ... -settings.motor.Ltank)/2 + settings.motor.Ltank; % [m] xcg of the engine fuselage only from tank tip - -% Engine cut -settings.timeEngineCut = inf; % [s] Moment in time in wich the engine will be cut off -settings.tIGN = 000; %0.4; % [s] ignition transient -settings.tCO = 000; %0.3; % [s] cut-off transient - -%% Launchpad synthesis - -%settings.lpin = settings.lpin1 + settings.motor.Ltank ... -% + settings.lpin2; % [m] Distance between the two launchpad pins - -settings.lpin = 000;%1.926 + 0.2; % [m] distance of the upper pin from the rail base (upper pin-boat + boat-rail base) -settings.lrampa = settings.lrampa - settings.lpin; % [m] LaunchPad route (total available route) - -%% ROCKET DETAILS -%%% Boat-tail -% The boat-tail is simulated as a trunc of cone with the major diameter -% equal to the rocket one (settings.C) -settings.boatL = 000; % [m] Boat-tail length -settings.boatD = 000; % [m] Boat-tail base diameter - -%%% Rocket ogive and central body -settings.C = 000; % [m] Caliber (Fuselage Diameter) -settings.S = pi*settings.C^2/4; % [m^2] Cross-sectional Surface -settings.Lnose = 000; % [m] Nosecone Length -settings.OgType = 'MHAACK'; % [-] Nosecone shape -settings.NosePower = 000; %3/4; % [-] Nosecone power type parameter -settings.pMod = 000; %1.250152e+00; % [-] P coefficient for modified nosecone shapes -settings.cMod = 000; %1.799127e-01; % [-] C coefficient for modified nosecone shapes - -settings.LcenterRocket = 000; %1.517; % [m] Central body length -settings.mNoMot = 000; %16.423; % [kg] Mass of everything above engine -settings.xcgNoMot = 000; %1.149; % [m] XCG of everything above engine (from nosecone base) - -%SYNTHESIS WITH ENGINE FUSELAGE MASS AND XCG SEPARATELY GIVEN -settings.addMfusMot = false; - -if settings.addMfusMot - settings.xcgNoMot = (settings.mNoMot*settings.xcgNoMot + settings.motor.mFuselage*(settings.motor.xcgFuselage + settings.LcenterRocket))... - /(settings.mNoMot + settings.motor.mFuselage); - settings.mNoMot = settings.mNoMot + settings.motor.mFuselage; -end - -%% SYNTHESIS -settings.Lcenter = settings.LcenterRocket + settings.motor.L; % [m] Total centerbody length -settings.mnc = 0; % [kg] Nosecone Mass -settings.ms = settings.mNoMot + settings.motor.mc + ... -settings.mnc; % [kg] Total structural Mass -settings.m0 = settings.ms + settings.motor.expM(1); % [kg] Total initial Mass -settings.mTotalTime = settings.mNoMot + settings.motor.mc + ... -settings.mnc + settings.motor.expM; % Total mass (in time) - -% Total XCG of the rocket [m] !! FROM NOSECONE BASE !! -settings.xcg = ( (settings.motor.expM + settings.motor.mc).*(settings.LcenterRocket + settings.motor.xcg) + ... - settings.mNoMot*settings.xcgNoMot)./(settings.motor.expM + settings.motor.mc + settings.mNoMot); - -settings.Lcenter = settings.Lcenter - settings.boatL; % correcting the rocket length in order to account the boat tail - -%% AERODYNAMICS -%%% Pitot tube -settings.PITOTCLI = 0; % [m] Pitot initial conic section length -settings.PITOTCLB = 0; % [m] Pitot final conic section length -settings.PITOTCDI = 0; % [m] Pitot initial conic section diameter -settings.PITOTCDB = 0; % [m] Pitot final conic section diameter -settings.PITOTL = 0; % [m] Pitot tube length -settings.PITOTD = 0; % [m] Pitot tube diameter - -%%% finset -settings.Chord1 = 0.30; % [m] attached chord length -settings.Chord2 = 0.14; % [m] free chord length -settings.Height = 0.11; % [m] fin heigth -settings.deltaXLE = 0.13; % [m] start of Chord 2 measured from start of Chord 1 -settings.Npanel = 3; % [m] number of fins -settings.Ler = [0 0]; % [deg] Leading edge radius at each span station -settings.d = 0.012; % [m] distance between end of root chord and end of center body -settings.zupRaw = 0.00175; % [m] fin semi-thickness -settings.LmaxuRaw = 0.00175; % [m] Fraction of chord from leading edge to max thickness - -%%% protub data -settings.xprot = 1.517; % [m] axial position from nosecone base -settings.nloc = 3; % [-] number of brakes -settings.lprot = 0.008; % [m] brakes thickness -settings.wprot = 0.1002754821; % [m] brakes width (normal) - -%% AIRBRAKES CONTROL SETTINGS -settings.tControl = settings.tb; % [s] time after which the airbrakes can be used -settings.MachControl = 0.8; % [-] Maximum Mach at which airbrakes can be used -settings.vServo = 150*pi/180; % [rad/s] Servo-motor angular velocity -% First entry, must be always 0 ! -settings.hprot = linspace(0, 0.0363, 3); % [m] Block airbrakes opening coordinate - -%% MASS GEOMERTY DETAILS -% x-axis: along the fuselage -% y-axis: right wing -% z-axis: downward - -%%% Inertias for fuselage only (no engine) -settings.rocketIxx = 0.06535397; % [kg*m^2] Inertia to x-axis -settings.rocketIyy = 12.07664659; % [kg*m^2] Inertia to y-axis -settings.rocketIzz = 12.07701314; % [kg*m^2] Inertia to z-axis - -%%% Inertias for engine only -engineIxx = HREmotors(iMotor).Ixx; % [kg*m^2] Inertia to x-axis -engineIyy = HREmotors(iMotor).Iyy; % [kg*m^2] Inertia to y-axis -engineIzz = HREmotors(iMotor).Izz; % [kg*m^2] Inertia to z-axis - -%%% Total inertias -settings.Ixx = settings.rocketIxx + engineIxx; - -settings.Iyy = settings.rocketIyy + ((settings.xcgNoMot - settings.xcg).^2) .* settings.mNoMot + ... - (engineIyy + ((settings.motor.xcg + settings.LcenterRocket - settings.xcg).^2 ) .* (settings.motor.expM + settings.motor.mc)); - -settings.Izz = settings.rocketIzz + ((settings.xcgNoMot - settings.xcg).^2) .* settings.mNoMot + ... - (engineIzz + ((settings.motor.xcg + settings.LcenterRocket - settings.xcg).^2) .* (settings.motor.expM + settings.motor.mc)); - -settings.I = [settings.Ixx; settings.Iyy; settings.Izz]; - -%%% Inertias derivatives (avoiding calculations in ascent.m) -settings.Idot = diff(settings.I')'./diff(settings.motor.expTime); -settings.Idot(:, end+1) = settings.Idot(:, end); - -%% APPLY CORRECTIONS - -if exist("correction.mat","file") - corr = load("correction.mat"); - settings.mTotalTime = settings.mTotalTime + corr.deltaM; - settings.xcg = settings.xcg + reshapeVector(settings.motor.expTime, corr.time, corr.deltaXcg); - settings.ms = settings.ms + corr.deltaM; -end - -%% AERODYNAMICS DETAILS -% These coefficients are obtained using MISSILE DATCOM, check simulator/README.md for further details. - -% DATA_PATH = '../data/'; - -filename_coeffs = strcat(engineName, '.mat'); - -if not(isfield(settings,'autoMatProt_flag')) || settings.autoMatProt_flag == false - % Coefficients - Coeffs = load(filename_coeffs); - settings.Coeffs = Coeffs.CoeffsTot; - - % Geometry - settings.Geometry = Coeffs.Geometry; - settings.Geometry.xcg = Coeffs.Geometry.xcg'; - - % State - settings.State.Alphas = Coeffs.State.Alphas'; - settings.State.Betas = Coeffs.State.Betas'; - settings.State.Altitudes = Coeffs.State.Altitudes'; - settings.State.Machs = Coeffs.State.Machs'; - settings.State.Controls = Coeffs.State.hprot'; - settings.State.xcgTime = Coeffs.State.xcgTime'; - clear('Coeffs'); - - CoeffHighAOA = load('HighAOA.mat'); - settings.highAOA.Coeffs = CoeffHighAOA.CoeffsTot; - settings.highAOA.State.Alphas = CoeffHighAOA.State.Alphas'; - settings.highAOA.State.Betas = CoeffHighAOA.State.Betas'; - settings.highAOA.State.Altitudes = CoeffHighAOA.State.Altitudes'; - settings.highAOA.State.Machs = CoeffHighAOA.State.Machs'; - settings.highAOA.State.Controls = CoeffHighAOA.State.hprot'; - settings.highAOA.State.xcgTime = CoeffHighAOA.State.xcgTime'; - clear('CoeffHighAOA'); - - settings.highAOA.tb = settings.tb; - settings.highAOA.timeEngineCut = settings.timeEngineCut; -end - -%% DESCENT STAGES -settings.NdescentStages = 2; % [-] Number of descent stages -% Followimg are for stage 2, 3, .. -settings.msStages = 4.412; % [kg] Mass of stage 2, 3, .. without chutes - -%% PARACHUTES DETAILS - -settings.Npara = [2 1]; - -% parachute 1 -settings.para(1, 1).name = 'DROGUE chute'; -settings.para(1, 1).S = 1.2219; % [m^2] Surface -settings.para(1, 1).mass = 0.15; % [kg] Parachute Mass -settings.para(1, 1).CD = 0.96; % [/] Parachute Drag Coefficient -settings.para(1, 1).CL = 0; % [/] Parachute Lift Coefficient -settings.para(1, 1).delay = 1; % [s] drogue opening delay -settings.para(1, 1).z_cut = 350; % [m] Final altitude of the parachute - -% parachute 2 -settings.para(2, 1).name = 'MAIN chute'; -settings.para(2, 1).S = 7.34; % [m^2] Surface -settings.para(2, 1).mass = 1.05; % [kg] Parachute Mass -settings.para(2, 1).CD = 1.75; % [/] Parachute Drag Coefficient -settings.para(2, 1).CL = 0; % [/] Parachute Lift Coefficient -settings.para(2, 1).z_cut = 0; % [m] Final altitude of the parachute - -% parachute 1 -settings.para(1, 1).CX = 1.4; % [/] Parachute Longitudinal Drag Coefficient -settings.para(1, 1).L = 1.5; % [m] Shock Chord Length -settings.para(1, 1).K = 7200; % [N/m^2] Shock Chord Elastic Constant -settings.para(1, 1).C = 0; % [Ns/m] Shock Chord Dynamic Coefficient -settings.para(1, 1).m = 1; % [m^2/s] Coefficient of the surface vs. time opening model -settings.para(1, 1).nf = 12; % [/] Adimensional Opening Time -settings.para(1, 1).Vexit = 5; % [m/s] Expulsion Speed - -% parachute 2 -settings.para(2, 1).CX = 1.2; % [/] Parachute Longitudinal Drag Coefficient -settings.para(2, 1).L = 6; % [m] Shock Chord Length -settings.para(2, 1).K = 3000; % [N/m^2] Shock Chord Elastic Constant -settings.para(2, 1).C = 0; % [Ns/m] Shock Chord Dynamic Coefficient -settings.para(2, 1).m = 1; % [m^2/s] Coefficient of the surface vs. time opening model -settings.para(2, 1).nf = 8.7; % [/] Adimensional Opening Time - -%%% PAYLOAD CHUTES -% parachute 1 -settings.para(1, 2).name = "Payload DROGUE"; -settings.para(1, 2).S = 0.11; % [m^2] Surface -settings.para(1, 2).mass = 0.15; % [kg] Parachute Mass -settings.para(1, 2).CD = 1.2; % [/] Parachute Drag Coefficient -settings.para(1, 2).CL = 0; % [/] Parachute Lift Coefficient -settings.para(1, 2).delay = 1; % [s] drogue opening delay -settings.para(1, 2).z_cut = 300; % [m] Final altitude of the parachute -settings.para(1, 2).CX = 1.4; % [/] Parachute Longitudinal Drag Coefficient -settings.para(1, 2).L = 1.5; % [m] Shock Chord Length -settings.para(1, 2).K = 7200; % [N/m^2] Shock Chord Elastic Constant -settings.para(1, 2).C = 0; % [Ns/m] Shock Chord Dynamic Coefficient -settings.para(1, 2).m = 1; % [m^2/s] Coefficient of the surface vs. time opening model -settings.para(1, 2).nf = 12; % [/] Adimensional Opening Time -settings.para(1, 2).Vexit = 10; % [m/s] Expulsion Speed - -% parachute 2 -settings.para(2, 2).name = "Payload AIRFOIL"; -settings.para(2, 2).mass = 0.50; % [kg] Parachute Mass -settings.para(2, 2).z_cut = 0; % [m] Final altitude of the parachute - - -%% INTEGRATION OPTIONS -settings.ode.finalTime = 2000; % [s] Final integration time - -% create an option structure for the integrations: - -% - AbsTol is the threshold below which the value of the solution becomes unimportant -% - RelTol is the tolerance betweeen two consecutive values -% - Events is the event function that defines when the integration must be -% - stopped (it has to be created) -% - InitialStep is the highest value tried by the solver - -settings.ode.optionsasc1 = odeset('Events', @eventApogee, 'InitialStep', 1); %ODE options for ascend -settings.ode.optionsasc2 = odeset('InitialStep', 1); %ODE options for due to the opening delay of the parachute -settings.ode.optionsascMultipleAB = odeset('Events', @eventAB, 'InitialStep', 1); %ODE options for opening of the airbrakes -settings.ode.optionspara = odeset('Events', @eventParaCut); %ODE options for the parachutes -settings.ode.optionsdesc = odeset('Events', @eventLanding); %ODE options for ballistic descent -settings.ode.optionspad = odeset('Events', @eventPad); %ODE options for the launchpad phase - -% Settings for descent 6dof simulation -settings.ode.optionsDrogue6DOF = odeset('Events', @eventParaCut, 'AbsTol', 1e-6,'RelTol', 1e-6); %ODE options for due to cutting of the drogue chute -settings.ode.optionsMainExt6DOF = odeset('Events', @eventMainExit, 'AbsTol', 1e-6,'RelTol', 1e-6); %ODE options for due to the extraction of the main chute -settings.ode.optionsMain6DOF = odeset('Events', @eventLanding, 'AbsTol', 1e-6,'RelTol', 1e-6); %ODE options to terminate descent phase - -%% STOCHASTIC DETAILS -%%% launch probability details -settings.stoch.prob.xLim = 2e3; % Max ovest displacement [m] -settings.stoch.prob.VLim = 50; % Max drogue velocity [Pa] -settings.stoch.prob.XCPLim = 1.5; % Min XCP - -%%% Safe Ellipse - roccaraso -settings.prob.SafeEllipse(1).name = 'prova'; -settings.prob.SafeEllipse(1).a = 1100; -settings.prob.SafeEllipse(1).b = 2800; -settings.prob.SafeEllipse(1).x0 = 0; -settings.prob.SafeEllipse(1).y0 = -300; -settings.prob.SafeEllipse(1).alpha = 10; - - -%% LANDING POINTS -% satellite maps of the landing zone -% delta limit on the coordinates (for the landing map) -settings.limLat = 0.04; -settings.limLon = 0.025; diff --git a/missions/HREmotors.mat b/missions/HREmotors.mat deleted file mode 100644 index 1ffa2db..0000000 --- a/missions/HREmotors.mat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fbb0e6fb46b31cadbc084461987aa8f45d9128c7e6b8d59483b88809e1495f3f -size 6730820 -- GitLab