Skip to content
Snippets Groups Projects
Select Git revision
  • GNC_stochastic_updates
  • tecnhical-report
  • main default protected
  • unique-event-function
  • CoefficientCsv
  • ode-tests
  • test-9K
  • stability-bugs
  • archive/benchmark
9 results

Environment.m

Blame
  • 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