-
Notifications
You must be signed in to change notification settings - Fork 1
/
simulation.m
49 lines (44 loc) · 1.78 KB
/
simulation.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function [T, R_ECI, V_ECI] = simulation(init_cond,sc_cfg,sys_cfg,sim_cfg)
% simulation.m
% Equations of motion differential equation for perturbed Earth orbit
% spacecraft motion.
%
% Inputs:
% init_cond initial conditions struct (time, elements, RV vec's)
% sc_cfg spacecraft configuration struct
% sys_cfg celestial body system configuration struct
% sim_cfg simulation configuration struct
%
% Outputs:
% T JD timestep array [day]
% R_ECI ECI-frame position vector array [km]
% V_ECI ECI-frame velocity vector array [km/s]
%
% Byproducts:
% force_data Persistent struct that contains arrays of central and
% perturbing forces acting on the spacecraft, resolved
% in the ECI frame [kN/kg]
%
% Author(s): Joseph Yates
% AEROSP 548 F18 Final Project: Ha, Mohseni, Yates
%
% Sources:
% Setup simulation timing
ti = init_cond.JD0s;
tf = init_cond.JD0s + sim_cfg.time.length * sys_cfg.s_per_solar_day;
ts = sim_cfg.time.step;
tspan = ti:ts:tf;
% Setup simulation initial conditions and options
X0_ECI = [init_cond.R_ECI;init_cond.V_ECI];
options = odeset('OutputFcn',@force_save, ...
'AbsTol',sim_cfg.tol.ode45_abs, ...
'RelTol',sim_cfg.tol.ode45_rel);
% Run simulation
[Ts, X_ECI] = ode113(@perturbed_orbit_eom,tspan,X0_ECI,options, ...
sc_cfg,sys_cfg,sim_cfg);
% Convert time back to days since calcs are complete
T = Ts ./ sys_cfg.s_per_solar_day;
% Split position and velocity data
R_ECI = X_ECI(:,1:3);
V_ECI = X_ECI(:,4:6);
end