diff --git a/missions/2021_Lynx_Portugal_October/config/environmentConfig.m b/missions/2021_Lynx_Portugal_October/config/environmentConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..4ca1bbf901b857b463b1e33b408e7157a905de8a --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/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; % [deg] Launchpad elevation +environment.phi = 0; % [deg] Launchpad azimuth +environment.pin1Length = 1.15; % [m] Distance from the upper pin to the upper tank cap +environment.pin2Length = []; % [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/2021_Lynx_Portugal_October/config/paraConfig.m b/missions/2021_Lynx_Portugal_October/config/paraConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..e9b8e059fea335b3bdde4ff39a2178c0df3cad12 --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/config/paraConfig.m @@ -0,0 +1,38 @@ +% 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.2; % [kg] Parachute Mass +para(1, 1).cd = 0.75; % [/] Parachute Drag Coefficient +para(1, 1).cl = 0; % [/] Parachute Lift Coefficient +para(1, 1).openingTime = 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 = []; % [-] 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 = 10.54; % [m^2] Surface +para(2, 1).mass = 1.5; % [kg] Parachute Mass +para(2, 1).cd = 0.7; % [/] Parachute Drag Coefficient +para(2, 1).cl = 0; % [/] Parachute Lift Coefficient +para(2, 1).openingTime = []; % [s] drogue opening delay +para(2, 1).finalAltitude = 0; % [m] Final altitude of the parachute +para(2, 1).cx = 1.2; % [/] 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 = []; % [-] Empirical coefficient to obtain correct peak force at deployment \ No newline at end of file diff --git a/missions/2021_Lynx_Portugal_October/config/rocketConfig.m b/missions/2021_Lynx_Portugal_October/config/rocketConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..7f6e832c27ac4b328210b941a6f5904610309359 --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/config/rocketConfig.m @@ -0,0 +1,120 @@ +% CONFIG - This script sets up rocket's parameters + +%% ROCKET - OVERRIDES BAYS CONFIG +rocket = Rocket(); + +rocket.diameter = 0.15; % [m] Rocket diameter +rocket.massNoMotor = []; % [kg] OVERRIDE mass without motor +rocket.inertiaNoMotor = []; % [kg*m^2] OVERRIDE inertia without motor - body axes reference +rocket.xCgNoMotor = []; % [m] OVERRIDE xCg without motor +rocket.lengthCenterNoMot = []; % [m] OVERRIDE Center length - no nose, no motor + +rocket.diameter = 0.15; % [m] Rocket diameter +rocket.massNoMotor = 21.48; % [kg] OVERRIDE mass without motor +rocket.inertiaNoMotor = [0.0786; 12.972; 12.972]; % [kg*m^2] OVERRIDE inertia without motor - body axes reference +% XcgNoMotor = (XcgTot*(MNoMot + Mfull) - mFull*XcgFull)/MNotMot +rocket.xCgNoMotor = 1.6025; % [m] OVERRIDE xCg without motor +rocket.lengthCenterNoMot = 1.7640; % [m] OVERRIDE Center length - no nose, no motor + +%% PLD - Includes Payload + Nose +payload = Payload(); + +% !!!!! +payload.length = 0.31; % [m] Total bay length +payload.mass = 0; % [kg] Total bay mass +payload.inertia = zeros(3,1); % [kg*m^2] Total bay inertia (Body reference) +payload.xCg = 0; % [m] Cg relative to bay upper side +% !!!!! + +payload.noseLength = 0.26; % [m] Nosecone length +payload.noseType = 'KARMAN'; % [-] Nosecone shape +payload.nosePower = 0; % [-] Nosecone power type parameter +payload.nosePMod = 0; % [-] P coefficient for modified nosecone shapes +payload.noseCMod = 0; % [-] C coefficient for modified nosecone shapes + +%% RCS +recovery = Recovery(); + +% !!!!! +recovery.length = 0; % [m] Total bay length +recovery.mass = 0; % [kg] Total bay mass +recovery.inertia = zeros(3,1); % [kg*m^2] Total bay inertia (Body reference) +recovery.xCg = 0; % [m] Cg relative to bay upper side +% !!!!! + +%% ELC +electronics = Electronics(); + +% !!!!! +electronics.length = 0; % [m] Total bay length +electronics.mass = 0; % [kg] Total bay mass +electronics.inertia = zeros(3,1); % [kg*m^2] Total bay inertia (Body reference) +electronics.xCg = 0; % [m] Cg relative to bay upper side +% !!!!! + +%% ARB +airbrakes = Airbrakes(); + +% !!!!! +airbrakes.length = 0; % [m] Total bay length +airbrakes.mass = 0; % [kg] Total bay mass +airbrakes.inertia = zeros(3,1); % [kg*m^2] Total bay inertia (Body reference) +airbrakes.xCg = 0; % [m] Cg relative to bay upper side% !!!!! +% !!!!! + +airbrakes.enabled = true; % 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]; % aerobrakes, configurations usage time + +airbrakes.n = 3; % [-] number of brakes +airbrakes.height = linspace(0, 0.0373, 3); % [m] Block airbrakes opening coordinate ( First entry must be 0! ) +airbrakes.angleFunction = ... + @(x) 1*x^4 + 2*x^3 + 3*x^2 + 4*x; % [-] Relation between angle and extension height +airbrakes.width = 0.088; % [m] brakes width (normal) +airbrakes.thickness = 0.005; % [m] brakes thickness +airbrakes.xDistance = 1.44; % [m] axial position from nosecone base + +airbrakes.maxMach = 0.8; % [-] Maximum Mach at which airbrakes can be used +airbrakes.servoOmega = 150*pi/180; % [rad/s] Servo-motor angular velocity + +%% MOTOR +motor = Motor(); + +motor.name = 'M2000RPortugal'; % [-] Motor name +motor.cutoffTime = inf; % [s] OVERRIDE Cutoff time +motor.ignitionTransient = []; % [s] Ignition transient +motor.cutoffTransient = []; % [s] Cut-off transient + +%% REAR - Includes Fincan + Boat +rear = Rear(); + +% !!!!! +rear.position = 0; % [m] offset from +rear.length = 0; % [m] Total bay length +rear.mass = 0; % [kg] Total bay mass +rear.inertia = zeros(3,1); % [kg*m^2] Total bay inertia (Body reference) +rear.xCg = 0; % [m] Cg relative to bay upper side +% !!!!! + +rear.boatType = ''; % [-] Boat type +rear.boatLength = 0; % [m] Boat length +rear.boatFinalDiameter = 0; % [m] Boat end diameter + +rear.finsRootChord = 0.345; % [m] attached chord length +rear.finsFreeChord = 0.12; % [m] free chord length +rear.finsHeight = 0.117; % [m] fin height +rear.finsDeltaXFreeChord = 0.225; % [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.008; % [m] distance between end of root chord and end of center body +rear.finsSemiThickness = 0.0015; % [m] fin semi-thickness +rear.finsMaxThicknessPosition = 0.0015; % [m] Fraction of chord from leading edge to max thickness + +%% PITOT +pitot = Pitot(); + +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/2021_Lynx_Portugal_October/config/windConfig.m b/missions/2021_Lynx_Portugal_October/config/windConfig.m new file mode 100644 index 0000000000000000000000000000000000000000..bba16a9731f7f0c525dddd433e9f54aaba975d08 --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/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 = WindCustom(); + +windCustom.altitudes = [0 200 2000]; % [m] Altitudes at which a distribution change occurs +windCustom.magnitudeDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian +windCustom.magnitudeParameters = [7 2 10; % [m/s] Distribution parameters: "u" - [min; max], "g" - [mu; sigma] + 7 2 10]; +windCustom.azimuthDistribution = ["u", "u", "u"]; % [-] Distribution type: "u" - uniform, "g" - gaussian +windCustom.azimuthParameters = 0*pi/180 * ones(2,3); % [deg] Distribution parameters: "u" - [min; max], "g" - [mu; sigma] + +%% MATLAB WIND MODEL + +windMatlab = WindMatlab(); + +windMatlab.DayMin = 105; % [d] Minimum Day of the launch +windMatlab.DayMax = 105; % [d] Maximum Day of the launch +windMatlab.HourMin = 4; % [h] Minimum Hour of the day +windMatlab.HourMax = 4; % [h] Maximum Hour of the day +windMatlab.ww = 0; \ No newline at end of file diff --git a/missions/2021_Lynx_Portugal_October/data/CAinterpCoeffs.mat b/missions/2021_Lynx_Portugal_October/data/CAinterpCoeffs.mat new file mode 100644 index 0000000000000000000000000000000000000000..a26bd8866fb67fab03e445755d017df3cdaf2a4b --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/data/CAinterpCoeffs.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21137cc18443b280a2b7cc9a96c190ca9a0dd106f5c1cf07fd20143f56504e74 +size 1152 diff --git a/missions/2021_Lynx_Portugal_October/data/aeroCoefficients.mat b/missions/2021_Lynx_Portugal_October/data/aeroCoefficients.mat new file mode 100644 index 0000000000000000000000000000000000000000..388600ff8f8c6f749ee21b783d6caccce515d7f2 --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/data/aeroCoefficients.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:62459531effcbaad75fa3c3ecb546c2bfba17bfa3e8483474f8764a270610d07 +size 24232774 diff --git a/missions/2021_Lynx_Portugal_October/data/aeroCoefficientsHighAOA.mat b/missions/2021_Lynx_Portugal_October/data/aeroCoefficientsHighAOA.mat new file mode 100644 index 0000000000000000000000000000000000000000..6ae4584be8ccceb445002d2ed77828187225e42f --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/data/aeroCoefficientsHighAOA.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a831c348727461d227ac93c5cb4107bcbdfada839645be87ded6e3235b4ebfc0 +size 5776383 diff --git a/missions/2021_Lynx_Portugal_October/data/motors.mat b/missions/2021_Lynx_Portugal_October/data/motors.mat new file mode 100644 index 0000000000000000000000000000000000000000..4a065a19b6ced75901d20e1138e2054cea75af24 --- /dev/null +++ b/missions/2021_Lynx_Portugal_October/data/motors.mat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96b0b55e9f5c34dbefcec53fef37904c90f9ad033454bd085b0867f94791789f +size 233326 diff --git a/missions/conversion.m b/missions/conversion.m index 399074c88f711cacbe1e9b8008f6032bae3415fc..48033f1e7101c2c8731131dedb4da13b444dd7c3 100644 --- a/missions/conversion.m +++ b/missions/conversion.m @@ -1,13 +1,13 @@ % conversion from full, empty to total clc -iMotor = 406; +iMotor = 484; settings.motor.expTime = motors(iMotor).t; settings.motor.expThrust = motors(iMotor).T; settings.motor.expM = motors(iMotor).m; settings.mp = motors(iMotor).mp; % [kg] Propellant Mass settings.tb = motors(iMotor).t(end) ; % [s] Burning time settings.mc = motors(iMotor).mc; -settings.mNoMot = 17.85; +settings.mNoMot = 17.94; settings.ms = settings.mNoMot + settings.mc; % [kg] Structural Mass settings.m0 = settings.ms + settings.mp; % [kg] Total Mass settings.mnc = 0; @@ -16,11 +16,11 @@ settings.Lmot = motors(iMotor).L/1000; mNoMot = settings.ms mProp = settings.m0 - settings.mNoMot; -settings.xcg = [1.05, 0.98]; -xcgTot = 1.05; -xcgEmpty = 0.98; +settings.xcg = [1.24, 1.084]; +xcgTot = 1.24; +xcgEmpty = 1.084; -settings.Lcenter = 2.270; +settings.Lcenter = 2.496; settings.boatL = 0.0; LcenterNoMot = settings.Lcenter - settings.Lmot - settings.boatL