Select Git revision
Environment.m
-
Marco Luigi Gaibotti authoredMarco Luigi Gaibotti authored
Environment.m 4.03 KiB
classdef Environment < Component
% 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
properties
lat0 double % [deg] Launchpad latitude
lon0 double % [deg] Launchpad longitude
z0 double % [m] Launchpad Altitude
omega double % [deg] Launchpad Elevation
phi double % [deg] Launchpad Azimuth
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 = 288.15 % [K] Ground temperature
pressure double % [Pa] Ground pressure
rho double % [Kg/m^3] Ground air density
gamma double = 1.4 % [-] Gas constant
R double = 287 % [-] 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 = protected)
configName = 'environmentConfig.m'
variableName = ''
mission Mission
motor Motor
end
methods
function obj = Environment(mission, motor, varIn)
arguments(Input)
mission Mission = Mission()
motor Motor = Motor()
varIn = []
end
obj@Component(mission, varIn);
obj.motor = motor;
%% Update angles
obj.omega = deg2rad(obj.omega);
obj.phi = deg2rad(obj.phi);
obj.updateAll();
end
end
% Updaters
methods
function updateAll(obj)
obj.updateG0;
obj.updatePinDistance;
obj.updateRamp;
obj.updateLocal;
end
function updateAllExcetpG0(obj) % useful for parallel computing based on threads (gravitywgs84 not supported)
obj.updatePinDistance;
obj.updateRamp;
obj.updateLocal;
end
function obj = updateG0(obj)
if(~isempty(obj.lat0))
obj.g0 = gravitywgs84(obj.z0, obj.lat0);
end
end
function obj = updatePinDistance(obj)
obj.pinDistance = obj.pin1Length + obj.pin2Length ...
+ obj.motor.tankLength;
end
function obj = updateRamp(obj)
obj.effectiveRampLength = obj.rampLength - obj.pinDistance;
obj.effectiveRampAltitude = obj.effectiveRampLength*sin(obj.omega);
end
function obj = updateLocal(obj)
if isempty(obj.temperature), obj.temperature = 288.15; end
if isempty(obj.gamma), obj.gamma = 1.4; end
obj.local = [obj.z0, obj.temperature, ... % vector containing inputs for atmosphereData
obj.pressure, obj.rho];
end
end
end