I’m happy to announce the first 3 packages of a high-fidelity astrodynamics simulator:
By defining the underlying dynamics model parameters, you can build a multitude of propagation fidelities.
# Set Date of Simulation
JD = date_to_jd(2024, 1, 5, 12, 0, 0.0)
p = ComponentVector(; JD=JD)
# Load Necessary Data
SpaceIndices.init()
eop_data = fetch_iers_eop()
grav_coeffs = GravityModels.load(IcgemFile, fetch_icgem_file(:EGM96))
# Define Models
grav_model = GravityHarmonicsAstroModel(;
gravity_model=grav_coeffs, eop_data=eop_data, order=36, degree=36
)
sun_third_body = ThirdBodyModel(; body=SunBody(), eop_data=eop_data)
moon_third_body = ThirdBodyModel(; body=MoonBody(), eop_data=eop_data)
satellite_srp_model = CannonballFixedSRP(0.5)
srp_model = SRPAstroModel(satellite_srp_model, sun_third_body, eop_data, Conical())
satellite_drag_model = CannonballFixedDrag(0.2)
drag_model = DragAstroModel(satellite_drag_model, JB2008(), eop_data)
# Set Intiial Condition
u0 = [
-1076.225324679696
-6765.896364327722
-332.3087833503755
9.356857417032581
-3.3123476319597557
-1.1880157328553503
] #km, km/s
# Define and Solve ODE Problem
model_list = (grav_model, sun_third_body, moon_third_body, srp_model, drag_model)
tspan = (0.0, 3 * 86400.0)
EOM!(du, u, p, t) = Cowell_EOM!(du, u, p, t, model_list)
prob = ODEProblem(EOM!, u0, tspan, p)
sol = solve(prob, VCABM(); abstol=1e-13, reltol=1e-13)
The next steps are to build out the documentation, support differentiability, and improve performance by reducing allocation. The goal is to eventually build out a full environment that can support everything from mission design to Space Situational Awareness similar to Orekit or MONTE.
Currently, only Cowell propagation is supported but the beginnings are there to build out a number a different propagation schemas such as DROMO, the Unified State Model, and Kusaanheimo-Stiefel, among others.
These packages are built off of the fantastic SatelliteToolbox.jl packages and work is ongoing to help with differentiability and allocation squashing there. There’s also early discussion to eventually merge this with JuliaSpaceMissionDesign.
If anyone has suggestions or wants to get involved, please reach out!