Succesful MBH runs, with some improvements

This commit is contained in:
Connor
2021-10-12 21:49:46 -06:00
parent c7913d2944
commit bb78578d9a
19 changed files with 426 additions and 146 deletions

View File

@@ -2,7 +2,7 @@ stages:
- test
unit-test-job:
timeout: 2h
timeout: 4h
stage: test
script:
- apt-get update
@@ -14,10 +14,10 @@ unit-test-job:
paths:
- julia/plots/nlp_test_1_phase.html
- julia/plots/nlp_test_2_phase.html
- julia/plots/nlp_test_5_phase.html
- julia/plots/nlp_test_3_phase.html
- julia/plots/mbh_test_1_phase.html
- julia/plots/mbh_test_2_phase.html
- julia/plots/mbh_test_5_phase.html
- julia/plots/mbh_test_3_phase.html
- julia/plots/plot_test_mission.html
- julia/plots/plot_test_mission_guess.html
- julia/plots/plot_test_path.html
@@ -27,8 +27,8 @@ unit-test-job:
- julia/plots/plot_test_planet_solar_system.html
- julia/test/missions/nlp_1_phase
- julia/test/missions/nlp_2_phase
- julia/test/missions/nlp_5_phase
- julia/test/missions/nlp_3_phase
- julia/test/missions/mbh_1_phase
- julia/test/missions/mbh_2_phase
- julia/test/missions/mbh_5_phase
expire_in: 10 weeks
- julia/test/missions/mbh_3_phase
expire_in: 52 weeks

View File

@@ -6,8 +6,10 @@ struct ΔVsize_Error <: Exception
end
Base.showerror(io::IO, e::ΔVsize_Error) = print(io, "ΔV was too big: $(e.ΔV)")
struct HitPlanet_Error <: Exception end
Base.showerror(io::IO, e::HitPlanet_Error) = print(io, "spacecraft hit the planet...")
struct HitPlanet_Error <: Exception
peri::Float64
end
Base.showerror(io::IO, e::HitPlanet_Error) = print(io, "spacecraft hit the planet..., periapsis: $(e.peri)")
struct Convergence_Error <: Exception end
Base.showerror(io::IO, e::Convergence_Error) = print(io, "NLP solver didn't converge...")

View File

@@ -51,10 +51,9 @@ function mission_guess( flybys::Vector{Body},
sc::Sc,
start_mass::Float64,
launch_window::Tuple{DateTime, DateTime},
max_C3_out::Float64,
max_C3::Float64,
max_v∞_in_mag::Float64,
latest_arrival::DateTime,
primary::Body=Sun )
latest_arrival::DateTime)
mission_guess = Bad_Mission("Keep trying to generate a guess")
while mission_guess == Bad_Mission("Keep trying to generate a guess")
# TODO: Eventually I can calculate n more intelligently
@@ -62,8 +61,9 @@ function mission_guess( flybys::Vector{Body},
# Determine the launch conditions
launch_date = rand(launch_window...)
launch_v∞_normalized = rand(-1:0.0001:1, 3)
launch_v∞ = rand(0:0.0001:max_C3_out) * launch_v∞_normalized/norm(launch_v∞_normalized)
launch_v∞_unit = rand(-1:0.0001:1, 3)
launch_v∞_normalized = launch_v∞_unit/norm(launch_v∞_unit)
launch_v∞ = max_C3 * rand() * launch_v∞_normalized
# Determine the leg lengths
num_phases = length(flybys) - 1
@@ -126,14 +126,14 @@ function mbh( flybys::Vector{Body},
max_C3::Float64,
max_v∞::Float64,
latest_arrival::DateTime,
cost_fn::Function,
primary::Body=Sun;
cost_fn::Function;
search_patience::Int=10_000,
drill_patience::Int=50,
verbose::Bool=false)
verbose::Bool=false,
test::Bool=false )
# Convenience Functions
random_guess() = mission_guess(flybys,sc,start_mass,launch_window,max_C3,max_v∞,latest_arrival,primary)
random_guess() = mission_guess(flybys,sc,start_mass,launch_window,max_C3,max_v∞,latest_arrival)
solve(g::Mission_Guess) = solve_mission(g, launch_window, latest_arrival)
cost(m::Mission) = cost_fn(m, max_C3, max_v∞)
cost(_::Nothing) = Inf
@@ -143,13 +143,16 @@ function mbh( flybys::Vector{Body},
drill_count = 0
archive = Vector{Mission}()
function log()
sct = search_count
dct = drill_count
lar = length(archive)
flyby_abbreviation = join([ f.name[1] for f in flybys ])
print("\r ")
print("\rsearch: $(search_count) drill: $(drill_count) archive: $(length(archive))\t")
print("\rMBH\t$(flyby_abbreviation)\tsearch: $(sct) drill: $(dct) archive: $(lar)\t")
end
# The main loop
x_current = nothing
if verbose println("Starting Monotonic Basin Hopper") end
while search_count < search_patience
# Intialize an x_star, if it doesn't converge, hop on to the next basin
@@ -188,6 +191,12 @@ function mbh( flybys::Vector{Body},
x_current in archive || push!(archive, x_current)
# If in test mode, we don't need to actually optimize. Just grab the first valid basin-best
if test
println()
return x_current, [ x_current ]
end
end
if verbose println() end

View File

@@ -2,23 +2,27 @@ using SNOW
export solve_mission
struct Result
converged::Bool
info::Symbol
sol::Mission_Guess
end
const pos_scale = ones(3)
# const vel_scale = 100. * ones(3)
const vel_scale = ones(3)
# const v∞_scale = norm(vel_scale)
const v∞_scale = 1.
const state_scale = [pos_scale; vel_scale ]
function constraint_bounds(guess::Mission_Guess)
low_constraint = Vector{Float64}()
high_constraint = Vector{Float64}()
for phase in guess.phases
state_constraint = [100., 100., 100., 0.005, 0.005, 0.005] .* state_scale
push!(low_constraint, (-1 * state_constraint)... )
push!(high_constraint, state_constraint... )
if phase != guess.phases[end]
push!(low_constraint, -100., -100., -100., -0.005, -0.005, -0.005, -30., 100.)
push!(high_constraint, 100., 100., 100., 0.005, 0.005, 0.005, 30., 100_000.)
push!(low_constraint, -0.005*v∞_scale, 100.)
push!(high_constraint, 0.005*v∞_scale, 1e7)
else
push!(low_constraint, -100., -100., -100., 0.)
push!(high_constraint, 100., 100., 100., guess.start_mass - guess.sc.dry_mass)
push!(low_constraint, 0.)
push!(high_constraint, guess.start_mass - guess.sc.dry_mass)
end
end
return low_constraint, high_constraint
@@ -33,7 +37,7 @@ guess otherwise
function solve_mission( guess::Mission_Guess,
launch_window::Tuple{DateTime,DateTime},
latest_arrival::DateTime;
tol=1e-10,
tol=1e-12,
verbose::Bool=false,
print_level=0 )
@@ -45,64 +49,71 @@ function solve_mission( guess::Mission_Guess,
# And our NLP
function optimizer!(g,x)
# Establish initial conditions
mass = guess.start_mass
v∞_out = x[2:4]
current_planet = Earth
launch_date = Dates.unix2datetime(x[1])
time = utc2et(Dates.format(launch_date,"yyyy-mm-ddTHH:MM:SS"))
start = state(current_planet, time, v∞_out, mass)
start = state(current_planet, time, v∞_out, guess.start_mass)
# Now, for each phase we must require:
# - That the ending state matches (unless final leg)
# - That the ending state matches (all legs)
# - That the v∞_out == v∞_in (unless final leg)
# - That the minimum height is acceptable (unless final leg)
# - That the ending position matches (if final leg)
# - That the ending mass is acceptable (if final leg)
i = 0
try
for flyby in flybys
# Get the values from the vector
phase_params = x[ 5 + (3n+7) * i : 5 + (3n+7) * (i+1) - 1 ]
v∞_in = phase_params[1:3]
v∞_out = phase_params[4:6]
tof = phase_params[7]
thrusts = reshape(phase_params[8:end], (n,3))
# Propagate
final = prop(thrusts, start, guess.sc, tof)[2]
current_planet = flyby
time += tof
goal = state(current_planet, time, v∞_in)
final = prop(reshape(thrusts, (n,3)), start, guess.sc, tof)[2]
goal = state(current_planet, time, v∞_in)[1:6]
start = state(current_planet, time, v∞_out, final[7])
# Do Checks
g[1+8i:6+8i] .= (final[1:6] .- goal[1:6]) .* state_scale
if flyby != flybys[end]
g[1+8i:6+8i] .= (final[1:6] .- goal[1:6]) .* [1., 1., 1., 10_000., 10_000., 10_000.]
g[7+8i] = (norm(v∞_out) - norm(v∞_in)) * 10_000.
g[7+8i] = (norm(v∞_out) - norm(v∞_in)) * v∞_scale
δ = acos( ( v∞_in v∞_out ) / ( norm(v∞_in) * norm(v∞_out) ) )
g[8+8i] = (current_planet.μ/(v∞_in v∞_in)) * ( 1/sin(δ/2) - 1 ) - current_planet.r
else
g[8*(length(flybys)-1)+1:8*(length(flybys)-1)+3] .= final[1:3] .- goal[1:3]
g[8*(length(flybys)-1)+4] = final[7] - guess.sc.dry_mass
g[8*(length(flybys)-1)+7] = final[7] - guess.sc.dry_mass
end
start = state(current_planet, time, v∞_out, final[7])
mass = final[7]
i += 1
end
return 1.0
catch e
if isa(e,LaGuerreConway_Error)
g[1:8*(length(flybys)-1)+4] .= 1e10
g[1:8*(length(flybys)-1)+7] .= 1e10
return 1e10
else
rethrow()
end
end
end
max_time = Dates.datetime2unix(latest_arrival) - Dates.datetime2unix(launch_window[1])
lower_x = lowest_mission_vector(launch_window, length(guess.phases), n)
upper_x = highest_mission_vector(launch_window, max_time, length(guess.phases), n)
num_constraints = 8*(length(guess.phases)-1) + 4
num_constraints = 8*(length(guess.phases)-1) + 7
g_low, g_high = constraint_bounds(guess)
ipopt_options = Dict("constr_viol_tol" => tol,
"acceptable_constr_viol_tol" => 100tol,
"bound_relax_factor" => 0.,
"max_iter" => 100_000,
"max_cpu_time" => 60.,
"max_cpu_time" => 5. * length(guess.phases),
"print_level" => print_level)
options = Options(solver=IPOPT(ipopt_options), derivatives=ForwardFD())

View File

@@ -24,7 +24,7 @@ function prop_one(ΔV_unit::Vector{<:Real},
ΔV = max_ΔV(craft.duty_cycle, craft.num_thrusters, craft.max_thrust, time, 0., state[7]) * ΔV_unit
halfway = laguerre_conway(state, time/2, primary) + [zeros(3); ΔV]
final = laguerre_conway(halfway, time/2, primary)
return [final; state[7] - craft.mass_flow_rate*norm(ΔV_unit)*time]
return [final; state[7] - mfr(craft)*norm(ΔV_unit)*time]
end

View File

@@ -25,7 +25,7 @@ function mass_consumption(sc::Sc, phase::Phase)
for i in 1:size(phase.thrust_profile,1)
weighted_thrusting_time += norm(phase.thrust_profile[i,:]) * phase.tof/n
end
return weighted_thrusting_time*sc.mass_flow_rate
return weighted_thrusting_time*mfr(sc)
end
struct Mission_Guess
@@ -133,45 +133,82 @@ function Mission(sc::Sc, mass::Float64, date::DateTime, v∞::Vector{Float64}, p
force=false)
# First do some checks to make sure that it's valid
if !force
time = date
time = utc2et(Dates.format(date,"yyyy-mm-ddTHH:MM:SS"))
current_planet = Earth
start = state(current_planet, time, v∞, mass)
for phase in phases
#Propagate
final = prop(phase.thrust_profile, start, sc, phase.tof)[2]
mass = final[7]
mass > sc.dry_mass || throw(Mass_Error(mass - mass_used))
current_planet = phase.planet
time += Dates.Second(floor(phase.tof))
start = state(current_planet, time, phase.v∞_out, mass)
p_pos = start[1:3]
abs(norm(final[1:3] - p_pos)) < 30_000. || throw(Planet_Match_Error(final[1:3], p_pos))
v∞_in, v∞_out = phase.v∞_in, phase.v∞_out
time += phase.tof
goal = state(current_planet, time, phase.v∞_in)
start = state(current_planet, time, phase.v∞_out, final[7])
# Perform checks
# Check that the sc actually makes it to the goal state
abs(norm(final[1:3] - goal[1:3])) < 3e6 || throw(Planet_Match_Error(final[1:3], goal[1:3]))
abs(norm(final[4:6] - goal[4:6])) < 3e-4 || throw(Planet_Match_Error(final[4:6], goal[4:6]))
if phase != phases[end]
abs(norm(v∞_in) - norm(v∞_out)) < 0.005 || throw(V∞_Error(v∞_in, v∞_out))
δ = acos( ( v∞_in v∞_out ) / ( norm(v∞_in) * norm(v∞_out) ) )
periapsis = (phase.planet.μ/(v∞_in v∞_in)) * ( 1/sin(δ/2) - 1 )
periapsis > 1.1phase.planet.r || throw(HitPlanet_Error())
# Check that the v∞s match
abs(norm(phase.v∞_in) - norm(phase.v∞_out)) < 0.01 || throw(V∞_Error(phase.v∞_in, phase.v∞_out))
# Check that the sc doesn't hit the planet
δ = acos( ( phase.v∞_in phase.v∞_out ) / ( norm(phase.v∞_in) * norm(phase.v∞_out) ) )
periapsis = (current_planet.μ/(phase.v∞_in phase.v∞_in)) * ( 1/sin(δ/2) - 1 ) - current_planet.r
periapsis > 90. || throw(HitPlanet_Error(periapsis))
# Check that the spacecraft never thrusted more than 100%
for ΔV in phase.thrust_profile
abs(ΔV) <= 1.0 || throw(ΔVsize_Error(ΔV))
end
end
end
end
Mission(sc, mass, date, v∞, phases, true)
m = Mission(sc, mass, date, v∞, phases, true)
# Check that the fuel never runs out
mass = prop(m)[7]
mass > sc.dry_mass || throw(Mass_Error(mass))
return m
end
function Mission(x::Vector{Float64}, sc::Sc, mass::Float64, flybys::Vector{Body})
# Variable mission params
launch_date = Dates.unix2datetime(x[1])
launch_v∞ = x[2:4]
# Try to intelligently determine n
three_n = ((length(x)-4)/length(flybys)) - 7
three_n % 3 == 0 || throw(Mission_Creation_Error(three_n))
n::Int = three_n/3
# Build the phases
i = 0
phases = Vector{Phase}()
for flyby in flybys
phase_params = x[ 5 + (3n+7) * i : 5 + (3n+7) * (i+1) - 1 ]
v∞_in = phase_params[1:3]
v∞_out = phase_params[4:6]
tof = phase_params[7]
thrusts = reshape(phase_params[8:end], (n,3))
push!(phases, Phase(flyby, v∞_in, v∞_out, tof, thrusts))
i += 1
end
return Mission(sc, mass, launch_date, launch_v∞, phases)
end
"""
BE CAREFUL!! This just makes a guess converged, whether true or not
"""
function Mission(g::Mission_Guess)
println("Skipping checks...")
return Mission(g.sc, g.start_mass, g.launch_date, g.launch_v∞, g.phases, force=true)
end
function Mission(x::Vector{Float64}, sc::Sc, mass::Float64, flybys::Vector{Body})
guess = Mission_Guess(x, sc, mass, flybys::Vector{Body})
return Mission(guess)
end
struct Bad_Mission
message::String
converged::Bool
@@ -181,23 +218,26 @@ Bad_Mission(s::Symbol) = Bad_Mission(String(s),false)
function Base.write(io::IO, m::Mission)
write(io, m.sc)
write(io, "Launch Mass: $(m.start_mass)\n")
write(io, "Launch Mass: $(m.start_mass) kg\n")
write(io, "Launch Date: $(m.launch_date)\n")
write(io, "Launch V∞: $(m.launch_v∞)\n")
write(io, "Launch V∞: $(m.launch_v∞) km/s\n")
time = m.launch_date
i = 1
for phase in m.phases
time += Dates.Second(floor(phase.tof))
write(io, "Phase $(i):\n")
write(io, "\tPlanet: $(phase.planet.name)\n")
write(io, "\tV∞_in: $(phase.v∞_in)\n")
write(io, "\tV∞_out: $(phase.v∞_out)\n")
write(io, "\ttime of flight: $(phase.tof)\n")
write(io, "\tthrust profile: $(phase.thrust_profile)\n")
write(io, "\tV∞_in: $(phase.v∞_in) km/s\n")
write(io, "\tV∞_out: $(phase.v∞_out) km/s\n")
write(io, "\ttime of flight: $(phase.tof) seconds\n")
write(io, "\tarrival date: $(time)\n")
write(io, "\tthrust profile: $(phase.thrust_profile) %\n")
i += 1
end
write(io, "\n")
write(io, "Mass Used: $(m.start_mass - prop(m)[7])\n")
write(io, "Launch C3: $(m.launch_v∞ m.launch_v∞)\n")
write(io, "||V∞_in||: $(norm(m.phases[end].v∞_in))\n")
write(io, "Mass Used: $(m.start_mass - prop(m)[7]) kg\n")
write(io, "Launch C3: $(m.launch_v∞ m.launch_v∞) km²/s²\n")
write(io, "||V∞_in||: $(norm(m.phases[end].v∞_in)) km/s\n")
end
function store(m::Union{Mission, Mission_Guess}, filename::AbstractString)

View File

@@ -1,24 +1,26 @@
export Sc, test_sc, bepi, no_thrust
export Sc, test_sc, bepi, no_thrust, mfr
mutable struct Sc
name::AbstractString
dry_mass::Float64
mass_flow_rate::Float64
isp::Float64
max_thrust::Float64
num_thrusters::Int
duty_cycle::Float64
end
mfr(sc::Sc) = sc.num_thrusters * sc.max_thrust / (sc.isp*0.00981)
function Base.write(io::IO, sc::Sc)
write(io, "Spacecraft: $(sc.name)\n")
write(io, "\tdry_mass: $(sc.dry_mass)\n")
write(io, "\tmass_flow_rate: $(sc.mass_flow_rate)\n")
write(io, "\tmax_thrust: $(sc.max_thrust)\n")
write(io, "\tdry_mass: $(sc.dry_mass) kg\n")
write(io, "\tspecific impulse: $(sc.isp) kg/s\n")
write(io, "\tmax_thrust: $(sc.max_thrust) kN\n")
write(io, "\tnum_thrusters: $(sc.num_thrusters)\n")
write(io, "\tduty_cycle: $(sc.duty_cycle)\n")
end
const test_sc = Sc("test", 8000., 0.00025/(2000*0.00981), 0.00025, 50, 0.9)
const bepi = Sc("bepi", 2000., 2*0.00025/(2800*0.00981), 0.00025, 2, 0.9)
const no_thrust = Sc("no thrust", 0., 0.01, 0., 0, 0.)
const test_sc = Sc("test", 8000., 2000., 0.0005, 50, 0.9)
const bepi = Sc("bepi", 2000., 2800., 0.0005, 2, 0.9)
const no_thrust = Sc("no thrust", 10., 2000., 0., 0, 0.)

View File

@@ -11,53 +11,32 @@
norm_mass = (m.start_mass - prop(m)[7]) / m.start_mass
norm_C3 = ( m.launch_v∞ m.launch_v∞ ) / C3
norm_v∞ = norm(m.phases[end].v∞_in) / v∞
return 3norm_mass + norm_C3 + norm_v∞
return norm_mass + norm_C3 + norm_v∞
end
# Mission Parameters that won't change (they're very lenient)
sc, fuel = bepi, 3_600.
c3, v∞ = 100., 20.
sc, fuel = bepi, 2_000.
max_c3, max_v∞ = 100., 20.
launch_window = DateTime(2022,1,1), DateTime(2024,12,25)
latest_arrival = DateTime(2034,12,25)
# Convenience function for these tests
Thesis.mbh(fbs, lw, la, sp, dp) = mbh(fbs, sc, fuel, lw, c3, v∞, la, easy_cost,
search_patience=sp, drill_patience=dp, verbose=true)
Thesis.mbh(fbs) = mbh(fbs, sc, sc.dry_mass + fuel, launch_window, max_c3, max_v∞, latest_arrival,
easy_cost, search_patience=500, drill_patience=20, verbose=true, test=true)
function log(m::Mission, archive::Vector{Mission})
p = plot(m, title="MBH Test Solution")
savefig(p,"../plots/mbh_test_$(length(m.phases))_phase.html")
store(m, "missions/mbh_$(length(m.phases))_phase_best")
store(archive, "missions/mbh_$(length(m.phases))_phase_archive")
end
# Again, we're going to test a simple case first
# This one seems to converge really easily, so we don't search much
# For all of these, this is a test, not actual optimization, so we don't drill much either
launch_window = DateTime(1992,11,1), DateTime(1992,12,1)
latest_arrival = DateTime(1993,6,1)
planets = [ Earth, Venus ]
best, archive = mbh(planets, launch_window, latest_arrival, 10, 5)
@test typeof(best) == Mission
p = plot(best, title="MBH Test Solution")
savefig(p,"../plots/mbh_test_1_phase.html")
store(best, "missions/mbh_1_phase_best")
store(archive, "missions/mbh_1_phase_archive")
# Start simple and get more complex
tests = [Earth, Jupiter], [Earth, Mars, Jupiter], [Earth, Mars, Mars, Jupiter]
# Now for a more complicated two-phase mission, with a bigger date range
# This is known to have a solution though
planets = [Earth, Venus, Mars]
launch_window = DateTime(2021,6,1), DateTime(2022,6,1)
latest_arrival = DateTime(2024,1,1)
best, archive = mbh(planets, launch_window, latest_arrival, 20, 5)
@test typeof(best) == Mission
p = plot(best, title="MBH Test Solution")
savefig(p,"../plots/mbh_test_2_phase.html")
store(best, "missions/mbh_2_phase_best")
store(archive, "missions/mbh_2_phase_archive")
# Now for a real stress test - the old ten-year, 5-phase Jovian mission
# This is known to have a solution... tough to find though
# I'll give it a tight launch window to be nice
planets = [Earth, Venus, Earth, Mars, Earth, Jupiter]
launch_window = DateTime(2023,4,1), DateTime(2023,7,1)
latest_arrival = DateTime(2033,1,1)
best, archive = mbh(planets, launch_window, latest_arrival, 200, 10)
@test typeof(best) == Mission
p = plot(best, title="MBH Test Solution")
savefig(p,"../plots/mbh_test_5_phase.html")
store(best, "missions/mbh_5_phase_best")
store(archive, "missions/mbh_5_phase_archive")
for planets in tests
best, archive = mbh(planets)
@test typeof(best) == Mission
log(best, archive)
end
end

View File

@@ -46,29 +46,30 @@
store(m, "missions/nlp_2_phase")
# Here is the final, most complicated, trajectory to test
flybys = [Earth, Venus, Earth, Mars, Earth, Jupiter]
launch_window = DateTime(2023,1,1), DateTime(2024,1,1)
latest_arrival = DateTime(2031,1,1)
dates = [DateTime(2023,5,23),
DateTime(2023,10,21),
DateTime(2024,8,24),
DateTime(2025,2,13),
DateTime(2026,11,22),
DateTime(2032,1,1)]
phases = Vector{Phase}()
launch_v∞, _, tof1 = Thesis.lamberts(flybys[1], flybys[2], dates[1], dates[2])
for i in 1:length(dates)-2
v∞_out1, v∞_in1, tof1 = Thesis.lamberts(flybys[i], flybys[i+1], dates[i], dates[i+1])
v∞_out2, v∞_in2, tof2 = Thesis.lamberts(flybys[i+1], flybys[i+2], dates[i+1], dates[i+2])
push!(phases, Phase(flybys[i+1], 1.02v∞_in1, 0.98v∞_out2, 1.02tof1, 0.02*ones(20,3)))
end
v∞_out, v∞_in, tof = Thesis.lamberts(flybys[end-1], flybys[end], dates[end-1], dates[end])
push!(phases, Phase(flybys[end], v∞_in, v∞_in, tof, 0.01*ones(20,3)))
guess = Mission_Guess(bepi, 3_600., dates[1], launch_v∞, phases)
m = solve_mission(guess, launch_window, latest_arrival, verbose=true)
@test typeof(m) == Mission
p = plot(m, title="NLP Test Solution (5 Phases)")
savefig(p,"../plots/nlp_test_5_phase.html")
store(m, "missions/nlp_5_phase")
# Ignoring for now as the initial guess makes the test take too long to converge with mbh settings
# flybys = [Earth, Venus, Earth, Mars, Earth, Jupiter]
# launch_window = DateTime(2023,1,1), DateTime(2024,1,1)
# latest_arrival = DateTime(2031,1,1)
# dates = [DateTime(2023,5,23),
# DateTime(2023,10,21),
# DateTime(2024,8,24),
# DateTime(2025,2,13),
# DateTime(2026,11,22),
# DateTime(2032,1,1)]
# phases = Vector{Phase}()
# launch_v∞, _, tof1 = Thesis.lamberts(flybys[1], flybys[2], dates[1], dates[2])
# for i in 1:length(dates)-2
# v∞_out1, v∞_in1, tof1 = Thesis.lamberts(flybys[i], flybys[i+1], dates[i], dates[i+1])
# v∞_out2, v∞_in2, tof2 = Thesis.lamberts(flybys[i+1], flybys[i+2], dates[i+1], dates[i+2])
# push!(phases, Phase(flybys[i+1], 1.02v∞_in1, 0.98v∞_out2, 1.02tof1, 0.02*ones(20,3)))
# end
# v∞_out, v∞_in, tof = Thesis.lamberts(flybys[end-1], flybys[end], dates[end-1], dates[end])
# push!(phases, Phase(flybys[end], v∞_in, v∞_in, tof, 0.01*ones(20,3)))
# guess = Mission_Guess(bepi, 3_600., dates[1], launch_v∞, phases)
# m = solve_mission(guess, launch_window, latest_arrival, verbose=true)
# @test typeof(m) == Mission
# p = plot(m, title="NLP Test Solution (5 Phases)")
# savefig(p,"../plots/nlp_test_5_phase.html")
# store(m, "missions/nlp_5_phase")
end

View File

@@ -16,6 +16,6 @@
# Test that mass is reduced properly
state = prop_one([1., 0., 0.], start, bepi, stepsize)
@test state[7] == start_mass - bepi.mass_flow_rate*stepsize
@test state[7] == start_mass - mfr(bepi)*stepsize
end

View File

@@ -0,0 +1,25 @@
missions/mbh_1_phase_archive
---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2022-03-06T01:59:18.919
Launch V∞: [-1.1356413222408823, -4.788069365262547, 2.7000635369246] km/s
Phase 1:
Planet: Jupiter
V∞_in: [0.606990343209641, 4.407893426470118, 0.9244860672598548] km/s
V∞_out: [1.2183577357736917, -3.9826645468861925, 2.3687041043301797] km/s
time of flight: 1.194581479969281e8 seconds
arrival date: 2025-12-17T16:48:25.919
thrust profile: [0.2047491180715187 -0.37019469041025893 -0.10453549807669095; 0.4301220091095493 -0.12441963747750297 -0.006770873233015344; 0.43924678986775806 0.1285374874465679 -0.07977271709638968; 0.42297198253230855 0.31380495510861767 -0.07919431310255642; 0.3614168205981836 0.39602843825488454 -0.05704653521018108; 0.2902414389460733 0.4053822027059241 -0.02821739799974643; 0.22430933743909634 0.43938508487263367 -0.00930631106824115; 0.13232647607691467 0.4188738913138919 0.007567873851875307; 0.054141732819826004 0.39551671259361465 0.010428460581952593; -0.012077434841877642 0.3792721276901153 0.0231446451624962; -0.042939891420425445 0.367704668401295 0.04590678245879779; -0.06832185713480624 0.39461571349444186 0.06647905984921844; -0.06871098668169624 0.3943544952193675 0.07996958584990013; -0.043122107121887 0.3236627227698529 0.06434542295394348; 0.0002258095938542581 0.3100245138960139 0.08315646808686966; 0.024384212213495196 0.1820219401839858 0.049878939508001104; 0.014803074731020839 0.09226807883171781 0.03031339291970727; 0.04882521682144194 0.07182823075104046 0.030435679401299; 0.07679479397181303 0.04220157719360384 0.024296177838332548; 0.07770574743624227 0.006328096858830944 0.01324607153162614] %
Mass Used: 1527.1786215537763 kg
Launch C3: 31.505632562776483 km²/s²
||V∞_in||: 4.544517160758207 km/s

View File

@@ -0,0 +1,22 @@
missions/mbh_1_phase_best---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2022-03-06T01:59:18.919
Launch V∞: [-1.1356413222408823, -4.788069365262547, 2.7000635369246] km/s
Phase 1:
Planet: Jupiter
V∞_in: [0.606990343209641, 4.407893426470118, 0.9244860672598548] km/s
V∞_out: [1.2183577357736917, -3.9826645468861925, 2.3687041043301797] km/s
time of flight: 1.194581479969281e8 seconds
arrival date: 2025-12-17T16:48:25.919
thrust profile: [0.2047491180715187 -0.37019469041025893 -0.10453549807669095; 0.4301220091095493 -0.12441963747750297 -0.006770873233015344; 0.43924678986775806 0.1285374874465679 -0.07977271709638968; 0.42297198253230855 0.31380495510861767 -0.07919431310255642; 0.3614168205981836 0.39602843825488454 -0.05704653521018108; 0.2902414389460733 0.4053822027059241 -0.02821739799974643; 0.22430933743909634 0.43938508487263367 -0.00930631106824115; 0.13232647607691467 0.4188738913138919 0.007567873851875307; 0.054141732819826004 0.39551671259361465 0.010428460581952593; -0.012077434841877642 0.3792721276901153 0.0231446451624962; -0.042939891420425445 0.367704668401295 0.04590678245879779; -0.06832185713480624 0.39461571349444186 0.06647905984921844; -0.06871098668169624 0.3943544952193675 0.07996958584990013; -0.043122107121887 0.3236627227698529 0.06434542295394348; 0.0002258095938542581 0.3100245138960139 0.08315646808686966; 0.024384212213495196 0.1820219401839858 0.049878939508001104; 0.014803074731020839 0.09226807883171781 0.03031339291970727; 0.04882521682144194 0.07182823075104046 0.030435679401299; 0.07679479397181303 0.04220157719360384 0.024296177838332548; 0.07770574743624227 0.006328096858830944 0.01324607153162614] %
Mass Used: 1527.1786215537763 kg
Launch C3: 31.505632562776483 km²/s²
||V∞_in||: 4.544517160758207 km/s

View File

@@ -0,0 +1,32 @@
missions/mbh_2_phase_archive
---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2024-10-23T01:57:04.645
Launch V∞: [-2.756658080311089, 5.4981544960382, 1.2354164981485998] km/s
Phase 1:
Planet: Mars
V∞_in: [-6.97287754424969, 6.962353258098406, 0.0607051347526173] km/s
V∞_out: [-6.685432199487985, 6.971638091675174, 1.9494641006878624] km/s
time of flight: 1.16503060035366e7 seconds
arrival date: 2025-03-06T22:08:50.645
thrust profile: [0.0007372127333915423 -0.0014732374607987512 -0.0001436849126190515; 0.0015863792714624523 -0.0020954380857885 -3.9222886974518435e-5; 0.0028749200111876953 -0.0029070168117665577 -6.834239668653902e-5; 0.00400664873911032 -0.0036102638724926027 -0.0011534186183358992; 0.003002315886422529 -0.004155862034974375 -0.0019852589032208707; 0.003937369046006624 -0.003292245456470277 -0.00033744520390480056; 0.004022116761090881 -0.0014747882735426667 0.0009925828352185433; 0.0028363477848649932 -0.0006118542455278574 0.0011994525100711487; 0.0010235706279971136 -0.0007807187007764947 0.0007198591227898102; 1.9987192194599394e-5 -0.0011241077612402291 0.00021045682481486607; 0.0007623347096515055 -0.001326552903003275 0.00047334230828265155; -0.0019176703329012404 -0.003664068924494901 -0.0007926699243678642; -0.0034278750339086722 -0.005605775872095162 -0.001640142456026017; -0.003879314794056328 -0.007180423427345347 -0.0021627562917433257; -0.00457576381748711 -0.009085671380846889 -0.0027950147837868416; -0.00496447070432947 -0.011003150581070032 -0.0033564467543545713; -0.005782291476516903 -0.013187396198780097 -0.0040189185350814815; -0.005773642750057005 -0.015126117254672524 -0.00448918463406626; -0.006039589107819558 -0.017206354330223952 -0.00500209304716878; -0.0059712529665976325 -0.019287648124267687 -0.005416379053301935] %
Phase 2:
Planet: Jupiter
V∞_in: [-2.501340292332268, 1.6226626635888894, -0.637397317769162] km/s
V∞_out: [-0.39137693018363046, -0.6158439855618857, -0.6179155724361174] km/s
time of flight: 1.634809557285843e8 seconds
arrival date: 2030-05-12T01:31:25.645
thrust profile: [-0.26518247245545706 -0.09071259046697609 -0.06169797323040991; -0.08236380894068383 -0.03242059745452859 -0.0437757891207446; -0.0040559771435419905 -0.006989709543848695 -0.015529763525228361; 0.007774341207249076 -0.008985090840076109 -0.01850530400329914; 0.0012813370577481318 0.0011348539591867289 -0.0155496567606658; -0.007785092497807246 0.05338536306193304 0.019317990985589086; -0.0009728321119441025 0.08815185628620617 0.03949499622566367; 0.04305174658529387 0.2568399121830553 0.055654966170718544; -0.2720351356694226 0.46384420969664153 0.03864258122986833; -0.4887396982520584 0.11774562801231306 0.0008189965640148597; -0.3013298404095551 -0.13014726189273046 -0.05096356023658363; -0.13491430696546597 -0.11875243254479609 -0.04906685950011366; -0.07101074561201698 -0.09571411749724586 -0.04115396467769674; -0.03429442666375736 -0.08608492077264626 -0.032404742164699976; -0.005411454576501817 -0.08226389770332371 -0.021813716609185803; 0.01648826033313751 -0.08220086232228146 0.011531267107186598; -0.0514818142417244 -0.08481514714903496 -0.00037084018174361565; 0.04041503097410506 -0.045097405358868914 -0.044059162529628035; 0.22484925497674185 -0.023660465666373143 -0.05114459775451727; 0.4409715896106006 -0.006503526378072674 -0.04283633117576671] %
Mass Used: 1093.7042742756403 kg
Launch C3: 39.355120557947245 km²/s²
||V∞_in||: 3.0489363257617543 km/s

View File

@@ -0,0 +1,29 @@
missions/mbh_2_phase_best---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2024-10-23T01:57:04.645
Launch V∞: [-2.756658080311089, 5.4981544960382, 1.2354164981485998] km/s
Phase 1:
Planet: Mars
V∞_in: [-6.97287754424969, 6.962353258098406, 0.0607051347526173] km/s
V∞_out: [-6.685432199487985, 6.971638091675174, 1.9494641006878624] km/s
time of flight: 1.16503060035366e7 seconds
arrival date: 2025-03-06T22:08:50.645
thrust profile: [0.0007372127333915423 -0.0014732374607987512 -0.0001436849126190515; 0.0015863792714624523 -0.0020954380857885 -3.9222886974518435e-5; 0.0028749200111876953 -0.0029070168117665577 -6.834239668653902e-5; 0.00400664873911032 -0.0036102638724926027 -0.0011534186183358992; 0.003002315886422529 -0.004155862034974375 -0.0019852589032208707; 0.003937369046006624 -0.003292245456470277 -0.00033744520390480056; 0.004022116761090881 -0.0014747882735426667 0.0009925828352185433; 0.0028363477848649932 -0.0006118542455278574 0.0011994525100711487; 0.0010235706279971136 -0.0007807187007764947 0.0007198591227898102; 1.9987192194599394e-5 -0.0011241077612402291 0.00021045682481486607; 0.0007623347096515055 -0.001326552903003275 0.00047334230828265155; -0.0019176703329012404 -0.003664068924494901 -0.0007926699243678642; -0.0034278750339086722 -0.005605775872095162 -0.001640142456026017; -0.003879314794056328 -0.007180423427345347 -0.0021627562917433257; -0.00457576381748711 -0.009085671380846889 -0.0027950147837868416; -0.00496447070432947 -0.011003150581070032 -0.0033564467543545713; -0.005782291476516903 -0.013187396198780097 -0.0040189185350814815; -0.005773642750057005 -0.015126117254672524 -0.00448918463406626; -0.006039589107819558 -0.017206354330223952 -0.00500209304716878; -0.0059712529665976325 -0.019287648124267687 -0.005416379053301935] %
Phase 2:
Planet: Jupiter
V∞_in: [-2.501340292332268, 1.6226626635888894, -0.637397317769162] km/s
V∞_out: [-0.39137693018363046, -0.6158439855618857, -0.6179155724361174] km/s
time of flight: 1.634809557285843e8 seconds
arrival date: 2030-05-12T01:31:25.645
thrust profile: [-0.26518247245545706 -0.09071259046697609 -0.06169797323040991; -0.08236380894068383 -0.03242059745452859 -0.0437757891207446; -0.0040559771435419905 -0.006989709543848695 -0.015529763525228361; 0.007774341207249076 -0.008985090840076109 -0.01850530400329914; 0.0012813370577481318 0.0011348539591867289 -0.0155496567606658; -0.007785092497807246 0.05338536306193304 0.019317990985589086; -0.0009728321119441025 0.08815185628620617 0.03949499622566367; 0.04305174658529387 0.2568399121830553 0.055654966170718544; -0.2720351356694226 0.46384420969664153 0.03864258122986833; -0.4887396982520584 0.11774562801231306 0.0008189965640148597; -0.3013298404095551 -0.13014726189273046 -0.05096356023658363; -0.13491430696546597 -0.11875243254479609 -0.04906685950011366; -0.07101074561201698 -0.09571411749724586 -0.04115396467769674; -0.03429442666375736 -0.08608492077264626 -0.032404742164699976; -0.005411454576501817 -0.08226389770332371 -0.021813716609185803; 0.01648826033313751 -0.08220086232228146 0.011531267107186598; -0.0514818142417244 -0.08481514714903496 -0.00037084018174361565; 0.04041503097410506 -0.045097405358868914 -0.044059162529628035; 0.22484925497674185 -0.023660465666373143 -0.05114459775451727; 0.4409715896106006 -0.006503526378072674 -0.04283633117576671] %
Mass Used: 1093.7042742756403 kg
Launch C3: 39.355120557947245 km²/s²
||V∞_in||: 3.0489363257617543 km/s

View File

@@ -0,0 +1,39 @@
missions/mbh_3_phase_archive
---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2023-12-30T19:31:02.262
Launch V∞: [-2.336381310504302, 0.6611197671240502, 0.515368333819228] km/s
Phase 1:
Planet: Mars
V∞_in: [-0.11272517963886579, -0.16302256252244926, 0.06378439538637051] km/s
V∞_out: [0.002792969304201863, -0.057484436403284406, -0.20003704249209486] km/s
time of flight: 1.2592311667092939e8 seconds
arrival date: 2027-12-27T06:09:38.262
thrust profile: [-0.07359577344803886 -0.07004965985121933 -0.007807619171823321; 0.043716940115367385 -0.09696906663391322 -0.021035291284121637; 0.15053759331935357 -0.05794230926871806 -0.033866112736962925; 0.20610926006237767 0.0511534113841768 -0.013824814864455921; 0.14247998895987612 0.14895648069233977 0.016465691502639254; 0.033899970899824765 0.1413760732743736 0.033765822767487075; -0.031462663876756475 0.08723970741502689 0.022622665389646173; -0.060921211293504925 -0.026583703906071718 0.0072028126267209116; 0.05521899481152132 -0.05572354743233738 -0.03803266067329364; 0.06591230227849648 -0.0432693147820068 -0.028739472872060776; 0.16269932997793765 -0.016462438801152977 -0.026172416179982023; 0.20013411233717715 0.06074950755811254 0.022311277118381843; 0.14518787703981562 0.12065447079680057 0.05879531725301626; 0.09613845629727286 0.10922616684423382 0.06199408068784226; 0.08625318486313252 0.06478405529977578 0.0023557163450004174; 0.045240171138954385 0.04567139475192793 -0.021769604477046758; 0.04592748677552667 0.060844875114399566 -0.035619737179444874; 0.0804407212683229 -0.03642329187878312 -0.05296002481971273; 0.21331847937323517 0.00896049803861686 -0.05753325446312421; 0.34299417343430333 0.12023007248386997 0.0322957005600654] %
Phase 2:
Planet: Mars
V∞_in: [-0.014005019530324568, 0.13244612304375988, 0.08290914548187793] km/s
V∞_out: [-0.02364353280263756, 0.15444781952015216, -0.014432031974666977] km/s
time of flight: 1.0032265935562963e7 seconds
arrival date: 2028-04-21T08:54:03.262
thrust profile: [-0.06468087317083572 0.01713477843818517 0.2072497145223751; -0.06817090268272546 0.022379474456103943 0.19523352237764163; -0.06466190699633262 0.0255932195152017 0.18504680757190148; -0.059342730861904634 0.029426412259887014 0.174021131351099; -0.054114404138384406 0.03235714045889413 0.16225743506965892; -0.04807653805996071 0.036042427078759764 0.1512460952152207; -0.04315764467216101 0.039938588900136185 0.1389467642307416; -0.038786939336882924 0.043008565514191716 0.12722354156375004; -0.03526577678074072 0.04925516219030345 0.11470911008101983; -0.03235044927513134 0.053149635505385665 0.10206946252525144; -0.03014670486994729 0.05684341793213379 0.0896246734207876; -0.028977404396851786 0.0652163530384282 0.07587210971138804; -0.027859643135747448 0.06761679131619418 0.06285226422798801; -0.02857790492958968 0.07811006965735094 0.04913666457443533; -0.02775839545031727 0.07678583628850277 0.035998823265238046; -0.028406280241582614 0.08254699374408436 0.022094948949750847; -0.029302358791746728 0.0852924409615851 0.008263056211369075; -0.030759783119304784 0.0935582591653256 -0.006356164301183838; -0.03225647939083259 0.09688810501349754 -0.020305695435992848; -0.03332559746608383 0.10297737446211802 -0.035147079795216106] %
Phase 3:
Planet: Jupiter
V∞_in: [-1.5533855349488477, -0.54933117824406, 0.1996303316277416] km/s
V∞_out: [-1.7570559978767255, 1.1363153583675671, -0.43717528976600273] km/s
time of flight: 1.4637789443152088e8 seconds
arrival date: 2032-12-10T13:25:37.262
thrust profile: [-0.6645141202842072 0.6423371395484379 0.013751042498263796; -0.6671395131717702 -0.09924157003588908 0.004659679865807528; -0.44003790930216125 -0.3664663119690856 0.010688442625863746; -0.18891454451890152 -0.313514318687638 0.015602936100725717; -0.07725712172807717 -0.2160815424379723 0.015975909063353555; -0.024837854243774205 -0.15122812373661867 0.013850214915260109; 0.003917627641656827 -0.1085248645279647 0.010371457271638237; 0.02201996644065442 -0.08454038372778747 0.009321989004990271; 0.03388845898003741 -0.06745670404324332 0.008856982967798533; 0.04309282117740803 -0.053386654501724744 0.008719256737668418; 0.05160359506780744 -0.04166179990240016 0.008149701990869269; 0.05175963695335609 -0.026857606206935496 0.007776339351354358; 0.038796656264694244 -0.008231506041670077 0.005319243332846338; 0.030477068690802474 -0.0005391678971376555 0.002805208510592914; 0.021902353489560968 0.007139818756776372 0.00129759746267181; 0.023229339517858272 0.009106625479845766 -0.0009346891747994962; 0.04577321246719308 -0.011464605937068278 0.004192845438408305; 0.017603006711693223 0.027784064222860144 -0.002885487605696617; 0.05029298986098882 0.03435916705436917 -0.002619919338002586; 0.12026613656214907 0.17439044082372335 -0.003745065383345971] %
Mass Used: 1755.9134038194406 kg
Launch C3: 6.161361494059565 km²/s²
||V∞_in||: 1.6597058874647421 km/s

View File

@@ -0,0 +1,36 @@
missions/mbh_3_phase_best---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 4000.0 kg
Launch Date: 2023-12-30T19:31:02.262
Launch V∞: [-2.336381310504302, 0.6611197671240502, 0.515368333819228] km/s
Phase 1:
Planet: Mars
V∞_in: [-0.11272517963886579, -0.16302256252244926, 0.06378439538637051] km/s
V∞_out: [0.002792969304201863, -0.057484436403284406, -0.20003704249209486] km/s
time of flight: 1.2592311667092939e8 seconds
arrival date: 2027-12-27T06:09:38.262
thrust profile: [-0.07359577344803886 -0.07004965985121933 -0.007807619171823321; 0.043716940115367385 -0.09696906663391322 -0.021035291284121637; 0.15053759331935357 -0.05794230926871806 -0.033866112736962925; 0.20610926006237767 0.0511534113841768 -0.013824814864455921; 0.14247998895987612 0.14895648069233977 0.016465691502639254; 0.033899970899824765 0.1413760732743736 0.033765822767487075; -0.031462663876756475 0.08723970741502689 0.022622665389646173; -0.060921211293504925 -0.026583703906071718 0.0072028126267209116; 0.05521899481152132 -0.05572354743233738 -0.03803266067329364; 0.06591230227849648 -0.0432693147820068 -0.028739472872060776; 0.16269932997793765 -0.016462438801152977 -0.026172416179982023; 0.20013411233717715 0.06074950755811254 0.022311277118381843; 0.14518787703981562 0.12065447079680057 0.05879531725301626; 0.09613845629727286 0.10922616684423382 0.06199408068784226; 0.08625318486313252 0.06478405529977578 0.0023557163450004174; 0.045240171138954385 0.04567139475192793 -0.021769604477046758; 0.04592748677552667 0.060844875114399566 -0.035619737179444874; 0.0804407212683229 -0.03642329187878312 -0.05296002481971273; 0.21331847937323517 0.00896049803861686 -0.05753325446312421; 0.34299417343430333 0.12023007248386997 0.0322957005600654] %
Phase 2:
Planet: Mars
V∞_in: [-0.014005019530324568, 0.13244612304375988, 0.08290914548187793] km/s
V∞_out: [-0.02364353280263756, 0.15444781952015216, -0.014432031974666977] km/s
time of flight: 1.0032265935562963e7 seconds
arrival date: 2028-04-21T08:54:03.262
thrust profile: [-0.06468087317083572 0.01713477843818517 0.2072497145223751; -0.06817090268272546 0.022379474456103943 0.19523352237764163; -0.06466190699633262 0.0255932195152017 0.18504680757190148; -0.059342730861904634 0.029426412259887014 0.174021131351099; -0.054114404138384406 0.03235714045889413 0.16225743506965892; -0.04807653805996071 0.036042427078759764 0.1512460952152207; -0.04315764467216101 0.039938588900136185 0.1389467642307416; -0.038786939336882924 0.043008565514191716 0.12722354156375004; -0.03526577678074072 0.04925516219030345 0.11470911008101983; -0.03235044927513134 0.053149635505385665 0.10206946252525144; -0.03014670486994729 0.05684341793213379 0.0896246734207876; -0.028977404396851786 0.0652163530384282 0.07587210971138804; -0.027859643135747448 0.06761679131619418 0.06285226422798801; -0.02857790492958968 0.07811006965735094 0.04913666457443533; -0.02775839545031727 0.07678583628850277 0.035998823265238046; -0.028406280241582614 0.08254699374408436 0.022094948949750847; -0.029302358791746728 0.0852924409615851 0.008263056211369075; -0.030759783119304784 0.0935582591653256 -0.006356164301183838; -0.03225647939083259 0.09688810501349754 -0.020305695435992848; -0.03332559746608383 0.10297737446211802 -0.035147079795216106] %
Phase 3:
Planet: Jupiter
V∞_in: [-1.5533855349488477, -0.54933117824406, 0.1996303316277416] km/s
V∞_out: [-1.7570559978767255, 1.1363153583675671, -0.43717528976600273] km/s
time of flight: 1.4637789443152088e8 seconds
arrival date: 2032-12-10T13:25:37.262
thrust profile: [-0.6645141202842072 0.6423371395484379 0.013751042498263796; -0.6671395131717702 -0.09924157003588908 0.004659679865807528; -0.44003790930216125 -0.3664663119690856 0.010688442625863746; -0.18891454451890152 -0.313514318687638 0.015602936100725717; -0.07725712172807717 -0.2160815424379723 0.015975909063353555; -0.024837854243774205 -0.15122812373661867 0.013850214915260109; 0.003917627641656827 -0.1085248645279647 0.010371457271638237; 0.02201996644065442 -0.08454038372778747 0.009321989004990271; 0.03388845898003741 -0.06745670404324332 0.008856982967798533; 0.04309282117740803 -0.053386654501724744 0.008719256737668418; 0.05160359506780744 -0.04166179990240016 0.008149701990869269; 0.05175963695335609 -0.026857606206935496 0.007776339351354358; 0.038796656264694244 -0.008231506041670077 0.005319243332846338; 0.030477068690802474 -0.0005391678971376555 0.002805208510592914; 0.021902353489560968 0.007139818756776372 0.00129759746267181; 0.023229339517858272 0.009106625479845766 -0.0009346891747994962; 0.04577321246719308 -0.011464605937068278 0.004192845438408305; 0.017603006711693223 0.027784064222860144 -0.002885487605696617; 0.05029298986098882 0.03435916705436917 -0.002619919338002586; 0.12026613656214907 0.17439044082372335 -0.003745065383345971] %
Mass Used: 1755.9134038194406 kg
Launch C3: 6.161361494059565 km²/s²
||V∞_in||: 1.6597058874647421 km/s

View File

@@ -0,0 +1,22 @@
missions/nlp_1_phase---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 3600.0 kg
Launch Date: 1992-11-12T00:00:00.013
Launch V∞: [9.695409643750917, 1.230412386785293, 1.5011804102426267] km/s
Phase 1:
Planet: Venus
V∞_in: [9.994449927209848, -4.805887921122601, -1.7920512221893674] km/s
V∞_out: [4.259960619082596, 0.11640502561369129, -0.5256309278562422] km/s
time of flight: 1.0342080020964487e7 seconds
arrival date: 1993-03-11T16:48:00.013
thrust profile: [-0.07885937833013125 0.22082346279052664 0.22422618119726967; -0.6387970581030095 0.0823441238202798 0.08742955630508423; -0.8174616778872149 0.032772077981831405 0.048108011372234014; -0.883356063802344 -0.009816430786569194 0.029466362717018645; -0.9090289869704303 -0.06412247350619477 0.01579427507721176; -0.9229025007601358 -0.1348848870891437 0.0038074996913229635; -0.9323419038216932 -0.22247834673542874 -0.007553280139873255; -0.9393524504557308 -0.3233146674906946 -0.018599372537661026; -0.9447442065007597 -0.4307195557715542 -0.02948583920082983; -0.948951862234041 -0.5355674747579858 -0.040180510105645155; -0.9522429476394983 -0.6288580191320197 -0.05048177408167433; -0.9547920892312391 -0.704185334520697 -0.060067918029030234; -0.9567196352746482 -0.7592160354782643 -0.06849167659927999; -0.9581161960060807 -0.79533985266094 -0.0750231011768658; -0.959058595284678 -0.8151694427669934 -0.07867130196153184; -0.959627487063727 -0.8196811744278104 -0.07803378433478286; -0.959931461581211 -0.8044527869739441 -0.07118021416582515; -0.9601423578460804 -0.7501732041729071 -0.05552220537456991; -0.9605351740691301 -0.596546633077274 -0.027695673262336473; -0.9614858974879196 -0.22563892811165903 0.016331234996720147] %
Mass Used: 386.3550491309211 kg
Launch C3: 97.76842542578919 km²/s²
||V∞_in||: 11.233745396832147 km/s

View File

@@ -0,0 +1,29 @@
missions/nlp_2_phase---------------------------
Spacecraft: bepi
dry_mass: 2000.0 kg
specific impulse: 2800.0 kg/s
max_thrust: 0.0005 kN
num_thrusters: 2
duty_cycle: 0.9
Launch Mass: 3600.0 kg
Launch Date: 2021-10-31T23:59:59.740
Launch V∞: [1.0519139174671255, -2.532396776578504, -2.3181056242189095] km/s
Phase 1:
Planet: Venus
V∞_in: [0.4221053576448278, -3.5275571377673485, 4.891092995284791] km/s
V∞_out: [2.663171797047433, -4.912541295851552, 2.3063442275330837] km/s
time of flight: 1.2614399648580924e7 seconds
arrival date: 2022-03-26T23:59:58.740
thrust profile: [0.07998955511503905 0.014645901175208607 0.032059542365265536; 0.061271963308267355 0.010496084457312739 0.06456227213436845; 0.03653858968490382 0.004095269984271039 0.08778809213169904; 0.012597606226571892 -0.0035843497513941024 0.10156429358711754; -0.007823696996985706 -0.012212563689391798 0.1092387978999297; -0.024470397395360978 -0.022164965343914263 0.11328387576041525; -0.03764018531138568 -0.03305106575614711 0.11485841832796724; -0.046956531921797474 -0.04462741732738438 0.1147527426828988; -0.052986295209290435 -0.056908842131396964 0.11331606017641183; -0.05501214840088177 -0.0698229298399496 0.11102391517980509; -0.0539274775951607 -0.08225923304281293 0.1080571865577752; -0.04900248855811753 -0.09498380663479362 0.10399629481809765; -0.040344197913873656 -0.10681215838405833 0.09912867572917736; -0.028118935327375093 -0.11715254048024237 0.09312311669260512; -0.012343877715426374 -0.12544654901191046 0.08544366039001013; 0.006110502843051679 -0.1305027433772816 0.07629177701281903; 0.026362754169644998 -0.13201279652190237 0.06480681138449274; 0.046333885834596335 -0.129332099528906 0.05156965147459962; 0.06457348912678001 -0.12274635759961078 0.036509818421423236; 0.07952353937438418 -0.11313097843352427 0.019798449229470383] %
Phase 2:
Planet: Mars
V∞_in: [3.880922081076609, -3.8756380279560982, -1.179545632109947] km/s
V∞_out: [-0.006991844594378784, 0.007675557473077985, 0.0017824029323501372] km/s
time of flight: 1.330560006563769e7 seconds
arrival date: 2022-08-27T23:59:58.740
thrust profile: [0.12305856757522188 -0.14464704712095547 -0.01690236351704525; 0.13429815673794188 -0.1195285218500703 -0.023483980378131736; 0.1396586011579744 -0.09516174490601491 -0.0293944316107087; 0.1405117586368446 -0.07304441529598331 -0.03420656443020225; 0.13837132835970684 -0.05371429903466249 -0.03776391678703145; 0.13446436956407476 -0.03753581708426115 -0.04027955684165351; 0.12971675491549636 -0.02368494568417238 -0.041313837916754456; 0.12476791885955194 -0.011918609837526017 -0.04089459243732129; 0.11990410375769957 -0.0013599111496390207 -0.039013892415853124; 0.11535184137947554 0.008625420550911504 -0.03547549318320644; 0.11060362891923352 0.01858862039347281 -0.03026382720393468; 0.1051121620536058 0.02900798484914558 -0.02356021862070372; 0.09847113469008412 0.040066844453614206 -0.014965931800162527; 0.08971089782921067 0.051422184661349964 -0.005111452945431483; 0.07802582953613077 0.06259376060544532 0.0051850295654957725; 0.06311411546227669 0.07276616262027279 0.015795273832386957; 0.04546470094052957 0.08070053397671015 0.025466309765173768; 0.026472095432748317 0.08567894187220633 0.03355591354621125; 0.006854607387209108 0.08788158299954184 0.03976962429050834; -0.011956529938837489 0.08738091721577941 0.04450602440724739] %
Mass Used: 121.82108539595492 kg
Launch C3: 12.893170008821572 km²/s²
||V∞_in||: 5.6101206957923 km/s

View File

@@ -0,0 +1,2 @@
missions/nlp_5_phase---------------------------