diff --git a/missions/9K_Test/config/environmentConfig.m b/missions/9K_Test/config/environmentConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..a667f90e589c2892f397076c5dff8a46325de11f --- /dev/null +++ b/missions/9K_Test/config/environmentConfig.m @@ -0,0 +1,19 @@ +% CONFIG - This script sets up parameters for the environment +% +% Use this file to write launch data, independent from the rocket itself + +environment = Environment(); + +environment.lat0 = 39.388727; % [deg] Launchpad latitude +environment.lon0 = -8.287842; % [deg] Launchpad longitude +environment.z0 = 160; % [m] Launchpad Altitude +environment.omega = 85*pi/180; % [deg] Launchpad elevation +environment.phi = 133*pi/180; % [deg] Launchpad azimuth +environment.pin1Length = 0.5603; % [m] Distance from the upper pin to the upper tank cap +environment.pin2Length = 0.2055; % [m] Distance from the lower pin to the lower tank cap +environment.rampLength = 12; % [m] Total launchpad length + +% environment.temperature = []; % [K] Ground temperature correction +% environment.pressure = []; % [Pa] Ground pressure correction +% environment.rho = []; % [Kg/m^3] Gorund air density correction +% environment.gamma = 1.4; % [-] Gas constant \ No newline at end of file diff --git a/missions/9K_Test/config/paraConfig.m b/missions/9K_Test/config/paraConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..7ac5c7ea55fe80d7409e6e7ec38ea78e50ce5b1d --- /dev/null +++ b/missions/9K_Test/config/paraConfig.m @@ -0,0 +1,96 @@ +% CONFIG - This script contains information about the parachutes onboard +% parachute 1 +para{1, 1} = Parachute(); + +para{1, 1}.name = 'DROGUE chute'; +para{1, 1}.surface = 0.6; % [m^2] Surface +para{1, 1}.mass = 0.5; % [kg] Parachute Mass +para{1, 1}.cd = 0.75; % [/] Parachute Drag Coefficient +para{1, 1}.cl = 0; % [/] Parachute Lift Coefficient +para{1, 1}.openingTime = 0.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 +para{1, 1}.chordK = 7200; % [N/m^2] Shock Chord Elastic Constant +para{1, 1}.chordC = 0; % [Ns/m] Shock Chord Dynamic Coefficient +para{1, 1}.m = 1; % [m^2/s] Coefficient of the surface vs. time opening model +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 + +% parachute 2 +para{2, 1} = Parachute(); + +para{2, 1}.name = 'MAIN chute'; +para{2, 1}.surface = 13.5; % [m^2] Surface +para{2, 1}.mass = 1.75; % [kg] Parachute Mass +para{2, 1}.cd = 0.65; % [/] Parachute Drag Coefficient +para{2, 1}.cl = 0; % [/] Parachute Lift Coefficient +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.6; % [/] Parachute Longitudinal Drag Coefficient +para{2, 1}.chordLength = 6; % [m] Shock Chord Length +para{2, 1}.chordK = 3000; % [N/m^2] Shock Chord Elastic Constant +para{2, 1}.chordC = 0; % [Ns/m] Shock Chord Dynamic Coefficient +para{2, 1}.m = 1; % [m^2/s] Coefficient of the surface vs. time opening model +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 + +%% PAYLOAD CHUTES +% parachute 1 +para{1, 2} = Parachute(); + +para{1, 2}.name = "Parafoil DROGUE"; +para{1, 2}.surface = 0.11; % [m^2] Surface +para{1, 2}.mass = 0.1; % [kg] Parachute Mass +para{1, 2}.cd = 1.2; % [/] Parachute Drag Coefficient +para{1, 2}.cl = 0; % [/] Parachute Lift Coefficient +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 +para{1, 2}.chordK = 7200; % [N/m^2] Shock Chord Elastic Constant +para{1, 2}.chordC = 0; % [Ns/m] Shock Chord Dynamic Coefficient +para{1, 2}.m = 1; % [m^2/s] Coefficient of the surface vs. time opening model +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 + +% parachute 2 +para{2, 2} = Wing(); + +para{2, 2}.name = "Parafoil AIRFOIL"; +para{2, 2}.mass = 0.40; % [kg] Wing Mass +para{2, 2}.openingTime = 0; % [s] Wing 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}.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; + 0, 0.4, 0; + 0.03, 0, 0.053]; % [kg m^2] [3x3] inertia matrix parafoil + +para{2, 2}.finalAltitude = 0; + +para{2, 2}.cd0 = 0.25; +para{2, 2}.cdAlpha = 0.12; +para{2, 2}.cdSurface = 0.01; + +para{2, 2}.cl0 = 0.091; +para{2, 2}.clAlpha = 0.9; +para{2, 2}.clSurface = -0.0035; + +para{2, 2}.cLP = -0.84; +para{2, 2}.cLPhi = -0.1; +para{2, 2}.cLSurface = -0.0035; + +para{2, 2}.cM0 = 0.35; +para{2, 2}.cMAlpha = -0.72; +para{2, 2}.cMQ = -1.49; + +para{2, 2}.cNR = -0.27; +para{2, 2}.cNSurface = 0.0115; \ No newline at end of file diff --git a/missions/9K_Test/config/rocketConfig.m b/missions/9K_Test/config/rocketConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..c0fb8b94bf2764ea3f0a27f6c7d21c1f2d71ffd0 --- /dev/null +++ b/missions/9K_Test/config/rocketConfig.m @@ -0,0 +1,111 @@ +% CONFIG - This script sets up rocket's parameters + +%% ROCKET - OVERRIDES BAYS CONFIG +rocket = Rocket(); + +rocket.diameter = 0.15; % [m] Rocket diameter +% rocket.diameter = 0.18; +rocket.massNoMotor = 15.4754; % [kg] OVERRIDE mass without motor +rocket.inertiaNoMotor = [0.048; 10.3957; 10.3982]; % [kg*m^2] OVERRIDE inertia without motor - body axes reference +rocket.xcgNoMotor = 0.9628; % [m] OVERRIDE xCg without motor +rocket.lengthCenterNoMotor = 1.6225; % [m] OVERRIDE Center length - no nose, no motor + +%% PRF - Includes Parafoil + Nose +parafoil = Parafoil(); + +parafoil.length = 646.2 * 1e-3; % [m] Total bay length +parafoil.mass = 5; % [kg] Total bay mass +parafoil.inertia = 1e-9*[10514313; 92235828; 92322682]; % [kg*m^2] Total bay inertia (Body reference) +parafoil.xcg = 453.55 * 1e-3; % [m] Cg relative to bay upper side + +parafoil.noseLength = 0.327; % [m] Nosecone length +parafoil.noseType = 'MHAACK'; % [-] Nosecone shape +parafoil.nosePower = 3/4; % [-] Nosecone power type parameter +parafoil.nosePMod = 1.250152e+00; % [-] P coefficient for modified nosecone shapes +parafoil.noseCMod = 1.799127e-01; % [-] C coefficient for modified nosecone shapes + +%% RCS +recovery = Recovery(); + +recovery.length = 826 * 1e-3; % [m] Total bay length +recovery.mass = 4.452; % [kg] Total bay mass +recovery.inertia = 1e-9*[11889636; 274548189; 275245205]; % [kg*m^2] Total bay inertia (Body reference) +recovery.xcg = 459 * 1e-3; % [m] Cg relative to bay upper side + +%% ELC +electronics = Electronics(); + +electronics.length = 422.5 * 1e-3; % [m] Total bay length +electronics.mass = 3.3271; % [kg] Total bay mass +electronics.inertia = 1e-9*[10041478; 49742634; 50292878]; % [kg*m^2] Total bay inertia (Body reference) +electronics.xcg = 221.11 * 1e-3; % [m] Cg relative to bay upper side + +%% ARB +airbrakes = Airbrakes(); + +airbrakes.identification = false; % Control parameter for airbrakes - GNC + +airbrakes.length = 54.8 * 1e-3; % [m] Total bay length +airbrakes.mass = 0.96; % [kg] Total bay mass +airbrakes.inertia = 1e-9*[1886729; 1931082; 3088968]; % [kg*m^2] Total bay inertia (Body reference) +airbrakes.xcg = 35.2 * 1e-3; % [m] Cg relative to bay upper side + +airbrakes.enabled = false; % If true, multiple and smooth airbrakes opening will be simulated +airbrakes.extension = [1]; % aerobrakes, 1-2-3 for 0%, 50% or 100% opened +airbrakes.deltaTime = [0.5]; % aerobrakes, configurations usage time + +airbrakes.n = 3; % [-] number of brakes +airbrakes.height = linspace(0, 0.0363, 3); % [m] Block airbrakes opening coordinate ( First entry must be 0! ) +airbrakes.angleFunction = ... + @(x) -0.009083*x^4 + 0.02473*x^3 + ... + -0.01677*x^2 + 0.03129*x; % [-] Relation between angle and extension height +airbrakes.width = 0.1002754821; % [m] brakes width (normal) +airbrakes.thickness = 0.008; % [m] brakes thickness +airbrakes.xDistance = 1.517; % [m] axial position from nosecone base + +airbrakes.maxMach = 0.8; % [-] Maximum Mach at which airbrakes can be used +airbrakes.servoOmega = 300*pi/180; % [rad/s] Servo-motor angular velocity +airbrakes.servoTau = 0.0374588; + +%% MOTOR +motor = Motor(); + +motor.name = 'HRE_9K_1'; + +motor.cutoffTime = []; % [s] OVERRIDE Cutoff time +motor.ignitionTransient = 0.3; % [s] Ignition transient +motor.cutoffTransient = 0.3; % [s] Cut-off transient + +%% REAR - Includes Fincan + Boat +rear = Rear(); + +rear.offset = -0.6936; % [m] offset from +rear.length = 477 * 1e-3; % [m] Total bay length +rear.mass = 1736.32 *1e-3; % [kg] Total bay mass +rear.inertia = 1e-9*[13662070; 47529495; 47528846]; % [kg*m^2] Total bay inertia (Body reference) +rear.xcg = 236.82 * 1e-3; % [m] Cg relative to bay upper side + +rear.boatType = 'OGIVE'; % [-] Boat type +rear.boatLength = 0.240; % [m] Boat length +rear.boatFinalDiameter = 0.076; % [m] Boat end diameter + +rear.finsRootChord = 0.3; % [m] attached chord length +rear.finsFreeChord = 0.11; % [m] free chord length +rear.finsHeight = 0.15; % [m] fin height +% rear.finsDeltaXRootChord = 0.205; +rear.finsDeltaXFreeChord = 0.16; % [m] start of Chord 2 measured from start of Chord 1 +rear.nPanel = 3; % [m] number of fins +rear.finsLeadingEdgeRadius = [0 0]; % [deg] Leading edge radius at each span station +rear.finsAxialDistance = -0.205; % [m] distance between end of root chord and end of center body +rear.finsSemiThickness = 0.00175; % [m] fin semi-thickness +rear.finsMaxThicknessPosition = 0.00175; % [m] Fraction of chord from leading edge to max thickness + +%% PITOT +pitot = Pitot(); + +pitot.diameter = []; % [m] Pitot tube diameter +pitot.length = []; % [m] Pitot tube length +pitot.initialConeLength = []; % [m] Pitot initial conic section length +pitot.finalConeLength = []; % [m] Pitot final conic section length +pitot.initialConeDiameter = []; % [m] Pitot initial conic section diameter +pitot.finalConeDiameter = []; % [m] Pitot final conic section diameter \ No newline at end of file diff --git a/missions/9K_Test/config/windConfig.m b/missions/9K_Test/config/windConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..8217eadfeddaa227707348c72ed18bfc13c6691b --- /dev/null +++ b/missions/9K_Test/config/windConfig.m @@ -0,0 +1,29 @@ +% CONFIG - This script sets up wind direction and magnitude based on +% altitudes +% +% Wind azimuth angle indications - Wind directed from <angle> +% 0 deg (use 360 instead of 0) -> North +% 90 deg -> East +% 180 deg -> South +% 270 deg -> West + +%% CUSTOM WIND MODEL + +windCustom = Wind(); + +% windCustom.altitudes = [0 140 500 1000 3000 5000 7000 9500]; % [m] Altitudes at which a distribution change occurs +% windCustom.magnitudeDistribution = ["u", "g", "g", "g", "g", "g", "g", "g"]; % [-] Distribution type: "u" - uniform, "g" - gaussian +% windCustom.magnitudeParameters = [0 7 12 13 15 15 18 20; +% 8.7 1.5 3 3 3 3 4 5]; % [m/s] Distribution parameters: "u" - [min; max], "g" - [mu; sigma] +% windCustom.azimuthDistribution = ["u", "u", "u", "u", "u", "u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian +% windCustom.azimuthParameters = [150 150 150 150 150 150 150 150; +% 180 180 180 180 180 180 180 180]*pi/180; % [deg] Distribution parameters: "u" - [min; max], "g" - [mu; sigma] + + +windCustom.altitudes = [0 9500]; +windCustom.magnitudeDistribution = ["u", "u"]; +windCustom.magnitudeParameters = [0 0; + 0 0]; +windCustom.azimuthDistribution = ["u", "u"]; +windCustom.azimuthParameters = [0 0; + 359 359]*pi/180; diff --git a/missions/9K_Test/data/aeroCoefficients.mat b/missions/9K_Test/data/aeroCoefficients.mat new file mode 100644 index 0000000000000000000000000000000000000000..623eb9443eebc7df80fbc0a49ce1d85362434be1 --- /dev/null +++ b/missions/9K_Test/data/aeroCoefficients.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb2f1485e9349ad9419d12249fd48642ceb870ec306ced44536878ce32a4b80e +size 35572221 diff --git a/missions/9K_Test/data/aeroCoefficientsHighAOA.mat b/missions/9K_Test/data/aeroCoefficientsHighAOA.mat new file mode 100644 index 0000000000000000000000000000000000000000..fd18d8eb16322c6349b759c309e752cd8610145f --- /dev/null +++ b/missions/9K_Test/data/aeroCoefficientsHighAOA.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61e55d1e454ffbcf6820ae579a5399ba102272d9373d05e98116b578727030f9 +size 5773914 diff --git a/missions/9K_Test/data/motors.mat b/missions/9K_Test/data/motors.mat new file mode 100644 index 0000000000000000000000000000000000000000..13d920beeea803bd21e1478b9fbb6e46b02ca04f --- /dev/null +++ b/missions/9K_Test/data/motors.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd6f1b1219467722a9f93f64e4176f3863145a7af3959d5d9814274179125abd +size 2505 diff --git a/missions/9K_Test/data/satelliteData.mat b/missions/9K_Test/data/satelliteData.mat new file mode 100644 index 0000000000000000000000000000000000000000..cc4ab62aad6f3f4ab50fa1a3b621d21216f9271f --- /dev/null +++ b/missions/9K_Test/data/satelliteData.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e397bc4e9d60eaab3cfcd65adaef7cf5ca31f6e18455abe2d0456fbe22d347cd +size 197 diff --git a/missions/9K_Test/data/satelliteMap.tif b/missions/9K_Test/data/satelliteMap.tif new file mode 100644 index 0000000000000000000000000000000000000000..3cf6d60a0e5c7997d98eacaf5cf84a50ed9e949d Binary files /dev/null and b/missions/9K_Test/data/satelliteMap.tif differ diff --git a/missions/missionConfig.m b/missions/missionConfig.m index 59a8ed707d72f51bd05068f6c4cdf0e5a597bdc7..255f79a538f71fd342f385c41ae05abc703feb30 100644 --- a/missions/missionConfig.m +++ b/missions/missionConfig.m @@ -3,5 +3,6 @@ % Use this file to store relevant, universally true settings, % such as the current mission. The config "BIOS" mission = Mission(); -mission.name = '2025_Orion_Portugal_October'; -% mission.name = '2024_Lyra_Roccaraso_September'; \ No newline at end of file +% mission.name = '2025_Orion_Portugal_October'; +% mission.name = '2024_Lyra_Roccaraso_September'; +mission.name = '9K_Test'; \ No newline at end of file