Select Git revision
Environment.m
-
Marco Luigi Gaibotti authoredMarco Luigi Gaibotti authored
Environment.m 6.04 KiB
classdef Environment < Config
% Environment: Represents launch site dependent variables.
%
% Constructor:
% - Environment: Creates an instance of the Environment class.
% Loaded config: environmentConfig.m
% Loaded data: -
% Arguments:
% - mission: Mission, mission object
% - motor: Motor, used to compute pin distance
% - varIn: (optional) config source. Alternative to config.m
% file
%% Cached properties
properties(Access = private)
OMEGA
PHI
LAT0
LON0
Z0
PIN1_LENGTH
PIN2_LENGTH
RAMP_LENGTH
TEMPERATURE = 288.15
PRESSURE = 101325
RHO = 1.225
GAMMA = 1.4
end
properties (Dependent)
omega double % [rad] Launchpad Elevation, user input in degrees
phi double % [rad] Launchpad Azimuth, user input in degrees
lat0 double % [deg] Launchpad latitude
lon0 double % [deg] Launchpad longitude
z0 double % [m] Launchpad Altitude
pin1Length double % [m] Distance from the upper pin to the upper tank cap
pin2Length double % [m] Distance from the lower pin to the lower tank cap
rampLength double % [m] Total launchpad length
temperature double % [K] Ground temperature
pressure double % [Pa] Ground pressure
rho double % [Kg/m^3] Ground air density
gamma double % [-] Gas constant
end
properties(SetAccess = private)
g0 double % [-] Gravity costant at launch latitude and altitude
earthRadius double = 6371007 % [m] Radius used for g computation
local double % [-] Vector conatining inputs for atmosphereData
pinDistance double % [m] Distance of the upper pin from the rail base (upper pin-boat + boat-rail base)
effectiveRampLength double % [m] Total launchpad length
effectiveRampAltitude double % [m] Projection of effectiveRampLength on z axis
end
properties(Access = private)
tankLength double % [m] Motor tank length
end
properties(Constant, Access = protected)
configName = 'environmentConfig.m'
variableName = ''
end
methods
function obj = Environment(mission, motor, varIn)
arguments(Input)
mission Mission = Mission()
motor Motor = Motor()
varIn = []
end
obj@Config(mission, varIn);
obj.tankLength = motor.tankLength;
obj = obj.updateRamp();
obj = obj.updateLocal();
end
end
methods
function obj = set.phi(obj, value)
obj.PHI = value;
end
function obj = set.omega(obj, value)
obj.OMEGA = value;
obj = obj.updateRamp();
end
function obj = set.lat0(obj, value)
obj.LAT0 = value;
obj = obj.updateG0();
end
function obj = set.lon0(obj, value)
obj.LON0 = value;
end
function obj = set.z0(obj, value)
obj.Z0 = value;
obj = obj.updateG0();
end
function obj = set.pin1Length(obj, value)
obj.PIN1_LENGTH = value;
obj = obj.updateRamp();
end
function obj = set.pin2Length(obj, value)
obj.PIN2_LENGTH = value;
obj = obj.updateRamp();
end
function obj = set.rampLength(obj, value)
obj.RAMP_LENGTH = value;
obj = obj.updateRamp();
end
function obj = set.temperature(obj, value)
obj.TEMPERATURE = value;
obj = obj.updateLocal();
end
function obj = set.pressure(obj, value)
obj.PRESSURE = value;
obj = obj.updateLocal();
end
function obj = set.rho(obj, value)
obj.RHO = value;
obj = obj.updateLocal();
end
function obj = set.gamma(obj, value)
obj.GAMMA = value;
obj = obj.updateLocal();
end
function value = get.phi(obj), value = obj.PHI; end
function value = get.omega(obj), value = obj.OMEGA; end
function value = get.lat0(obj), value = obj.LAT0; end
function value = get.lon0(obj), value = obj.LON0; end
function value = get.z0(obj), value = obj.Z0; end
function value = get.pin1Length(obj), value = obj.PIN1_LENGTH; end
function value = get.pin2Length(obj), value = obj.PIN2_LENGTH; end
function value = get.rampLength(obj), value = obj.RAMP_LENGTH; end
function value = get.temperature(obj), value = obj.TEMPERATURE; end
function value = get.pressure(obj), value = obj.PRESSURE; end
function value = get.rho(obj), value = obj.RHO; end
function value = get.gamma(obj), value = obj.GAMMA; end
end
% Updaters
methods
function obj = updateG0(obj)
if(length([obj.Z0, obj.LAT0]) == 2)
obj.g0 = gravitywgs84(obj.Z0, obj.LAT0);
end
end
function obj = updateRamp(obj)
obj.pinDistance = obj.PIN1_LENGTH + obj.PIN2_LENGTH + obj.tankLength;
obj.effectiveRampLength = obj.RAMP_LENGTH - obj.pinDistance;
obj.effectiveRampAltitude = obj.effectiveRampLength*sin(obj.OMEGA);
end
function obj = updateLocal(obj)
obj.local = [obj.Z0, obj.TEMPERATURE, ... % vector containing inputs for atmosphereData
obj.PRESSURE, obj.RHO];
end
end
end