1855 lines
110 KiB
TeX
1855 lines
110 KiB
TeX
\documentclass[defaultstyle,11pt]{thesis}
|
||
|
||
\usepackage{graphicx}
|
||
\usepackage{amssymb}
|
||
\usepackage{hyperref}
|
||
\usepackage{amsmath}
|
||
|
||
\title{Designing Optimal Low-Thrust Interplanetary Trajectories Utilizing Monotonic Basin Hopping}
|
||
\author{Richard C.}{Johnstone}
|
||
\otherdegrees{B.S., Unviersity of Kentucky, Mechanical Engineering, 2016 \\
|
||
B.S., University of Kentucky, Physics, 2016}
|
||
\degree{Master of Science}{M.S., Aerospace Engineering}
|
||
\dept{Department of}{Aerospace Engineering}
|
||
\advisor{Prof.}{Natasha Bosanac}
|
||
\reader{Kathryn Davis}
|
||
\readerThree{Daniel Scheeres}
|
||
|
||
\abstract{ \OnePageChapter
|
||
There are a variety of approaches to finding and optimizing low-thrust trajectories in
|
||
interplanetary space. This thesis analyzes one such approach, Sims-Flanagan transcriptions, and
|
||
its applications in a multiple-shooting non-linear solver for the purpose of finding valid
|
||
low-thrust trajectory arcs between planets given poor initial conditions. These valid arcs are
|
||
then fed into a Monotonic Basin Hopping (MBH) algorithm, which combines these arcs in order to
|
||
find and optimize interplanetary trajectories, given a set of flyby planets. This allows for a
|
||
fairly rapid searching of a very large solution space of low-thrust profiles via a medium
|
||
fidelity inner-loop solver and a well-suited optimization routine. The trajectories found by
|
||
this method can then be optimized further by feeding the solutions back, once again, into the
|
||
non-linear solver, this time allowing the solver to perform optimization.
|
||
}
|
||
|
||
\dedication[Dedication]{
|
||
Dedicated to some people.
|
||
}
|
||
|
||
\acknowledgements{ \OnePageChapter
|
||
This will be an acknowledgement.
|
||
}
|
||
|
||
\LoFisShort
|
||
\emptyLoT
|
||
|
||
\begin{document}
|
||
|
||
\input macros.tex
|
||
|
||
\chapter{Introduction}
|
||
|
||
Continuous low-thrust arcs utilizing technologies such as Ion propulsion, Hall thrusters, and
|
||
others can be a powerful tool in the design of interplanetary space missions. They tend to be
|
||
particularly suited to missions which require very high total change in velocity or $\Delta V$
|
||
values and take place over a particularly long duration. Traditional impulsive thrusting
|
||
techniques can achieve these changes in velocity, but they typically have a far lower specific
|
||
impulse and, as such, are much less efficient and use more fuel, costing the mission valuable
|
||
financial resources that could instead be used for science. Because of their inherently high
|
||
specific impulse (and thus efficiency), low-thrust fuels are well-suited to interplanetary
|
||
missions.
|
||
|
||
For instance, low thrust ion propulsion was used on the Bepi-Colombo, Dawn, and Deep
|
||
Space 1 missions. In general, anytime an interplanetary trajectory is posed, it is advisable to
|
||
first explore the possibility of low-thrust technologies. In an interplanetary mission, the
|
||
primary downside to low-thrust orbits (that they require significant time to achieve large
|
||
$\Delta V$ changes) is made irrelevant by the fact that interplanetary trajectories take such a
|
||
long time as a matter of course.
|
||
|
||
Another technique often leveraged by interplanetary trajectory designers is the gravity assist.
|
||
Gravity assists cleverly utilize the inertia of a large planetary body to ''slingshot`` a
|
||
spacecraft, modifying the direction of its velocity with respect to the central body, the Sun.
|
||
This technique lends itself very well to impulsive trajectories. The gravity assist maneuver
|
||
itself can be modeled very effectively by an impulsive maneuver with certain constraints, placed
|
||
right at the moment of closest approach to the (flyby) target body. Because of this,
|
||
optimization with impulsive trajectories and gravity assists are common.
|
||
|
||
% TODO: Might need to remove the HOCP stuff
|
||
However, there is no physical reason why low-thrust trajectories can't also incorporate gravity
|
||
assists. The optimization problem becomes much more complicated. The separate problems of
|
||
optimizing flyby parameters (planet, flyby date, etc.) and optimizing the low-thrust control
|
||
arcs don't combine very easily. In this paper, a technique is explored by setting the
|
||
dual-problem up as a Hybrid Optimal Control Problem (HOCP).
|
||
|
||
This thesis will explore these concepts in a number of different sections. Section
|
||
\ref{traj_opt} will explore the basic principles of trajectory optimization in a manner agnostic
|
||
to the differences between continuous low-thrust and impulsive high-thrust techniques. Section
|
||
\ref{low_thrust} will then delve into the different aspects to consider when optimizing a low
|
||
thrust mission profile over an impulsive one. Section \ref{interplanetary} provides more detail
|
||
on the interplanetary considerations, including force models and gravity assists. Section
|
||
\ref{algorithm} will cover the implementation details of the HOCP optimization algorithm
|
||
developed for this paper. Finally, section \ref{results} will explore the results of some
|
||
hypothetical missions to Saturn.
|
||
|
||
\chapter{Trajectory Optimization} \label{traj_opt}
|
||
|
||
Trajectory optimization is concerned with a narrow problem (namely, optimizing a spaceflight
|
||
trajectory to an end state) with a wide range of possible techniques, approaches, and even
|
||
solutions. In this section, the foundations for direct optimization of these sorts of problems
|
||
will be explored by first introducing the Two-Body Problem, then an algorithm for directly
|
||
solving for states in that system, then exploring approaches to Non-Linear Problem (NLP) solving
|
||
in general and how they apply to spaceflight trajectories.
|
||
|
||
\section{The Two-Body Problem}
|
||
The motion of a spacecraft in space is governed by a large number of forces. When planning and
|
||
designing a spacecraft trajectory, we often want to use the most complete (and often complex)
|
||
model of these forces that is available. However, in the process of designing these
|
||
trajectories, we often have to compute the path of the spacecraft many hundreds, thousands, or
|
||
even millions of times. Utilizing very high-fidelity force models that account for aerodynamic
|
||
pressures, solar radiation pressures, multi-body effects, and many others may be infeasible
|
||
for the method being used if the computations take too long.
|
||
|
||
Therefore, a common approach (and the one utilized in this implementation) is to first look
|
||
simply at the single largest force governing the spacecraft in motion, the gravitational force
|
||
due to the primary body around which it is orbiting. This can provide an excellent
|
||
low-to-medium fidelity model that can be extremely useful in categorizing the optimization
|
||
space as quickly as possible. In many cases, including the algorithm used in this paper, it is
|
||
unlikely that local cost-function minima would be missed due to the lack of fidelity of the
|
||
Two Body Problem.
|
||
|
||
In order to explore the Two Body Problem, we must first examine the full set of assumptions
|
||
associated with the force model. Firstly, we are only concerned with the nominative two
|
||
bodies: the spacecraft and the planetary body around which it is orbiting. Secondly, both of
|
||
these bodies are modeled as simple point masses. This removes the need to account for
|
||
non-uniform densities and asymmetry. The third assumption is that the mass of the spacecraft
|
||
($m_2$) is much much smaller than the mass of the planetary body ($m_1$) and enough so as to be
|
||
considered negligible. The only force acting on this system is then the force of gravity that
|
||
the primary body enacts upon the secondary. Lastly, we'll assume a fixed inertial frame. This
|
||
isn't necessary for the formulation of a solution, but will simplify the derivation.
|
||
|
||
Reducing the system to two point masses with a single gravitational force acting between them
|
||
(and only in one direction) we can model the force on the secondary body as:
|
||
|
||
\begin{equation}
|
||
\ddot{\vec{r}} = - \frac{G \left( m_1 + m_2 \right)}{r^2} \frac{\vec{r}}{\left| r \right|}
|
||
\end{equation}
|
||
|
||
Where $\vec{r}$ is the position of the spacecraft, $G$ is the universal gravitational
|
||
parameter, $m_1$ is the mass of the planetary body, and $m_2$ is the mass of the spacecraft.
|
||
Due to our assumption that the mass of the spacecraft is significantly smaller than the mass
|
||
of the primary body ($m_1 >> m_2$) we can reduce that formulation to simply:
|
||
|
||
\begin{equation}
|
||
\ddot{\vec{r}} = - \frac{\mu}{r^2} \hat{r}
|
||
\end{equation}
|
||
|
||
Where $\mu = G m_1$ is the specific gravitational parameter for our primary body of interest.
|
||
|
||
\subsection{Kepler's Laws and Equations}
|
||
|
||
% TODO: Can I segue better from 2BP to Keplerian geometry?
|
||
|
||
Now that we've fully qualified the forces acting within the Two Body Problem, we can concern
|
||
ourselves with more practical applications of this as a force model. It should be noted,
|
||
firstly, that the spacecraft's position and velocity (given an initial position and velocity
|
||
and of course the $\mu$ value of the primary body) is actually analytically solvable for all
|
||
future points in time. This can be easily observed by noting that there are three
|
||
one-dimensional equations (one for each component of the three-dimensional position) and
|
||
three unknowns (the three components of the second derivative of the position).
|
||
|
||
In the early 1600s, Johannes Kepler produced just such a solution. By taking advantages of
|
||
what is also known as ``Kepler's Laws'' which are:
|
||
|
||
\begin{enumerate}
|
||
\item Each planet's orbit is an ellipse with the Sun at one of the foci. This can be
|
||
expanded to any orbit by re-wording as ``all orbital paths follow a conic section
|
||
(circle, ellipse, parabola, or hyperbola) with a primary body at one of the foci''.
|
||
\item The area swept out by the imaginary line connecting the primary and secondary
|
||
bodies increases linearly with respect to time. This implies that the magnitude of the
|
||
orbital speed is not constant.
|
||
\item The square of the orbital period is proportional to the cube of the semi-major
|
||
axis of the orbit, regardless of eccentricity. Specifically, the relationship is: $T = 2
|
||
\pi \sqrt{\frac{a^3}{\mu}}$ where $T$ is the period and $a$ is the semi-major axis.
|
||
\end{enumerate}
|
||
|
||
\section{Analytical Solutions to Kepler's Equations}
|
||
|
||
Kepler was able to produce an equation to represent the angular displacement of an orbiting
|
||
body around a primary body as a function of time, which we'll derive now for the elliptical
|
||
case. Since the total area of an ellipse is the product of $\pi$, the semi-major axis, and
|
||
the semi-minor axis ($\pi a b$), we can relate (by Kepler's second law) the area swept out
|
||
by an orbit as a function of time:
|
||
|
||
\begin{equation}\label{swept}
|
||
\frac{\Delta t}{T} = \frac{k}{\pi a b}
|
||
\end{equation}
|
||
|
||
This leaves just one unknown variable $k$, which we can determine through use of the
|
||
geometric auxiliary circle, which is a circle with radius equal to the ellipse's semi-major
|
||
axis and center directly between the two foci, as in Figure~\ref{aux_circ}.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=0.8\textwidth]{fig/kepler}
|
||
\caption{Geometric Representation of Auxiliary Circle}\label{aux_circ}
|
||
\end{figure}
|
||
|
||
In order to find the area swept by the spacecraft, $k$, we can take advantage of the fact
|
||
that that area is the triangle $k_1$ subtracted from the elliptical segment $PCB$:
|
||
|
||
\begin{equation}\label{areas_eq}
|
||
k = area(seg_{PCB}) - area(k_1)
|
||
\end{equation}
|
||
|
||
Where the area of the triangle $k_1$ can be found easily using geometric formulae:
|
||
|
||
\begin{align}
|
||
area(k_1) &= \frac{1}{2} \left( ae - a \cos E \right) \left( \frac{b}{a} a \sin E \right) \\
|
||
&= \frac{ab}{2} \left(e \sin E - \cos E \sin E \right)
|
||
\end{align}
|
||
|
||
Now we can find the area for the elliptical segment $PCB$ by first finding the circular
|
||
segment $POB'$, subtracting the triangle $OB'C$, then applying the fact that an ellipse is
|
||
merely a vertical scaling of a circle by the amount $\frac{b}{a}$.
|
||
|
||
\begin{align}
|
||
area(PCB) &= \frac{b}{a} \left( \frac{a^2 E}{2} - \frac{1}{2} \left( a \cos E \right)
|
||
\left( a \sin E \right) \right) \\
|
||
&= \frac{abE}{2} - \frac{ab}{2} \left( \cos E \sin E \right) \\
|
||
&= \frac{ab}{2} \left( E - \cos E \sin E \right)
|
||
\end{align}
|
||
|
||
By substituting the two areas back into Equation~\ref{areas_eq} we can get the $k$ area
|
||
swept out by the spacecraft:
|
||
|
||
\begin{equation}
|
||
k = \frac{ab}{2} \left( E - e \sin E \right)
|
||
\end{equation}
|
||
|
||
Which we can then substitute back into the equation for the swept area as a function of
|
||
time (Equation~\ref{swept}):
|
||
|
||
\begin{equation}
|
||
\frac{\Delta t}{T} = \frac{E - e \sin E}{2 \pi}
|
||
\end{equation}
|
||
|
||
Which is, effectively, Kepler's equation. It is commonly known by a different form:
|
||
|
||
\begin{align}
|
||
M &= E - e \sin E \\
|
||
&= \sqrt{\frac{\mu}{a^3}} \Delta t
|
||
\end{align}
|
||
|
||
Where we've defined the mean anomaly as $M$ and used the fact that $T =
|
||
\sqrt{\frac{a^3}{\mu}}$. This provides us a useful relationship between Eccentric Anomaly
|
||
($E$) which can be related to spacecraft position, and time, but we still need a useful
|
||
algorithm for solving this equation.
|
||
|
||
\subsection{LaGuerre-Conway Algorithm}\label{laguerre}
|
||
For this application, I used an algorithm known as the LaGuerre-Conway algorithm, which was
|
||
presented in 1986 as a faster algorithm for directly solving Kepler's equation and has been
|
||
in use in many applications since. This algorithm is known for its convergence robustness
|
||
and also its speed of convergence when compared to higher order Newton methods.
|
||
|
||
This thesis will omit a step-through of the algorithm itself, but the code will be present
|
||
in the Appendix.
|
||
|
||
\section{Non-Linear Problem Optimization}
|
||
|
||
Now we can consider the formulation of the problem in a more useful way. For instance, given a
|
||
desired final state in position and velocity we can relatively easily determine the initial
|
||
state necessary to end up at that desired state over a pre-defined period of time by solving
|
||
Kepler's equation. In fact, this is often how impulsive trajectories are calculated since,
|
||
other than the impulsive thrusting event itself, the trajectory is entirely natural.
|
||
|
||
However, often in trajectory design we want to consider a number of other inputs. For
|
||
instance, a low thrust profile, a planetary flyby, the effects of rotating a solar panel on
|
||
solar radiation pressure, etc. Once these inputs have been accepted as part of the model, the
|
||
system is generally no longer analytically solvable, or, if it is, is too complex to calculate
|
||
directly.
|
||
|
||
Therefore an approach is needed, in trajectory optimization and many other fields, to optimize
|
||
highly non-linear, unpredictable systems such as this. The field that developed to approach
|
||
this problem is known as Non-Linear Problem (NLP) Optimization.
|
||
|
||
There are, however, two categories of approaches to solving an NLP. The first category,
|
||
indirect methods, involve declaring a set of necessary and/or sufficient conditions for declaring
|
||
the problem optimal. These conditions then allow the non-linear problem (generally) to be
|
||
reformulated as a two point boundary value problem. Solving this boundary value problem can
|
||
provide a control law for the optimal path. Indirect approaches for spacecraft trajectory
|
||
optimization have given us the Primer Vector Theory.
|
||
|
||
The other category is the direct methods. In a direct optimization problem, the cost function
|
||
itself is calculated to provide the optimal solution. The problem is usually thought of as a
|
||
collection of dynamics and controls. Then these controls can be modified to minimize the cost
|
||
function. A number of tools have been developed to optimize NLPs via this direct method in the
|
||
general case. For this particular problem, direct approaches were used as the low-thrust
|
||
system dynamics adds too much complexity to quickly optimize indirectly and the individual
|
||
optimization routines needed to proceed as quickly as possible.
|
||
|
||
\subsection{Non-Linear Solvers}
|
||
For these types of non-linear, constrained problems, a number of tools have been developed
|
||
that act as frameworks for applying a large number of different algorithms. This allows for
|
||
simple testing of many different algorithms to find what works best for the nuances of the
|
||
problem in question.
|
||
|
||
One of the most common of these NLP optimizers is SNOPT, which is a proprietary package
|
||
written primarily using a number of Fortran libraries by the Systems Optimization Laboratory
|
||
at Stanford University. It uses a sparse sequential quadratic programming approach.
|
||
|
||
Another common NLP optimization packages (and the one used in this implementation) is the
|
||
Interior Point Optimizer or IPOPT. It can be used in much the same way as SNOPT and uses an
|
||
Interior Point Linesearch Filter Method and was developed as an open-source project by the
|
||
organization COIN-OR under the Eclipse Public License.
|
||
|
||
Both of these methods utilize similar approaches to solve general constrained non-linear
|
||
problems iteratively. Both of them can make heavy use of derivative Jacobians and Hessians
|
||
to improve the convergence speed and both have been ported for use in a number of
|
||
programming languages, including in Julia, which was used for this project.
|
||
|
||
This is by no means an exhaustive list, as there are a number of other optimization
|
||
libraries that utilize a massive number of different algorithms. For the most part, the
|
||
libraries that port these are quite modular in the sense that multiple algorithms can be
|
||
tested without changing much source code.
|
||
|
||
\subsection{Linesearch Method}
|
||
As mentioned above, this project utilized IPOPT which leveraged an Interior Point Linesearch
|
||
method. A linesearch algorithm is one which attempts to find the optimum of a non-linear
|
||
problem by first taking an initial guess $x_k$. The algorithm then determines a step
|
||
direction (in this case through the use of automatic differentiation to calculate the
|
||
derivatives of the non-linear problem) and a step length. The linesearch algorithm then
|
||
continues to step the initial guess, now labeled $x_{k+1}$ after the addition of the
|
||
``step'' vector and iterates this process until predefined termination conditions are met.
|
||
|
||
In this case, the IPOPT algorithm was used, not as an optimizer, but as a solver. For
|
||
reasons that will be explained in the algorithm description in Section~\ref{algorithm} it
|
||
was sufficient merely that the non-linear constraints were met, therefore optimization (in
|
||
the particular step in which IPOPT was used) was unnecessary.
|
||
|
||
\chapter{Low-Thrust Considerations} \label{low_thrust}
|
||
|
||
Thus far, the techniques that have been discussed can be equally useful for both impulsive and
|
||
continuous thrust mission profiles. In this section, we'll discuss the intricacies of continuous
|
||
low-thrust trajectories in particular. There are many methods for optimizing such profiles and
|
||
we'll briefly discuss the difference between a direct and indirect optimization of a low-thrust
|
||
trajectory as well as introduce the concept of a control law and the notation used in this
|
||
thesis for modelling low-thrust trajectories more simply.
|
||
|
||
\section{Low-Thrust Control Laws}
|
||
|
||
In determining a low-thrust arc, a number of variables must be accounted for and, ideally,
|
||
optimized.
|
||
|
||
Firstly, we must determine the presence or absence of thrust. Often, this is a question of
|
||
preference in the arsenal of the mission designer. Generally speaking, there are points along
|
||
an orbit at which thrusting in order to achieve the final orbit are more or less efficient.
|
||
For instance, in a classic orbit raising, if increasing the semi-major axis is the only goal,
|
||
then thrusting nearer to the periapsis is far more efficient than thrusting near the apoapsis.
|
||
For this reason, a mission designer may choose to reduce the thrust or turn it off altogether
|
||
during certain segments of the trajectory.
|
||
|
||
Secondly, the direction of thrust must also be determined. The methods for determining this
|
||
direction varies greatly depending on the particular control law chosen for that mission.
|
||
Generally speaking, a control law determines these two parameters: thrust presence and thrust
|
||
direction, at each point along the arc.
|
||
|
||
This is, of course, also true for impulsive trajectories. However, since the thrust presence
|
||
for those trajectories are generally taken to be impulse functions, the control laws can
|
||
afford to be much less complicated for a given mission goal, by simply thrusting only at the
|
||
moment on the orbit when the transition will be most efficient. For a low-thrust mission,
|
||
however, the control law must be continuous rather than discrete and therefore the control law
|
||
inherently gains a lot of complexity.
|
||
|
||
\section{Sims-Flanagan Transcription}
|
||
|
||
The major problem with optimizing low thrust paths is that the control law must necessarily be
|
||
continuous. Also, since indirect optimization approaches are quite difficult, the problem must
|
||
necessarily be reformulated as a discrete one in order to apply a direct approach. Therefore,
|
||
this thesis chose to use a model well suited for discretizing low-thrust paths: the
|
||
Sims-Flanagan transcription (SFT).
|
||
|
||
The SFT is actually quite a simple method for discretizing low-thrust arcs. First the
|
||
continuous arc is subdivided into a number ($N$) of individual consistent timesteps of length
|
||
$\frac{tof}{N}$. The control thrust is then applied at the center of each of these time steps.
|
||
|
||
Using the SFT, it is relatively straightforward to propagate a state (in the context of the
|
||
Two-Body Problem) that utilizes a continuous low-thrust control, without the need for
|
||
computationally expensive numeric integration algorithms, by simply solving Kepler's equation
|
||
(using the LaGuerre-Conway algorithm introduced in Section~\ref{laguerre}) $N$ times. This
|
||
greatly reduces the computation complexity, which is particularly useful for cases in which
|
||
low-thrust trajectories need to be calculated many millions of times, as is the case in this
|
||
thesis. The fidelity of the model can also be easily fine-tuned. By simply increasing the
|
||
number of sub-arcs, one can rapidly approach a fidelity equal to a continuous low-thrust
|
||
trajectory within the Two-Body Problem, with only linearly-increasing computation time.
|
||
|
||
\chapter{Interplanetary Trajectory Considerations} \label{interplanetary}
|
||
|
||
The question of interplanetary travel opens up a host of additional new complexities. While
|
||
optimizations for simple single-body trajectories are far from simple, it can at least be
|
||
said that the assumptions of the Two Body Problem remain fairly valid. In interplanetary
|
||
travel, the primary body most responsible for gravitational forces might be a number of
|
||
different bodies, dependent on the phase of the mission. In the ideal case, every relevant
|
||
body would be considered as an ``n-body'' perturbation during the entire trajectory. For
|
||
some approaches, this method is sufficient and preferred. However, for other uses, a more
|
||
efficient model is necessary. The method of patched conics can be applied in this case to
|
||
simplify the model.
|
||
|
||
Interplanetary travel does not simply negatively impact trajectory optimization. The
|
||
increased complexity of the search space also opens up new opportunities for orbit
|
||
strategies. The primary strategy investigated by this thesis will be the gravity assist, a
|
||
technique for utilizing the gravitational energy of a planet to modify the direction of
|
||
solar velocity.
|
||
|
||
\section{Patched Conics}
|
||
|
||
The first hurdle to deal with is the problem of reconciling the Two-Body problem with
|
||
the presence of multiple and varying planetary bodies. The most common method for
|
||
approaching this is the method of patched conics. In this model, we break the
|
||
interplanetary trajectory up into a series of smaller sub-trajectories. During each of
|
||
these sub-trajectories, a single primary is considered to be responsible for the
|
||
trajectory of the orbit, via the Two-Body problem.
|
||
|
||
The transition point can be calculated a variety of ways. The most typical method is to
|
||
calculate the gravitational force due to the two bodies separately, via the Two-Body
|
||
models. Whichever primary is a larger influence on the motion of the spacecraft is
|
||
considered to be the primary at that moment. This effectively breaks the trajectory into
|
||
a series of orbits defined by the Two-Body problem (conics), patched together by
|
||
distinct transition points.
|
||
|
||
\section{Gravity Assist Maneuvers}
|
||
|
||
As previously mentioned, there are methods for utilizing the orbital energy of the other
|
||
planets in the Solar System. This is achieved via a technique known as a Gravity Assist,
|
||
or a Gravity Flyby. During a gravity assist, the spacecraft enters into the
|
||
gravitational sphere of influence of the planet and, because of its excess velocity,
|
||
proceeds to exit the sphere of influence. Relative to the planet, the speed of the
|
||
spacecraft increases as it approaches, then decreases as it departs. From the
|
||
perspective of the planet, the velocity of the spacecraft is unchanged. However, the
|
||
planet is also orbiting the Sun.
|
||
|
||
From the perspective of a Sun-centered frame, though, this is effectively an elastic
|
||
collision. The overall momentum remains the same, with the spacecraft either gaining or
|
||
losing some in the process (dependent on the directions of travel). The planet also
|
||
loses or gains momentum enough to maintain the overall system momentum, but this amount
|
||
is negligible compared to the total momentum of the planet. The overall effect is that
|
||
the spacecraft arrives at the planet from one direction and, because of the influence of
|
||
the planet, leaves in a different direction.
|
||
|
||
This effect can be used strategically. The ``bend'' due to the flyby is actually
|
||
tunable via the exact placement of the fly-by in the b-frame, or the frame centered at
|
||
the planet, from the perspective of the spacecraft at $v_\infty$. By modifying the
|
||
turning angle of this bend. In doing so, one can effectively achieve a (restricted) free
|
||
impulsive thrust event.
|
||
|
||
\section{Multiple Gravity Assist Techniques}
|
||
|
||
Naturally, therefore, one would want to utilize these gravity flybys to reduce the fuel
|
||
cost to arrive at their destination target state. However, these flyby maneuvers are
|
||
quite restricted. The incoming hyperbolic velocity must be equal in magnitude to the
|
||
outgoing hyperbolic velocity. Also, the turning angle $\delta$, in the following
|
||
equation, correlates with the radius of periapsis of the hyperbolic trajectory crossing
|
||
the planet:
|
||
|
||
\begin{equation}
|
||
r_p = \frac{\mu}{v_\infty^2} \left[ \frac{1}{\sin\left(\frac{\delta}{2}\right)} - 1 \right]
|
||
\end{equation}
|
||
|
||
Where $v_\infty$ is the magnitude of hyperbolic velocity. Naturally, the radius of
|
||
periapsis must not fall below some safe value, in order to avoid the risk of the
|
||
spacecraft crashing into the planet or its atmosphere.
|
||
|
||
In order to visualize which trajectories are possible within these constraints, porkchop
|
||
plots are often employed, such as the plot in Figure~\ref{porkchop}. These plots outline
|
||
various incoming and outgoing qualities of the trajectory arc between two planetary
|
||
bodies. For instance, during an arc from launch at Earth to a flyby one might plot the
|
||
launch C3 against the Mars arrival $v_\infty$ for a variety of launch and arrival dates.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/porkchop}
|
||
\caption{A sample porkchop plot of an Earth-Mars transfer}
|
||
\label{porkchop}
|
||
\end{figure}
|
||
|
||
This is made possible by solving Lambert's problem for the planetary ephemeris at the
|
||
epochs plotted. Lambert's problem is concerned with determining the orbit between two
|
||
positions at two different times in space. There are a number of different Lambert's
|
||
problem algorithms that allow a mission designer to determine the velocity needed (and
|
||
thus the $\Delta V$) required to achieve a position at a later time. From this, the
|
||
designer can algorithmically determine trajectory properties in the porkchop plot for
|
||
easy visualization.
|
||
|
||
However, this is an impulsive thrust-centered approach. The solution to Lambert's
|
||
problem assumes a natural trajectory. However, to the low-thrust designer, this is
|
||
needlessly limiting. A natural trajectory is unnecessary when the trajectory can be
|
||
modified by a continuous thrust profile along the arc. Therefore, for the hybrid problem
|
||
of optimizing both flyby selection and thrust profiles, porkchop plots are less helpful,
|
||
and an algorithmic approach is preferred.
|
||
|
||
% \chapter{Genetic Algorithms}
|
||
% I will probably give only a brief overview of genetic algorithms here. I don't personally know
|
||
% that much about them. Then in the following subsections I can discuss the parts that are
|
||
% relevant to the specific algorithm that I'm using.
|
||
|
||
% \section{Decision Vectors}
|
||
% Discuss what a decision vector is in the context of an optimization problem.
|
||
|
||
% \section{Selection and Fitness Evaluation}
|
||
% Discuss the costing being used as well as the different types of fitness evaluation that are
|
||
% common. Also discuss the concept of generations and ``survival''.
|
||
|
||
% \subsection{Tournament Selection}
|
||
% Dive deeper into the specific selection algorithm being used here.
|
||
|
||
% \section{Crossover}
|
||
% Discuss the concept of crossover and procreation in a genetic algorithm.
|
||
|
||
% \subsection{Binary Crossover}
|
||
% Discuss specific crossover algorithm used here.
|
||
|
||
% \subsection{Mutation}
|
||
% Discuss both the necessity for mutation and the mutation algorithm being used.
|
||
|
||
\chapter{Algorithm Overview} \label{algorithm}
|
||
|
||
In this section, we will review the actual execution of the algorithm developed. As an
|
||
overview, the routine was developed to enable the determination of an optimized spacecraft
|
||
trajectory from the selection of some very basic mission parameters. Those parameters
|
||
include:
|
||
|
||
\begin{itemize}
|
||
\item Spacecraft dry mass
|
||
\item Thruster Specific Impulse
|
||
\item Thruster Maximum Thrusting Force
|
||
\item Thruster Duty Cycle Percentage
|
||
\item Number of Thruster on Spacecraft
|
||
\item Total Starting Weight of the Spacecraft
|
||
\item A Maximum Acceptable $V_\infty$ at arrival and $C_3$ at launch
|
||
\item The Launch Window Timing and the Latest Arrival
|
||
\item A cost function relating the mass usage, $v_\infty$ at arrival, and $C_3$ at
|
||
launch to a cost
|
||
\item A list of flyby planets starting with Earth and ending with the destination
|
||
\end{itemize}
|
||
|
||
Which allows for extremely automated optimization of the trajectory, while still providing
|
||
the mission designer with the flexibility to choose the particular flyby planets to
|
||
investigate.
|
||
|
||
This is achieved via an optimal control problem in which the ``inner loop'' is a
|
||
non-linear programming problem to determine the optimal low-thrust control law and flyby
|
||
parameters given a suitable initial guess. Then an ``outer loop'' monotonic basin hopping
|
||
algorithm is used to traverse the search space and more carefully optimize the solutions
|
||
found by the inner loop.
|
||
|
||
\section{Trajectory Composition}
|
||
|
||
In this thesis, a specific nomenclature will be adopted to define the stages of an
|
||
interplanetary mission in order to standardize the discussion about which aspects of the
|
||
software affect which phases of the mission.
|
||
|
||
Overall, a mission is considered to be the entire overall trajectory. In the context of
|
||
this software procedure, a mission is taken to always begin at the Earth, with some
|
||
initial launch C3 intended to be provided by an external launch vehicle. This C3 is not
|
||
fully specified by the mission designer, but instead is optimized as a part of the
|
||
overall cost function (and normalized by a designer-specified maximum allowable value).
|
||
|
||
This overall mission can then be broken down into a variable number of ``phases''
|
||
defined as beginning at one planetary body with some excess hyperbolic velocity and
|
||
ending at another. The first phase of the mission is from the Earth to the first flyby
|
||
planet. The final phase is from the last flyby planet to the planet of interest.
|
||
|
||
Each of these phases are then connected by a flyby event at the boundary. Each flyby
|
||
event must satisfy the following conditions:
|
||
|
||
\begin{enumerate}
|
||
\item The planet at the end of one phase must match the planet at the beginning of
|
||
the next phase.
|
||
\item The magnitude of the excess hyperbolic velocity coming into the planet (at the
|
||
end of the previous phase) must equal the magnitude of the excess hyperbolic
|
||
velocity leaving the planet (at the beginning of the next phase).
|
||
\item The flyby ``turning angle'' must be such that the craft maintains a safe
|
||
minimum altitude above the surface or atmosphere of the flyby planet.
|
||
\end{enumerate}
|
||
|
||
These conditions then effectively stitch the separate mission phases into a single
|
||
coherent mission, allowing for the optimization of both individual phases and the entire
|
||
mission as a whole. This nomenclature is similar to the nomenclature adopted by Jacob
|
||
Englander in his Hybrid Optimal Control Problem paper, but does not allow for missions
|
||
with multiple targets, simplifying the optimization.
|
||
|
||
\section{Inner Loop Implementation}\label{inner_loop_section}
|
||
|
||
The optimization routine can be reasonable separated into two separate ``loops'' wherein
|
||
the first loop is used, given an initial guess, to find valid trajectories within the
|
||
region of the initial guess and submit the best. The outer loop is then used to traverse
|
||
the search space and supply the initial loop with a number of well chosen initial
|
||
guesses.
|
||
|
||
Figure~\ref{nlp} provides an overview of the process of breaking a mission guess down
|
||
into an NLP, but there are essentially three primary routines involved in the inner
|
||
loop. A given state is propagated forward using the LaGuerre-Conway Kepler solution
|
||
algorithm, which itself is used to generate powered trajectory arcs via the
|
||
Sims-Flanagan transcribed propagator. Finally, these powered arcs are connected via a
|
||
multiple-shooting non-linear optimization problem. The trajectories describing each
|
||
phase complete one ``Mission Guess'' which is fed to the non-linear solver to generate
|
||
one valid trajectory within the vicinity of the original Mission Guess.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{flowcharts/nlp}
|
||
\caption{A flowchart of the Non-Linear Problem Solving Formulation}
|
||
\label{nlp}
|
||
\end{figure}
|
||
|
||
\subsection{LaGuerre-Conway Kepler Solver}
|
||
|
||
The most basic building block of any trajectory is a physical model for simulating
|
||
natural trajectories from one point forward in time. The approach taken by this
|
||
paper uses the solution to Kepler's equation put forward by
|
||
Conway\cite{laguerre_conway} in 1986 in order to provide simple and very
|
||
processor-efficient propagation without the use of integration. The code logic
|
||
itself is actually quite simple, providing an approach similar to the Newton-Raphson
|
||
approach for finding the roots of the Battin form of Kepler's equation.
|
||
|
||
The following pseudo-code outlines the approach taken for the elliptical case. The
|
||
approach is quite similar when $a<0$:
|
||
|
||
% TODO: Some symbols here aren't recognized by the font
|
||
\begin{singlespacing}
|
||
\begin{verbatim}
|
||
i = 0
|
||
# First declare some useful variables from the state
|
||
σ0 = (position ⋅ velocity) / √(μ)
|
||
a = 1 / ( 2/norm(position) - norm(velocity)^2/μ )
|
||
coeff = 1 - norm(position)/a
|
||
|
||
# This loop is essentially a second-order Newton solver for ΔE
|
||
ΔM = ΔE_new = √(μ/a^3) * time
|
||
ΔE = 1000
|
||
while abs(ΔE - ΔE_new) > 1e-10
|
||
ΔE = ΔE_new
|
||
F = ΔE - ΔM + σ0 / √(a) * (1-cos(ΔE)) - coeff * sin(ΔE)
|
||
dF = 1 + σ0 / √(a) * sin(ΔE) - coeff * cos(ΔE)
|
||
d2F = σ0 / √(a) * cos(ΔE) + coeff * sin(ΔE)
|
||
ΔE_new = ΔE - n*F / ( dF + sign(dF) * √(abs((n-1)^2*dF^2 - n*(n-1)*F*d2F )))
|
||
i += 1
|
||
end
|
||
|
||
# ΔE can then be used to determine the F/Ft and G/Gt coefficients
|
||
F = 1 - a/norm(position) * (1-cos(ΔE))
|
||
G = a * σ0/ √(μ) * (1-cos(ΔE)) + norm(position) * √(a) / √(μ) * sin(ΔE)
|
||
r = a + (norm(position) - a) * cos(ΔE) + σ0 * √(a) * sin(ΔE)
|
||
Ft = -√(a)*√(μ) / (r*norm(position)) * sin(ΔE)
|
||
Gt = 1 - a/r * (1-cos(ΔE))
|
||
|
||
# Which provide transformations from the original position and velocity to the
|
||
# final
|
||
final_position = F*position + G*velocity
|
||
final_velocity = Ft*position + Gt*velocity
|
||
\end{verbatim}
|
||
\end{singlespacing}
|
||
|
||
This approach was validated by generating known good orbits in the 2 Body Problem.
|
||
For example, from the orbital parameters of a certain state, the orbital period can
|
||
be determined. If the system is then propagated for an integer multiple of the orbit
|
||
period, the state should remain exactly the same as it began. In
|
||
Figure~\ref{laguerre_plot} an example of such an orbit is provided.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/laguerre_plot}
|
||
\caption{Example of a natural trajectory propagated via the Laguerre-Conway
|
||
approach to solving Kepler's Problem}
|
||
\label{laguerre_plot}
|
||
\end{figure}
|
||
% TODO: Consider adding a paragraph about the improvements in processor time
|
||
|
||
\subsection{Sims-Flanagan Propagator}
|
||
|
||
Until this point, we've not yet discussed how best to model the low-thrust
|
||
trajectory arcs themselves. The Laguerre-Conway algorithm efficiently determines
|
||
natural trajectories given an initial state, but it still remains, given a control
|
||
law, that we'd like to determine the trajectory of a system with continuous input
|
||
thrust.
|
||
|
||
For this, we leverage the Sims-Flanagan transcription mentioned earlier. This allows
|
||
us to break a single phase into a number of ($n$) different arcs. At the center of
|
||
each of these arcs we can place a small impulsive burn, scaled appropriately for the
|
||
thruster configured on the spacecraft of interest. Therefore, for any given phase,
|
||
we actually split the trajectory into $2n$ sub-trajectories, with $n$ scaled
|
||
impulsive thrust events. As $n$ is increased, the trajectory becomes increasingly
|
||
accurate as a model of low-thrust propulsion in the 2BP. This allows the mission
|
||
designer to trade-off speed of propagation and the fidelity of the results quite
|
||
effectively.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/spiral_plot}
|
||
\caption{An example trajectory showing that classic continuous-thrust orbit
|
||
shapes, such as this orbit spiral, are easily achievable using a Sims-Flanagan
|
||
model}
|
||
\label{sft_plot}
|
||
\end{figure}
|
||
|
||
Figure~\ref{sft_plot} shows that the Sims-Flanagan transcription model can be used
|
||
to effectively model these types of orbit trajectories. In fact, the Sims-Flanagan
|
||
model is capable of modeling nearly any low-thrust trajectory with a sufficiently
|
||
high number of $n$ samples.
|
||
|
||
\subsection{Non-Linear Problem Solver}
|
||
|
||
Now that we have the basic building blocks of a continuous-thrust trajectory, we can
|
||
leverage one of the many non-linear optimization packages to find solutions near to
|
||
a (proposed) trajectory. This trajectory need not be valid.
|
||
|
||
For the purposes of discussion in this Section, we will assume that the inner-loop
|
||
algorithm starts with just such a ''Mission Guess``, which represents the proposed
|
||
trajectory. However, we'll briefly mention what quantities are needed for this
|
||
input:
|
||
|
||
A Mission Guess object contains:
|
||
\begin{singlespacing}
|
||
\begin{itemize}
|
||
\item The spacecraft and thruster parameters for the mission
|
||
\item A launch date
|
||
\item A launch $v_\infty$ vector representing excess Earth velocity
|
||
\item For each phase of the mission:
|
||
\begin{itemize}
|
||
\item The planet that the spacecraft will encounter (either flyby or
|
||
complete the mission) at the end of the phase
|
||
\item The $v_{\infty,out}$ vector representing excess velocity at the
|
||
planetary flyby (or launch if phase 1) at the beginning of the phase
|
||
\item The $v_{\infty,in}$ vector representing excess velocity at the
|
||
planetary flyby (or completion of mission) at the end of the phase
|
||
\item The time of flight for the phase
|
||
\item The unit-thrust profile in a sun-fixed frame represented by a
|
||
series of vectors with each element ranging from 0 to 1.
|
||
\end{itemize}
|
||
\end{itemize}
|
||
\end{singlespacing}
|
||
|
||
From this information, as can be seen in Figure~\ref{nlp}, we can formulate the
|
||
mission in terms of a non-linear problem. Specifically, the Mission Guess object can
|
||
be represented as a vector, $x$, the propagation function as a function $F$, and the
|
||
constraints as another function $G$ such that $G(x) = \vec{0}$.
|
||
|
||
This is a format that we can apply directly to the IPOPT solver, which Julia (the
|
||
programming language used) can utilize via bindings supplied by the SNOW.jl
|
||
package\cite{snow}.
|
||
|
||
IPOPT also requires the derivatives of both the $F$ and $G$ functions in the
|
||
formulation above. Generally speaking, a project designer has two options for
|
||
determining derivatives. The first option is to analytically determine the
|
||
derivatives, guaranteeing accuracy, but requiring processor time if determined
|
||
algorithmically and sometimes simply impossible or mathematically very rigorous to
|
||
determine manually. The second option is to numerically derive the derivatives,
|
||
using a technique such as finite differencing. This limits the accuracy, but can be
|
||
faster than algorithmic symbolic manipulation and doesn't require rigorous manual
|
||
derivations.
|
||
|
||
However, the Julia language has an excellent interface to a new technique, known as
|
||
automatic differentiation\cite{RevelsLubinPapamarkou2016}. Automatic differentiation
|
||
takes a slightly different approach to numerical derivation. It takes advantage of
|
||
the fact that any algorithmic function, no matter how complicated, can be broken
|
||
down into a series of smaller arithmetic functions, down to the level of simple
|
||
arithmetic. Since all of these simple arithmetic functions have a known derivative,
|
||
we can define a new datatype that carries through the function both the float and a
|
||
second number representing the derivative. Then, by applying (to the derivative) the
|
||
chain rule for every minute arithmetic function derivative as that arithmetic
|
||
function is applied to the main float value, the derivative can be determined,
|
||
accurate to the machine precision of the float type being used, with a processing
|
||
equivalent of two function calls (this of course depends on the simplicity of the
|
||
chained derivatives compared to the function pieces themselves). Generally speaking
|
||
this is much faster than the three or more function calls necessary for accurate
|
||
finite differencing and removes the need for the designer to tweak the epsilon value
|
||
in order to achieve maximum precision.
|
||
|
||
\section{Outer Loop Implementation}
|
||
|
||
Now we have the tools in place for, given a potential ''mission guess`` in the
|
||
vicinity of a valid guess, attempting to find a valid and optimal solution in that
|
||
vicinity. Now what remains is to develop a routine for efficiently generating these
|
||
random mission guesses in such a way that thoroughly searches the entirety of the
|
||
solution space with enough granularity that all spaces are considered by the inner loop
|
||
solver.
|
||
|
||
Once that has been accomplished, all that remains is an ''outer loop`` that can generate
|
||
new guesses or perturb existing valid missions as needed in order to drill down into a
|
||
specific local minimum. In this thesis, that is accomplished through the use of a
|
||
Monotonic Basin Hopping algorithm. This will be described more thoroughly in
|
||
Section~\ref{mbh_subsection}, but Figure~\ref{mbh_flow} outlines the process steps of
|
||
the algorithm.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{flowcharts/mbh}
|
||
\caption{A flowchart visualizing the steps in the monotonic basin hopping
|
||
algorithm}
|
||
\label{mbh_flow}
|
||
\end{figure}
|
||
|
||
\subsection{Random Mission Generation}\label{random_gen_section}
|
||
|
||
At a basic level, the algorithm needs to produce a mission guess (represented by all
|
||
of the values described in Section~\ref{inner_loop_section}) that contains random
|
||
values within reasonable bounds in the space. This leaves a number of variables open
|
||
to for implementation. For instance, it remains to be determined which distribution
|
||
function to use for the random values over each of those variables, which bounds to
|
||
use, as well as the possibilities for any improvements to a purely random search.
|
||
|
||
Currently, the first value set for the mission guess is that of $n$, which is the
|
||
number of sub-trajectories that each arc will be broken into for the Sims-Flanagan
|
||
based propagator. For this implementation, that was chosen to be 20, based upon a
|
||
number of tests in which the calculation time for the propagation was compared
|
||
against the accuracy of a much higher $n$ value for some known thrust controls, such
|
||
as a simple spiral orbit trajectory. This value of 20 tends to perform well and
|
||
provide reasonable accuracy, without producing too many variables for the NLP
|
||
optimizer to control for (since the impulsive thrust at the center of each of the
|
||
sub-trajectories is a control variable). This leaves some room for future
|
||
improvements, as will be discussed in Section~\ref{improvement_section}.
|
||
|
||
The bounds for the launch date are provided by the user in the form of a launch
|
||
window, so the initial launch date is just chosen as a standard random value from a
|
||
uniform distribution within those bounds.
|
||
|
||
A unit launch direction is then also chosen as a 3-length vector of uniform random
|
||
numbers, then normalized. This unit vector is then multiplied by a uniform random
|
||
number between 0 and the square root of the maximum launch $C_3$ specified by the
|
||
user to generate an initial $\vec{v_\infty}$ vector at launch.
|
||
|
||
Next, the times of flight of each phase of the mission is then decided. Since launch
|
||
date has already been selected, the maximum time of flight can be calculated by
|
||
subtracting the launch date from the latest arrival date provided by the mission
|
||
designer. Then, each leg is chosen from a uniform distribution with bounds currently
|
||
set to a minimum flight time of 30 days and a maximum of 70\% of the maximum time of
|
||
flight. These leg flight times are then iteratively re-generated until the total
|
||
time of flight (represented by the sum of the leg flight times) is less than the
|
||
maximum time of flight. This allows for a lot of flexibility in the leg flight
|
||
times, but does tend toward more often producing longer missions, particularly for
|
||
missions with more flybys.
|
||
|
||
Then, the internal components for each phase are generated. It is at this step, that
|
||
the mission guess generator splits the outputs into two separate outputs. The first
|
||
is meant to be truly random, as is generally used as input for a monotonic basin
|
||
hopping algorithm. The second utilizes a Lambert's solver to determine the
|
||
appropriate hyperbolic velocities (both in and out) at each flyby to generate a
|
||
natural trajectory arc. For this Lambert's case, the mission guess is simply seeded
|
||
with zero thrust controls and outputted to the monotonic basin hopper. The intention
|
||
here is that if the time of flights are randomly chosen so as to produce a
|
||
trajectory that is possible with a control in the vicinity of a natural trajectory,
|
||
we want to be sure to find that trajectory. More detail on how this is handled is
|
||
available in Section~\ref{mbh_subsection}.
|
||
|
||
However, for the truly random mission guess, there are still the $v_\infty$ values
|
||
and the initial thrust guesses to generate. For each of the phases, the incoming
|
||
excess hyperbolic velocity is calculated in much the same way that the launch
|
||
velocity was calculated. However, instead of multiplying the randomly generate unit
|
||
direction vector by a random number between 0 and the square root of the maximum
|
||
launch $C_3$, bounds of 0 and 10 kilometers per second are used instead, to provide
|
||
realistic flyby values.
|
||
|
||
The outgoing excess hyperbolic velocity at infinity is then calculated by again
|
||
choosing a uniform random unit direction vector, then by multiplying this value by
|
||
the magnitude of the incoming $v_{\infty}$ since this is a constraint of a
|
||
non-powered flyby.
|
||
|
||
From these two velocity vectors the turning angle, and thus the periapsis of the
|
||
flyby, can then be calculated by the following equations:
|
||
|
||
\begin{align}
|
||
\delta &= \arccos \left( \frac{\vec{v}_{\infty,in} \cdot
|
||
\vec{v}_{\infty,out}}{|v_{\infty,in}| \cdot {|v_{\infty,out}}|} \right) \\
|
||
r_p &= \frac{\mu}{\vec{v}_{\infty,in} \cdot \vec{v}_{\infty,out}} \cdot \left(
|
||
\frac{1}{\sin(\delta/2)} - 1 \right)
|
||
\end{align}
|
||
|
||
If this radius of periapse is then found to be less than the minimum safe radius
|
||
(currently set to the radius of the planet plus 100 kilometers), then the process is
|
||
repeated with new random flyby velocities until a valid seed flyby is found. These
|
||
checks are also performed each time a mission is perturbed or generated by the nlp
|
||
solver.
|
||
|
||
The final requirement then, is the thrust controls, which are actually quite simple.
|
||
Since the thrust is defined as a 3-vector of values between -1 and 1 representing
|
||
some percentage of the full thrust producible by the spacecraft thrusters in that
|
||
direction, the initial thrust controls can then be generated as a $20 \times 3$
|
||
matrix of uniform random numbers within that bound.
|
||
|
||
\subsection{Monotonic Basin Hopping}\label{mbh_subsection}
|
||
|
||
Now that a generator has been developed for mission guesses, we can build the
|
||
monotonic basin hopping algorithm. Since the implementation of the MBH algorithm
|
||
used in this paper differs from the standard implementation, the standard version
|
||
won't be described here. Instead, the variation used in this paper, with some
|
||
performance improvements, will be considered.
|
||
|
||
The aim of a monotonic basin hopping algorithm is to provide an efficient method for
|
||
completely traversing a large search space and providing many seed values within the
|
||
space for an ''inner loop`` solver or optimizer. These solutions are then perturbed
|
||
slightly, in order to provide higher fidelity searching in the space near valid
|
||
solutions in order to fully explore the vicinity of discovered local minima. This
|
||
makes it an excellent algorithm for problems with a large search space, including
|
||
several clusters of local minima, such as this application.
|
||
|
||
The algorithm contains two loops, the size of each of which can be independently
|
||
modified (generally by specifying a ''patience value``, or number of loops to
|
||
perform, for each) to account for trade-offs between accuracy and performance depending on
|
||
mission needs and the unique qualities of a certain search space.
|
||
|
||
The first loop, the ''search loop``, first calls the random mission generator. This
|
||
generator produces two random missions as described in
|
||
Section~\ref{random_gen_section} that differ only in that one contains random flyby
|
||
velocities and control thrusts and the other contains Lambert's-solved flyby
|
||
velocities and zero control thrusts. For each of these guesses, the NLP solver is
|
||
called. If either of these mission guesses have converged onto a valid solution, the
|
||
lower loop, the ''drill loop`` is entered for the valid solution. After the
|
||
convergence checks and potentially drill loops are performed, if a valid solution
|
||
has been found, this solution is stored in an archive. If the solution found is
|
||
better than the current best solution in the archive (as determined by a
|
||
user-provided cost function of fuel usage, $C_3$ at launch, and $v-\infty$ at
|
||
arrival) then the new solution replaces the current best solution and the loop is
|
||
repeated. Taken by itself, the search loop should quickly generate enough random
|
||
mission guesses to find all ''basins`` or areas in the solution space with valid
|
||
trajectories, but never attempts to more thoroughly explore the space around valid
|
||
solutions within these basins.
|
||
|
||
The drill loop, then, is used for this purpose. For the first step of the drill
|
||
loop, the current solution is saved as the ''basin solution``. If it's better than
|
||
the current best, it also replaces the current best solution. Then, until the
|
||
stopping condition has been met (generally when the ''drill counter`` has reached
|
||
the ''drill patience`` value) the current solution is perturbed slightly by adding
|
||
or subtracting a small random value to the components of the mission.
|
||
|
||
The performance of this perturbation in terms of more quickly converging upon the
|
||
true minimum of that particular basin, as described in detail by
|
||
Englander\cite{englander2014tuning}, is highly dependent on the distribution
|
||
function used for producing these random perturbations. While the intuitive choice
|
||
of a simple Gaussian distribution would make sense to use, it has been found that a
|
||
long-tailed distribution, such as a Cauchy distribution or a Pareto distribution is
|
||
more robust in terms of well chose boundary conditions and initial seed solutions as
|
||
well as more performant in time required to converge upon the minimum for that basin.
|
||
|
||
Because of this, the perturbation used in this implementation follows a
|
||
bi-directional, long-tailed Pareto distribution generated by the following
|
||
probability density function:
|
||
|
||
\begin{equation}
|
||
1 +
|
||
\left[ \frac{s}{\epsilon} \right] \cdot
|
||
\left[ \frac{\alpha - 1}{\frac{\epsilon}{\epsilon + r}^{-\alpha}} \right]
|
||
\end{equation}
|
||
|
||
Where $s$ is a random array of signs (either plus one or minus one) with dimension
|
||
equal to the perturbed variable and bounds of -1 and 1, $r$ is a uniformly
|
||
distributed random array with dimension equal to the perturbed variable and bounds
|
||
of 0 and 1, $\epsilon$ is a small value (nominally set to $1e-10$), and $\alpha$ is
|
||
a tuning parameter to determine the size of the tails and width of the distribution
|
||
set to $1.01$, but easily tunable.
|
||
|
||
The perturbation function, then steps through each parameter of the mission,
|
||
generating a new mission guess with the parameters modified by the above Pareto
|
||
distribution. After this perturbation, the NLP solver is then called again to find
|
||
a valid solution in the vicinity of this new guess. If the solution is better than
|
||
the current basin solution, it replaces that value and the drill counter is reset to
|
||
zero. If it is better than the current total best, it replaces that value as well.
|
||
Otherwise, the drill counter increments and the process is repeated. Therefore, the
|
||
drill patience allows the mission designer to determine a maximum number of
|
||
iterations to perform without any improvements in a row before ending a given drill
|
||
loop. This process can be repeated essentially ''search patience`` number of times
|
||
in order to fully traverse all basins.
|
||
|
||
\chapter{Results Analysis} \label{results}
|
||
|
||
The algorithm described in this thesis is quite flexible in its design and could be used as
|
||
a tool for a mission designer on a variety of different mission types. However, to consider
|
||
a relatively simple but representative mission design objective, a sample mission to Saturn
|
||
was investigated.
|
||
|
||
\section{Mission Constraints}
|
||
|
||
The sample mission was defined to represent a general case for a near-future low-thrust
|
||
trajectory to Saturn. No constraints were placed on the flyby planets, but a number of
|
||
constraints were placed on the algorithm to represent a realistic mission scenario.
|
||
|
||
The first choice required by the application is one not necessarily designable to the
|
||
initial mission designer (though not necessarily fixed in the design either) and is that
|
||
of the spacecraft parameters. The application accepts as input a spacecraft object
|
||
containing: the dry mass of the craft, the fuel mass at launch, the number of onboard
|
||
thrusters, and the specific impulse, maximum thrust and duty cycle of each thruster.
|
||
|
||
For this mission, the spacecraft was chosen to have a dry mass of only 200 kilograms for
|
||
a fuel mass of 3300 kilograms. This was chosen in order to have an overall mass roughly
|
||
in the same zone as that of the Cassini spacecraft, which launched with 5712 kilograms
|
||
of total mass, with the fuel accounting for 2978 of those kilograms\cite{cassini}. The
|
||
dry mass of the craft was chosen to be extremely low in order to allow for a variety of
|
||
''successful`` missions in which the craft didn't run out of fuel. That way, the
|
||
delivered dry mass to Saturn could be thought of as a metric of success, without
|
||
discounting mission that may have delivered just under whatever more realistic dry mass
|
||
one might set, in case those missions are in the vicinity of actually valid missions.
|
||
|
||
The thruster was chosen to have a specific impulse of 3200 seconds, a maximum thrust of
|
||
250 millinewtons, and a 100\% duty cycle. This puts the thruster roughly in line with
|
||
having an array of three NSTAR ion thrusters, which were used on the Dawn and Deep Space
|
||
1 missions\cite{polk2001performance}.
|
||
|
||
Also of relevance to the mission were the maximum $C_3$ at launch and $v_\infty$ at
|
||
arrival values. In order to not exclude the possibility of a non-capture flyby mission,
|
||
it was decided to not include the arrival $v_\infty$ term in the cost function and,
|
||
because of this, the maximum value was set to be extremely high at 500 kilometers per
|
||
second, in order to fully explore the space. In practice, though, the algorithm only
|
||
looks at flybys below 10 kilometers per second in magnitude. The maximum launch $C_3$
|
||
energy was set conservatively to 200 kilometers per second squared. This is upper limit
|
||
is only possible, for the given start mass, using a heavy launch system such as the
|
||
SLS\cite{stough2021nasa} or the comparable SpaceX Starship, though at values below about
|
||
half of this maximum, it begins to become possible to use existing launch solutions.
|
||
|
||
Finally, the mission is meant to represent a near future mission. Therefore the launch
|
||
window was set to allow for a launch in any day in 2023 or 2024 and a maximum total time
|
||
of flight of 20 years. This is longer than most typical Saturn missions, but allows for
|
||
some creative trajectories for higher efficiency.
|
||
|
||
It should be noted that each of these trajectories was found using an $n$ value of 20 as
|
||
mentioned previously, but in post-processing, the trajectory was refined to utilize a
|
||
slightly higher fidelity model that uses 60 sub-trajectories per orbit. This serves to
|
||
provide better plots for display, higher fidelity analyses, as well as to highlight the
|
||
efficacy of the lower fidelity method. Orbits can be found quickly in the lower fidelity
|
||
model and easily refined later by re-running the NLP solver at a higher $n$ value.
|
||
|
||
\subsection{Cost Function}
|
||
|
||
Each mission optimization also allows for the definition of a cost function. This
|
||
cost function accepts as inputs all parameters of the mission, the maximum $C_3$ at
|
||
launch and the maximum excess hyperbolic velocity at arrival.
|
||
|
||
The cost function used for this mission first generated normalized values for fuel
|
||
usage and launch energy. The fuel usage number is determined by dividing the fuel
|
||
used by the mass at launch and the $C_3$ number is determined by dividing the $C_3$
|
||
at launch by the maximum allowed. These two numbers are then weighted, with the fuel
|
||
usage value getting a weight of three and the launch energy value getting a weight
|
||
of one. The values are summed and returned as the cost value.
|
||
|
||
\subsection{Flybys Analyzed}
|
||
|
||
Since the algorithm itself makes no decisions on the actual choice of flybys, that
|
||
leaves the mission designer to determine which flyby planets would make good
|
||
potential candidates. A mission designer can then re-run the algorithm for each of
|
||
these flyby plans and determine which optimized trajectories best fit the needs of
|
||
the mission.
|
||
|
||
For this particular mission scenario, the following flyby profiles were
|
||
investigated:
|
||
|
||
\begin{itemize}
|
||
\item EJS
|
||
\item EMJS
|
||
\item EMMJS
|
||
\item EMS
|
||
\item ES
|
||
\item EVMJS
|
||
\item EVMS
|
||
\item EVVJS
|
||
\end{itemize}
|
||
|
||
\section{Faster, Less Efficient Trajectory}
|
||
|
||
In order to showcase the flexibility of the optimization algorithm (and the chosen cost
|
||
function), two different missions were chosen to highlight. One of these missions is a
|
||
slower, more efficient trajectory more typical of common low-thrust trajectories. The
|
||
other is a faster trajectory, quite close to a natural trajectory, but utilizing more
|
||
launch energy to arrive at the planet.
|
||
|
||
It is the faster trajectory that we'll analyze first. Most interesting about this
|
||
particular trajectory is that it's actually quite efficient despite its speed, in
|
||
contrast to the usual dichotomy of low-thrust travel. The cost function used for this
|
||
analysis did not include the time of flight as a component of the overall cost, and yet
|
||
this trajectory still managed to be the lowest cost trajectory of all trajectories found
|
||
by the algorithm.
|
||
|
||
The mission begins in late June of 2024 and proceeds first to an initial gravity assist
|
||
with Mars after three and one half years to rendezvous in mid-December 2027.
|
||
Unfortunately, the launch energy required to effectively used the gravity assist with
|
||
Mars at this time is quite high. The $C_3$ value was found to be $60.4102$ kilometers
|
||
per second squared. However, for this phase, the thrusters are almost entirely turned
|
||
off, allowing for a nearly-natural trajectory to Mars rendezvous.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/EMS_plot}
|
||
\caption{Depictions of the faster Earth-Mars-Saturn trajectory found by the
|
||
algorithm to be most efficient; planetary ephemeris arcs are shown during the phase
|
||
in which the spacecraft approached them}
|
||
\label{ems}
|
||
\end{figure}
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/EMS_plot_noplanets}
|
||
\caption{Another depiction of the EMS trajectory, without the planetary ephemeris
|
||
arcs}
|
||
\label{ems_nop}
|
||
\end{figure}
|
||
|
||
The second and final leg of this trip exits the Mars flyby and, initially burns quite
|
||
heavily along the velocity vector in order to increase it's semi-major axis. After an
|
||
initial period of thrusting, though, the spacecraft effectively coasts with minor
|
||
adjustments until its rendezvous with Saturn just four and a half years later in June of
|
||
2032. The arrival $v_\infty$ is not particularly small, at $5.816058$ kilometers per
|
||
second, but this is to be expected as the arrival excess velocity was not considered as
|
||
a part of the cost function. If capture was not the final intention of the mission, this
|
||
may be of little concern. Otherwise, the low fuel usage of $446.92$ kilograms for a
|
||
$3500$ kilogram launch mass leaves much margin for a large impulsive thrust to enter
|
||
into a capture orbit at Saturn.
|
||
|
||
In this case the algorithm effectively realized that a higher-powered launch from
|
||
the Earth, then a natural coasting arc to Mars flyby would provide the spacecraft with
|
||
enough velocity that a short but efficient powered-arc to Saturn was possible with
|
||
effective thrusting. It also determined that the most effective way to achieve this
|
||
flyby was to increase orbital energy in the beginning of the arc, when increasing
|
||
the semi-major axis value is most efficient. All of these concepts are known to skilled
|
||
mission designers, but finding a trajectory that combined all of these concepts would
|
||
have required much time-consuming analysis of porkchop plots and combinations of
|
||
mission-design techniques. This approach is far more automatic than the traditional
|
||
approach.
|
||
|
||
The final quality to note with this trajectory is that it shows a tangible benefit of
|
||
the addition of the Lambert's solver in the monotonic basin hopping algorithm. Since the
|
||
initial arc is almost entirely natural, with very little thrust, it is extremely likely
|
||
that the trajectory was found in the Lambert's Solution half of the MBH algorithm
|
||
procedure.
|
||
|
||
\section{Slower, More Efficient Trajectory}
|
||
|
||
Next we'll analyze the nominally second-best trajectory. While the cost function
|
||
provided to the algorithm can be a useful tool for narrowing down the field of search
|
||
results, it can also be very useful to explore options that may or may not be of similar
|
||
"efficiency" in terms of the cost function, but beneficial for other reasons. By
|
||
outputting many different optimal trajectories, the MBH algorithm can allow for this
|
||
type of mission design flexibility.
|
||
|
||
To highlight the flexibility, a second trajectory has been selected, which has nearly
|
||
equal value by the cost function, coming in slightly lower. However, this trajectory
|
||
appears to offer some benefits to the mission designer who would like to capture into
|
||
the gravitational field of Saturn or minimize launch energy requirements, perhaps for a
|
||
smaller mission, at the expense of increased speed.
|
||
|
||
The first leg of this three-leg trajectory is quite similar to the first leg of the
|
||
previous trajectory. However, this time the launch energy is considerably lower, with a
|
||
$C_3$ value of only $40.4386$ kilometer per second squared. Rather than employ an almost
|
||
entirely natural coasting arc to Mars, however, this trajectory performs some thrusting
|
||
at about the apoapsis point of its orbit in order to raise the periapsis enough to
|
||
rendezvous at roughly the same incidence angle in Mars' orbit, but one revolution ahead.
|
||
In this case, the launch was a bit earlier, occurring in November of 2023, with the Mars
|
||
flyby occurring in mid-April of 2026. This will prove to be helpful in comparison with
|
||
the other result, as this mission profile is much longer.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/EMJS_plot}
|
||
\caption{Depictions of the slower Earth-Mars-Jupiter-Saturn trajectory found by the
|
||
algorithm to be the second most efficient; planetary ephemeris arcs are shown during
|
||
the phase in which the spacecraft approached them}
|
||
\label{emjs}
|
||
\end{figure}
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/EMJS_plot_noplanets}
|
||
\caption{Another depiction of the EMJS trajectory, without the planetary ephemeris
|
||
arcs}
|
||
\label{emjs_nop}
|
||
\end{figure}
|
||
|
||
The second phase of this trajectory also functions quite similarly to the second phase
|
||
of the previous trajectory. In this case, there is a little bit more thrusting necessary
|
||
simply for steering to the Jupiter flyby than was necessary for Saturn rendezvous in the
|
||
previous trajectory. However, most of this thrusting is for orbit raising in the
|
||
beginning of the phase, very similarly to the previous result. In this trajectory, the
|
||
Jupiter flyby occurs late July of 2029.
|
||
|
||
Finally, this mission also has a third phase. The Jupiter flyby provides quite a strong
|
||
$\Delta V$ for the spacecraft, allowing the following phase to largely be a coasting arc
|
||
to Saturn almost one revolution later. Because of this long coasting period, the mission
|
||
length increases considerably during this leg, arriving at Saturn in December of 2037,
|
||
over 8 years after the Jupiter flyby.
|
||
|
||
However, there are many advantages to this approach relative to the other trajectory.
|
||
While the fuel use is also slightly higher at $530.668$ kilograms, plenty of payload
|
||
mass is still capable of delivery into the vicinity of Saturn. Also, it should be noted
|
||
that the incoming excess hyperbolic velocity at arrival to Saturn is significantly
|
||
lower, at only $3.4774$ kilometers per second, meaning that less of the delivered
|
||
payload mass would need to be taken up by impulsive thrusters and fuel for Saturn orbit
|
||
capture, should the mission designer desire this.
|
||
|
||
Also, as mentioned before, the launch energy requirements are quite a bit lower. Having
|
||
a second mission trajectory capable of launching on a smaller vehicle could be valuable
|
||
to a mission designer presenting possibilities. According to an analysis of the Delta IV
|
||
and Atlas V launch configurations\cite{c3capabilities} in Figure~\ref{c3}, this
|
||
reduction of $C_3$ from around 60 to around 40 brings the sample mission to just within
|
||
range of both the Delta IV Heavy and the Atlas V in its largest configuration, neither
|
||
of which are possible for the other result, meaning that either different launch
|
||
vehicles must be found or mission specifications must change.
|
||
|
||
\begin{figure}
|
||
\centering
|
||
\includegraphics[width=\textwidth]{fig/c3}
|
||
\caption{Plot of Delta IV and Atlas V launch vehicle capabilities as they relate to
|
||
payload mass}
|
||
\label{c3}
|
||
\end{figure}
|
||
|
||
\chapter{Conclusion} \label{conclusion}
|
||
|
||
\section{Overview of Results}
|
||
|
||
A mission designer's job is quite a difficult one and it can be very useful to have
|
||
tools to automate some of the more complex analysis. This paper attempted to explore one
|
||
such tool, meant for automating the initial analysis and discovery of useful
|
||
interplanetary, low-thrust trajectories including the difficult task of optimizing the
|
||
flyby parameters. This makes the mission designer's job significantly simpler in that
|
||
they can simply explore a number of different flyby selection options in order to get a
|
||
good understanding of the mission scope and search space for a given spacecraft, launch
|
||
window, and target.
|
||
|
||
In performing this examination, two results were selected for further analysis. These
|
||
results are outlined in Table~\ref{results_table} below:
|
||
|
||
\begin{table}[h!]
|
||
\begin{small}
|
||
\centering
|
||
\begin{tabular}{ | c c c c c c | }
|
||
\hline
|
||
\bfseries Flyby Selection &
|
||
\bfseries Launch Date &
|
||
\bfseries Mission Length &
|
||
\bfseries Launch $C_3$ &
|
||
\bfseries Arrival $V_\infty$ &
|
||
\bfseries Fuel Usage \\
|
||
& & (years) & $\left( \frac{km}{s} \right)^2$ & ($\frac{km}{s}$) & (kg) \\
|
||
\hline
|
||
EMS & 2024-06-27 & 7.9844 & 60.41025 & 5.816058 & 446.9227 \\
|
||
EMJS & 2023-11-08 & 14.1072 & 40.43862 & 3.477395 & 530.6683 \\
|
||
\hline
|
||
\end{tabular}
|
||
\end{small}
|
||
\caption{Comparison of the two most optimal trajectories}
|
||
\label{results_table}
|
||
\end{table}
|
||
|
||
As can be seen in the table, both resulting trajectories have trade-offs in mission
|
||
length, launch energy, fuel usage, and more. However, both results should be considered
|
||
very useful low-thrust trajectories in comparison to other missions that have launched
|
||
on similar interplanetary trajectories, using both impulsive and low-thrust arcs with
|
||
planetary flybys. Each of these missions should be feasible or nearly feasible (feasible
|
||
with some modifications) using existing launch vehicle and certainly even larger
|
||
missions should be reasonable with advances in launch capabilities currently being
|
||
explored.
|
||
|
||
\section{Recommendations for Future Work}\label{improvement_section}
|
||
|
||
In the course of producing this algorithm, a large number of improvement possibilities
|
||
were noted. This work was based, in large part, on the work of Jacob Englander in a
|
||
number of papers\cite{englander2014tuning}\cite{englander2017automated}
|
||
\cite{englander2012automated} in which he explored the hybrid optimal control problem of
|
||
multi-objective low-thrust interplanetary trajectories.
|
||
|
||
In light of this, there are a number of additional approaches that Englander took in
|
||
preparing his algorithm that were not implemented here in favor of reducing complexity
|
||
and time constraints. For instance, many of the Englander papers explore the concept of
|
||
an outer loop that utilizes a genetic algorithm to compare many different flyby planet
|
||
choice against each other. This would create a truly automated approach to low-thrust
|
||
interplanetary mission planning. However, a requirement of this approach is that the
|
||
monotonic basin hopping algorithm algorithm must converge on optimal solutions very
|
||
quickly. Englander typically runs his for 20 minutes each for evolutionary fitness
|
||
evaluation, which is over an order of magnitude faster than the implementation in this
|
||
paper to achieve satisfactory results.
|
||
|
||
Further improvements to performance stem from the field of computer science. An
|
||
evolutionary algorithm such as the one proposed by Englander would benefit from high
|
||
levels of parallelization. Therefore, it would be worth considering a GPU-accelerated or
|
||
even cluster-computing capable implementation of the monotonic basin hopping algorithm.
|
||
These cluster computing concepts scale very well with new cloud infrastructures such as
|
||
that provided by AWS or DigitalOcean.
|
||
|
||
Finally, the monotonic basin hopping algorithm as currently written provides no
|
||
guarantees of actual global optimization. Generally optimization is achieved by running
|
||
the algorithm until it fails to produce newer, better trajectories for a sufficiently
|
||
long time. But it would be worth investigating the robustness of the NLP solver as well
|
||
as the robustness of the MBH algorithm basin drilling procedures in order to quantify
|
||
the search granularity needed to completely traverse the search space. From this
|
||
information, a new MBH algorithm could be written that is guaranteed to explore the
|
||
entire space.
|
||
|
||
\bibliographystyle{plain}
|
||
\nocite{*}
|
||
\bibliography{thesis}
|
||
|
||
\appendix
|
||
|
||
\chapter{Description of Analyzed EMS Mission}
|
||
|
||
\begin{verbatim}
|
||
Spacecraft: ingested
|
||
dry_mass: 200.0 kg
|
||
specific impulse: 3200.0 kg/s
|
||
max_thrust: 0.00025 kN
|
||
num_thrusters: 1
|
||
duty_cycle: 1.0
|
||
Launch Mass: 3500.0 kg
|
||
Launch Date: 2024-06-27T19:18:02.199
|
||
Launch V∞: [7.318672248992913, -1.529445415719206, -2.1232244559503632] km/s
|
||
Phase 1:
|
||
Planet: Mars
|
||
V∞_in: [7.432780013001029, -6.019743530186103, -1.6225406279089392] km/s
|
||
V∞_out: [8.396365726714938, -4.331889724433616, -2.2036070311537257] km/s
|
||
time of flight: 1.0927270179201803e8 seconds
|
||
arrival date: 2027-12-14T12:49:43.199
|
||
thrust profile:
|
||
[0.024235377030207825 0.00888170550219598 0.005275020106447728;
|
||
0.02399025570663619 0.009687152442138303 0.004849683247103559;
|
||
0.0237144984626321 0.010458650361418086 0.004447602441224652;
|
||
0.023365271668340265 0.011247241096547612 0.00410447324935814;
|
||
0.022940246865578544 0.011992030803744004 0.003821686419038526;
|
||
-0.0019431547304985285 0.022688407700327172 0.022416659898786426;
|
||
-0.0025131130230123333 0.023295814088309913 0.02221394673732401;
|
||
-0.003088246519407214 0.023857826650815685 0.022054838661828224;
|
||
-0.0037472235028326384 0.024343551156414713 0.021927933373391342;
|
||
-0.0044375927787249055 0.02478918143527712 0.021844394088438177;
|
||
-0.026105255729024664 0.038220540187214436 0.036279642377852375;
|
||
-0.026780618554629817 0.03853252364509573 0.03626804427696657;
|
||
-0.027455978112321453 0.038792575810529445 0.03625595201277916;
|
||
-0.028141168092815964 0.03898902440339647 0.03629021876552949;
|
||
-0.028809778187518193 0.03915971736492042 0.03633253932440753;
|
||
-0.060178198449693604 0.045863248834624344 0.0437825750159069;
|
||
-0.060832086109981906 0.04595200237956805 0.043845903840319694;
|
||
-0.0614637322369173 0.04600218250765508 0.04392587747786364;
|
||
-0.06208119542067157 0.046009361980197346 0.0440084727217644;
|
||
-0.06270325274839472 0.04598208821563583 0.0441084524424021;
|
||
-0.09349526192155118 0.04200434863352099 0.044382762987534824;
|
||
-0.09405840998459714 0.04192551288186246 0.04450187342394806;
|
||
-0.0946401085181183 0.04180206021631332 0.04461269535084477;
|
||
-0.09517609258972438 0.0416750889768316 0.04474097351038166;
|
||
-0.09569378105613152 0.041494386743123786 0.044851711195200004;
|
||
-0.12403677347765954 0.031062806563607895 0.042227942339192845;
|
||
-0.12452087322352202 0.030850448440375176 0.04235699321988777;
|
||
-0.12498864069285591 0.030627282643177295 0.0425049647904722;
|
||
-0.1254422057489061 0.03037782952573744 0.042636495744786264;
|
||
-0.1258602731937137 0.0301269442123315 0.04277532634721488;
|
||
-0.15685874809356395 0.015781803191410225 0.04125604163667304;
|
||
-0.15724410737409986 0.01548663048123 0.04140397438274824;
|
||
-0.15761543915061418 0.015174596469721642 0.041548585916012765;
|
||
-0.15796668613822373 0.014825860053564717 0.04170193705279365;
|
||
-0.15829074995512293 0.014483196359902813 0.04182661977219703;
|
||
-0.18321198149177034 -0.006718420238249819 0.037981449142584056;
|
||
-0.18350601725900687 -0.00708380754148209 0.0381377971297988;
|
||
-0.18375962522349495 -0.007485844440849063 0.038266130099955505;
|
||
-0.18401156514951283 -0.007868425114854648 0.03841853545942695;
|
||
-0.18423751994903437 -0.0082750576401688 0.03856460443961429;
|
||
-0.2024862754992264 -0.034848711542048265 0.03336400247905138;
|
||
-0.2026707344937845 -0.035283049103160546 0.03350436335716191;
|
||
-0.20284629279949265 -0.035719294394551654 0.03364110087797018;
|
||
-0.2029945887354837 -0.036172019668414865 0.03379806025832671;
|
||
-0.20311261765668395 -0.0366322645727282 0.0339245665278438;
|
||
-0.21245470288929072 -0.06717661453328558 0.027283225271794283;
|
||
-0.21254193080868825 -0.0676387475174252 0.02742259138543629;
|
||
-0.2126099084522529 -0.0681289229181636 0.027561473450575184;
|
||
-0.21265945852435034 -0.06860590656971097 0.02769054749028669;
|
||
-0.21269589565868435 -0.06910164866049198 0.027835587629257585;
|
||
-0.22095520431071133 -0.1034315240983098 0.02195619219040112;
|
||
-0.22095363324455022 -0.1039363396014177 0.02208001814134371;
|
||
-0.2209258519378579 -0.10444228817076168 0.02218803322309374;
|
||
-0.22087725118828272 -0.10492891836947225 0.022330163267422397;
|
||
-0.22080533929239932 -0.10544299107251072 0.022449713415175286;
|
||
-0.19442709993064522 -0.14170202258034095 0.011558151934536999;
|
||
-0.19431523610918064 -0.14220741730049713 0.011667367575730591;
|
||
-0.19417317244980273 -0.14271188729460021 0.01178096590548684;
|
||
-0.1939941491085289 -0.1432112391035578 0.011875683618928344;
|
||
-0.19379659796210602 -0.1437113505886065 0.011971596929650875;
|
||
-0.20839820924658076 -0.18973385738164752 0.009307451886292192;
|
||
-0.20815817838894604 -0.19021671829427775 0.009393548264616419;
|
||
-0.20788715281082848 -0.1907053323143535 0.009473574125552149;
|
||
-0.20759267564754758 -0.19117297352465665 0.009563518034576692;
|
||
-0.20725730932050385 -0.19164267398389476 0.00963504586160516;
|
||
-0.1961075700059922 -0.24290142178750415 0.0038507129511980015;
|
||
-0.19572169681551538 -0.24334914331638396 0.003899832796131259;
|
||
-0.19530334973600788 -0.24379282734187754 0.003967473955005566;
|
||
-0.19482592064607568 -0.2442236000134374 0.004013758357476628;
|
||
-0.19435132556752394 -0.2446385052975962 0.004041938132303195;
|
||
-0.16465195313849423 -0.3004276434505404 -0.0025477773747229144;
|
||
-0.16406454228555667 -0.3008173014857693 -0.002534902557883806;
|
||
-0.16344445045215752 -0.3011845231864255 -0.0025138987633786056;
|
||
-0.1627790118528474 -0.30153330249237564 -0.0025126609092452866;
|
||
-0.16205639079546422 -0.3018791849184296 -0.00252773549828917;
|
||
-0.11454723260483883 -0.36146563395819015 -0.008724503528927063;
|
||
-0.11374530519473426 -0.3617514022893357 -0.008763083025138563;
|
||
-0.11286008364160728 -0.3620075243586088 -0.008811341523550892;
|
||
-0.11192599887952116 -0.36222778056355126 -0.008862827469500274;
|
||
-0.11094519109599958 -0.3624097362213787 -0.008962625818756769;
|
||
-0.02391505591401128 -0.41864273911091776 -0.015187178892217643;
|
||
-0.02279902972952809 -0.4187484864971973 -0.01532144436549937;
|
||
-0.02162632152143365 -0.4187931725195911 -0.015456346700485964;
|
||
-0.020391897110791923 -0.4187740995712499 -0.015610805544610595;
|
||
-0.019101999843222355 -0.41868878897997275 -0.01579853500286071;
|
||
0.18376634235176048 -0.4320763402653023 -0.02817451009484391;
|
||
0.18514409741232546 -0.4318093470304242 -0.02842018614555766;
|
||
0.1865424521966812 -0.4314123035364245 -0.028679538560778695;
|
||
0.18794100981484788 -0.43087767476266803 -0.028977178116178365;
|
||
0.18932086049377508 -0.430176573615346 -0.02927532805815704;
|
||
0.4837483008894513 -0.30082715558431117 -0.05230879791806509;
|
||
0.4849770899365583 -0.29968442455901756 -0.052680313525351165;
|
||
0.48605025678632957 -0.29834697789345743 -0.05307023899553684;
|
||
0.48693403264870355 -0.296777549423668 -0.05347081616460879;
|
||
0.4875876938768627 -0.29502768045570976 -0.05387046513476967;
|
||
0.5997886548585618 -0.05017567151672444 -0.04220063350923577;
|
||
0.5999113857257048 -0.04825130664045737 -0.0425898328606256;
|
||
0.5997797857664303 -0.046377827441315855 -0.04295737068172849;
|
||
0.5994264737794556 -0.04459532310393294 -0.04329715637337397;
|
||
0.5988885340570684 -0.04294830975144203 -0.043619159341178826] %
|
||
Phase 2:
|
||
Planet: Saturn
|
||
V∞_in: [5.118021911011515, 2.7626475209564307, 0.012833534427407025] km/s
|
||
V∞_out: [0.04582457242616684, 0.2173338665561733, -0.5293480027886823] km/s
|
||
time of flight: 1.425235096053827e8 seconds
|
||
arrival date: 2032-06-20T02:41:32.199
|
||
thrust profile:
|
||
[0.6329930516298814 0.3754387300559965 -0.041278153465157376;
|
||
0.6316440411687961 0.3771539432333103 -0.04188668511010197;
|
||
0.6302151630695931 0.37830148957229065 -0.04241470095684055;
|
||
0.6288015612616553 0.3789983607933317 -0.04289870652729237;
|
||
0.6274575627177201 0.37938177126004463 -0.04331674239208846;
|
||
0.3444831378016049 0.4584427028939501 -0.01962983038346585;
|
||
0.343350313682236 0.45843215556913436 -0.019974532323669136;
|
||
0.3423488229049882 0.4583226246957569 -0.02026887281309082;
|
||
0.3414712037645477 0.45814459638568994 -0.020531801085877724;
|
||
0.34069847825976424 0.4579222760137032 -0.020769373866713528;
|
||
0.2309654960711884 0.3890497901392047 -0.032657315112688504;
|
||
0.23037656940414789 0.3887852800660396 -0.03283600644592424;
|
||
0.22986064892155578 0.3885136473355805 -0.03299996243030687;
|
||
0.2294073521107295 0.3882409934584674 -0.0331346252769696;
|
||
0.22900442123476075 0.3879741809050926 -0.033255534578159524;
|
||
0.1776968304910734 0.2857905066551956 -0.052473839368448266;
|
||
0.17738168095719187 0.28553616026198864 -0.05255798491622259;
|
||
0.17710100604422802 0.2852893588307732 -0.05263007802104745;
|
||
0.17684981431112315 0.285050899002354 -0.05269073773925025;
|
||
0.17661826565812588 0.2848216419041406 -0.052736460878895185;
|
||
0.16302803071535937 0.2288440324934438 -0.05295539189756392;
|
||
0.16284148405624235 0.22863476718195005 -0.052979024771766504;
|
||
0.16267376993666366 0.22843348716311554 -0.052992796276301664;
|
||
0.16252035790823205 0.22823748939942143 -0.0529990756032091;
|
||
0.16237974278262335 0.22805068690324026 -0.052998820166630004;
|
||
0.13417956270125225 0.18796600274090727 -0.05143256089624221;
|
||
0.1340623808993445 0.18779402300149806 -0.05141714589345775;
|
||
0.13395315890550555 0.18762968151984613 -0.051392473738747876;
|
||
0.1338523104178968 0.18747060727932557 -0.05136297638267751;
|
||
0.13375902683375174 0.18731665141801573 -0.05132801422329071;
|
||
0.12758214347585456 0.15340398397435048 -0.05168052476232358;
|
||
0.12749939620036213 0.15326098428950718 -0.051633621693863346;
|
||
0.12742364258649297 0.15312464804515485 -0.051582232628574747;
|
||
0.127351796100246 0.15299516000753102 -0.05152580226049547;
|
||
0.12728610095610415 0.15286771555716733 -0.05146438099691739;
|
||
0.10363864135617362 0.13303810609450925 -0.04523719298505366;
|
||
0.10357714058263788 0.13292093309625866 -0.04516603592319711;
|
||
0.10352044081060598 0.13280554812600356 -0.04509328051622902;
|
||
0.10346628293604881 0.1326945241515048 -0.04501460858407201;
|
||
0.10341668769647967 0.13258690813141388 -0.04493381158618556;
|
||
0.08849399118613269 0.11680369317500992 -0.039280465917766516;
|
||
0.08844465220057159 0.11670144773928037 -0.039190520117983456;
|
||
0.0883990105248394 0.11660286252447159 -0.03910152940381651;
|
||
0.08835588260324095 0.1165080598699651 -0.039008555813330265;
|
||
0.08831419794222022 0.11641486614981417 -0.03891218778502019;
|
||
0.07376177902859117 0.10394822833846208 -0.03269665688227769;
|
||
0.07372107116344209 0.10385982839740802 -0.03259505692154852;
|
||
0.07368351060048883 0.10377297305809725 -0.03249294989285947;
|
||
0.07364622913434896 0.10368999081313057 -0.03238728844927299;
|
||
0.07360970006720247 0.10360783127082533 -0.03227792310783393;
|
||
0.05680370570981956 0.10115866945703107 -0.02146434058106377;
|
||
0.05676906375450203 0.10108215492628116 -0.021352075436948753;
|
||
0.056736188710490354 0.10100483178367703 -0.021237396204120847;
|
||
0.0567011948020336 0.10092951637553615 -0.021121532106371934;
|
||
0.05666814786517165 0.10085693189940123 -0.021004878311086102;
|
||
0.0420923731810672 0.09492980078603513 -0.009680493755208174;
|
||
0.0420596575933162 0.09486013616427673 -0.009559253194484718;
|
||
0.04202961101166327 0.09478983646575409 -0.009437219858373647;
|
||
0.04199789569028146 0.09472227838497276 -0.009314186603688056;
|
||
0.041969188425221834 0.09465571700171967 -0.009188458157484392;
|
||
0.01719386670041908 0.09296262595556959 0.0089115031054126;
|
||
0.0171642684422979 0.09289882405769614 0.009039422189717244;
|
||
0.017135252657330843 0.09283621883835598 0.009169202649077841;
|
||
0.01710552610610665 0.0927741969279537 0.00929901662916952;
|
||
0.01707771370249971 0.09271327760075816 0.00943173754954676;
|
||
-0.0016483799505183218 0.07938028069231376 0.024714217382829702;
|
||
-0.0016754504265349072 0.07932176849316722 0.0248486613908432;
|
||
-0.0017043398581652579 0.07926283876982425 0.02498319887196984;
|
||
-0.001732622223154404 0.07920473576019973 0.02511898881854544;
|
||
-0.0017608077747973984 0.07914815845852285 0.025255744358647744;
|
||
-0.008092509276578796 0.05150236444831255 0.04578840784797782;
|
||
-0.008120068587494467 0.051446574492129415 0.04592756157575969;
|
||
-0.008148281565883169 0.05139115211486721 0.046067533608893256;
|
||
-0.008176404453626634 0.05133685031323035 0.04620825230233717;
|
||
-0.00820358892659607 0.051282994067783375 0.04634913408495792;
|
||
0.008342964282222377 0.03510896165031955 0.06135284102436636;
|
||
0.008314385245044785 0.035057877431210305 0.06149607013527497;
|
||
0.008286633745210943 0.03500387246553423 0.061638798026826;
|
||
0.008258897124154313 0.03495281419992153 0.06178278436294488;
|
||
0.008231407299296863 0.034900022178568836 0.0619271330435043;
|
||
0.049338794163242446 0.010218649631108702 0.03518291555481896;
|
||
0.04931153496147123 0.010167641433603034 0.03532738870918014;
|
||
0.0492836121523927 0.010116746246469603 0.035472649037170186;
|
||
0.0492556394568435 0.010066283003036306 0.035617726485773375;
|
||
0.049227886385957084 0.010015154199619465 0.03576338237025743;
|
||
0.028999848123421643 0.013076326444851995 -0.0020538061417818116;
|
||
0.02897144523491084 0.013025776906269888 -0.0019074186593764;
|
||
0.028943969210132623 0.01297546972092727 -0.0017610664493855983;
|
||
0.028916486144297066 0.012925951671522194 -0.0016148146309075833;
|
||
0.028888610914008794 0.012876314501514538 -0.0014679290423102944;
|
||
-0.002388102613327097 0.0009451120845601065 -0.00560054558587805;
|
||
-0.0024162568174164725 0.0008956034389303988 -0.005453162652982702;
|
||
-0.002444446078784889 0.0008470308856443604 -0.0053049735651656636;
|
||
-0.002472450721052887 0.0007975886693055877 -0.00515747636345846;
|
||
-0.002500372523042182 0.0007481141860366865 -0.005009629534358225;
|
||
-0.026190217031866518 -0.01783065662929325 -0.005889671840944686;
|
||
-0.02621824113539601 -0.017879866529648538 -0.005741535261451314;
|
||
-0.026246514731744483 -0.017928783707094893 -0.005593366094207994;
|
||
-0.02627442891538959 -0.017977869804518255 -0.005444920908759916;
|
||
-0.026302480351648998 -0.01802662879261315 -0.005296633832816068] %
|
||
Mass Used: 446.92274637633045 kg
|
||
Launch C3: 60.41024885818919 km²/s²
|
||
||V∞_in||: 5.816058313518406 km/s
|
||
\end{verbatim}
|
||
|
||
\chapter{Description of Analyzed EMJS Mission}
|
||
|
||
\begin{verbatim}
|
||
Spacecraft: ingested
|
||
dry_mass: 200.0 kg
|
||
specific impulse: 3200.0 kg/s
|
||
max_thrust: 0.00025 kN
|
||
num_thrusters: 1
|
||
duty_cycle: 1.0
|
||
Launch Mass: 3500.0 kg
|
||
Launch Date: 2023-11-08T16:28:05.002
|
||
Launch V∞: [-4.335012055084635, 4.544887484580865, 0.9951321890482566] km/s
|
||
Phase 1:
|
||
Planet: Mars
|
||
V∞_in: [-7.121293324402133, 3.1557449977550442, 0.2574124611969375] km/s
|
||
V∞_out: [-5.88728969114733, 5.091798086780573, 0.4318349867190985] km/s
|
||
time of flight: 7.69225867524608e7 seconds
|
||
arrival date: 2026-04-16T23:51:11.002
|
||
thrust profile:
|
||
[-0.03956033280289971 0.014502274153396886 0.013767483820172557;
|
||
-0.041576479761307766 0.010774744221230172 0.015954618100526122;
|
||
-0.04353519609600167 0.007026291842675089 0.018015518823847464;
|
||
-0.04547258505717467 0.0030483408188381605 0.01993777253806961;
|
||
-0.047309011488274606 -0.0012193548498561485 0.021657327331670945;
|
||
-0.052415487659225525 -0.06416407139171071 0.01707388662648066;
|
||
-0.053795860137490825 -0.06910602876361567 0.018377866968160055;
|
||
-0.05478537648848572 -0.07435827994314907 0.01948872251679001;
|
||
-0.05534637430302962 -0.07987969781686377 0.020391393740754694;
|
||
-0.05542234511951779 -0.08557119998417642 0.02112165287536681;
|
||
-0.04603653494469639 -0.11758339178872364 0.010478731803032337;
|
||
-0.045131078072944794 -0.12330822437476184 0.010879231121188585;
|
||
-0.04374974899764054 -0.12899509823771538 0.011155318621208977;
|
||
-0.04192900589988677 -0.1345812372404263 0.011297583377631603;
|
||
-0.039688700024628897 -0.1399961637348015 0.011314220390491788;
|
||
-0.021847974947327285 -0.16435052102367306 0.002129770511850757;
|
||
-0.0188961179478137 -0.16932814279205108 0.0019686779710134782;
|
||
-0.015599029971580343 -0.17407912298359424 0.0017313208387575577;
|
||
-0.012031227415560878 -0.17858564810418573 0.0013985317033249586;
|
||
-0.008207263100371613 -0.18286189049060542 0.0010060475404519795;
|
||
0.014387339499824707 -0.19615027292721257 -0.00697183966316377;
|
||
0.018642044330809005 -0.19987677851880534 -0.007463937791430979;
|
||
0.023072513804048733 -0.20333133902195877 -0.00801459777552152;
|
||
0.027678111409082235 -0.2065512162021133 -0.008611471741542965;
|
||
0.032416273918375434 -0.20950234109176658 -0.009241460528211365;
|
||
0.05727065647767366 -0.2191433536041639 -0.014881165830189167;
|
||
0.062210812252887084 -0.22156351523857395 -0.015576788935959698;
|
||
0.06721613957517825 -0.22373619052124705 -0.016302796271852785;
|
||
0.07231447457452297 -0.2256683324065783 -0.01705477220837316;
|
||
0.07744821845226961 -0.22736856704804745 -0.017819357428142422;
|
||
0.10200350811113468 -0.2278163660730623 -0.021691173614823873;
|
||
0.10718625444262414 -0.22902365778493775 -0.022499165329662302;
|
||
0.11238587770647483 -0.23001847034344625 -0.023321075083325548;
|
||
0.1175907742151868 -0.23079464658829757 -0.024158451967652046;
|
||
0.12281268073016817 -0.2313256017139053 -0.025009765392792066;
|
||
0.14734148617688178 -0.23193110054122293 -0.026828068899809883;
|
||
0.15246062165647492 -0.2320289354192666 -0.027693691138489004;
|
||
0.15756013484944287 -0.23190919000372037 -0.0285724598987323;
|
||
0.16262957652479712 -0.23155961671710285 -0.029454306835995363;
|
||
0.16762616877319578 -0.2310186539384696 -0.030330493888002703;
|
||
0.19021986463225274 -0.2237256987767045 -0.030832740235886377;
|
||
0.19505197721608555 -0.22276253734494164 -0.0317116881014192;
|
||
0.19984023688892388 -0.22157614923229768 -0.03260448718125773;
|
||
0.204553599155851 -0.22018960071693844 -0.033482125661950926;
|
||
0.20920235719105212 -0.21858157069918113 -0.0343665518915779;
|
||
0.2279686631467231 -0.2074422688851766 -0.03356807904648546;
|
||
0.2323853660755647 -0.2054201599551011 -0.03444494413786678;
|
||
0.23671311464094724 -0.2032047355747267 -0.03531629778279262;
|
||
0.24094332815999528 -0.20077041104419038 -0.0361806846806879;
|
||
0.24508066397640577 -0.1981405377685498 -0.03702438323954723;
|
||
0.2620323690523707 -0.18676055455915724 -0.035321161962334015;
|
||
0.2658847553944062 -0.1837111520291871 -0.03616029682180003;
|
||
0.2696275418295141 -0.18045886191354016 -0.03698682357490637;
|
||
0.27327302946151294 -0.17699706837176704 -0.03780180073404257;
|
||
0.27678271265735493 -0.17334151560199165 -0.03859889067141412;
|
||
0.2909191888741266 -0.15618402096479228 -0.03611127095741274;
|
||
0.2941076934397531 -0.1520807594030151 -0.036885574493546645;
|
||
0.2971711407675296 -0.1477847558967073 -0.03765273809608395;
|
||
0.3000921225525933 -0.14327687220290794 -0.03840483203030062;
|
||
0.302873185822033 -0.13857943321564622 -0.039116765312786565;
|
||
0.3116655641933065 -0.11991931768047741 -0.0361834413012538;
|
||
0.31410598858453276 -0.11476986707549652 -0.03686954460237472;
|
||
0.3163852071623763 -0.10941364316275648 -0.03753204013869077;
|
||
0.31848712811881486 -0.10386237940041423 -0.03816423179059982;
|
||
0.3204262692565581 -0.0981154571983449 -0.03878521398590498;
|
||
0.3256678044130722 -0.07838444022075244 -0.03511972772107344;
|
||
0.32721151962628264 -0.07219320123535682 -0.035684990170265496;
|
||
0.3285634628040565 -0.0658097723763517 -0.03621630172719094;
|
||
0.3296774910670562 -0.059216512263922466 -0.03672269403520816;
|
||
0.3306037421484716 -0.052440905826970474 -0.03719693970630558;
|
||
0.33328388923267627 -0.030327534780048324 -0.033168979778165145;
|
||
0.33371746054004786 -0.023134888383537524 -0.033576710353787294;
|
||
0.33389175751698497 -0.01574903993297518 -0.03393973891492299;
|
||
0.33380633367079 -0.008182342781467823 -0.0342573724908797;
|
||
0.33342660729643503 -0.0004248833440292039 -0.03453996222672837;
|
||
0.3390725685662831 0.02756569570957198 -0.030334702196871285;
|
||
0.3380833432257479 0.03567047160764992 -0.030528989791387733;
|
||
0.33675065806255133 0.04393525489567044 -0.030663612383741653;
|
||
0.33506715162123424 0.05238261972835011 -0.030758858718819428;
|
||
0.3330117665436285 0.0609445328094011 -0.03079110300637972;
|
||
0.311092400758174 0.09346079037581413 -0.025420523227424406;
|
||
0.30810889360138993 0.10225487688815191 -0.025340625186851942;
|
||
0.3046520673782745 0.1111657055432318 -0.02519931087775893;
|
||
0.3006841235275496 0.12016917200239183 -0.024980281657263303;
|
||
0.2961738618627909 0.1292489694856472 -0.024701968974558373;
|
||
0.2735165965939293 0.1619979905410212 -0.01869630655188906;
|
||
0.2676587760768934 0.1710598613565007 -0.018258442297774177;
|
||
0.2611268574754945 0.18010472448692472 -0.017743059114779546;
|
||
0.2538542304726611 0.18910841101106657 -0.01712960149634353;
|
||
0.24581028537105218 0.19800484453654849 -0.016418319274889952;
|
||
0.20666869884086048 0.24449798918762772 -0.010479404541833484;
|
||
0.19661838861414238 0.25278629475126474 -0.009583933716756832;
|
||
0.185593310022131 0.26078424163575775 -0.008578297521869437;
|
||
0.1735491928214268 0.2684089062735019 -0.007463828245551458;
|
||
0.1604241654210947 0.2755419168542371 -0.006243673883006362;
|
||
0.11764420987192885 0.3026128805297053 -0.0027808955696240526;
|
||
0.1020256537979734 0.30819300429344426 -0.0013314690854612414;
|
||
0.08524068300499618 0.31284158307591525 0.0002381332205356246;
|
||
0.06730138419613374 0.3163648963620088 0.0019230866854307947;
|
||
0.04826513140941637 0.3185318511746061 0.003707513869349553] %
|
||
Phase 2:
|
||
Planet: Jupiter
|
||
V∞_in: [-2.4700745323840945, 3.5992843576814684, -0.04897910356619292] km/s
|
||
V∞_out: [2.3726396804033665, 3.660071493225041, -0.18342240674607424] km/s
|
||
time of flight: 1.0365627669349752e8 seconds
|
||
arrival date: 2029-07-29T17:15:47.002
|
||
thrust profile:
|
||
[-0.05988472231417988 0.5098718574120789 0.003380381450714991;
|
||
-0.09985679108378966 0.5099970456619252 0.007680524392304216;
|
||
-0.14083421951474379 0.5051230227055744 0.012059671089214113;
|
||
-0.1806537704798288 0.49506022146586576 0.01638507392002354;
|
||
-0.21707969492739523 0.48021220494730227 0.02057113683022605;
|
||
-0.32471394771469786 0.4295719891811384 0.01872201874781426;
|
||
-0.347149092726571 0.4026010250742786 0.022369089660714277;
|
||
-0.3635390170080211 0.37415292304681513 0.025671314432171383;
|
||
-0.3742393760147842 0.3457764845105525 0.02865266479348716;
|
||
-0.3800621096770123 0.31860555955757813 0.031325752410159356;
|
||
-0.39269541135392216 0.2188962027151091 0.03258569777778156;
|
||
-0.39145308216679325 0.1937691388951771 0.03471143696114105;
|
||
-0.3880119345885402 0.171349220288765 0.03661393416731571;
|
||
-0.3830191997329326 0.15157634467357106 0.03831373113348574;
|
||
-0.3769823877981445 0.13425557848329225 0.039836235108387456;
|
||
-0.35514383707999975 0.0942343336397406 0.04952161544225744;
|
||
-0.3477490228181278 0.08104440223464975 0.050723794597789085;
|
||
-0.3401775362653594 0.06964193109114582 0.0517919222219017;
|
||
-0.3325828482029597 0.05978311736608686 0.05273028845807096;
|
||
-0.32506788814378285 0.05127786041217034 0.05356197088206576;
|
||
-0.30127664757064254 0.03503792324857105 0.0678775597218983;
|
||
-0.29389828176960936 0.028719164402623547 0.06849638363606865;
|
||
-0.2867579056968465 0.02327696635356762 0.06903033183753615;
|
||
-0.279878902965117 0.018597268896111088 0.06948001101246397;
|
||
-0.2732639685923939 0.014579106100064064 0.06985564581182432;
|
||
-0.25143317328935577 0.004822032764249745 0.08096437986103547;
|
||
-0.24522909200643966 0.0018873197727133813 0.08119267602988196;
|
||
-0.23928898621498146 -0.000608531122887676 0.08136448741577101;
|
||
-0.23360561093639462 -0.0027289405875453327 0.0814753944747385;
|
||
-0.22816865402914116 -0.004512956524485317 0.08153804920841505;
|
||
-0.21234203920450526 -0.011413644583325671 0.0852674329374285;
|
||
-0.20731416132016534 -0.012646855647744948 0.08522622899852404;
|
||
-0.2025030171885313 -0.01365436394320526 0.08514312487442337;
|
||
-0.19789976269436427 -0.014468226957282103 0.08501596072203135;
|
||
-0.19348767693675864 -0.015105863083131995 0.08484912080149803;
|
||
-0.18004901233725823 -0.02060449520344064 0.08340217879018821;
|
||
-0.1759662862657398 -0.020951068437642564 0.08316118843675945;
|
||
-0.17205156414511996 -0.021182166364363285 0.08288603181978693;
|
||
-0.1682940386234932 -0.021310823181451173 0.08257708638661887;
|
||
-0.16468683810346085 -0.021346310895505764 0.08223873732174773;
|
||
-0.1543320368498933 -0.025660974285847696 0.07442424976309485;
|
||
-0.15097888054040368 -0.025541687729640335 0.07402819847396758;
|
||
-0.14775311478422373 -0.02536136401215251 0.0736086638129803;
|
||
-0.14464992068219282 -0.02512728735566848 0.07316223230628852;
|
||
-0.1416558613450808 -0.024845085523198057 0.07269211361342709;
|
||
-0.1415623768665157 -0.028792559619746007 0.06345781418680149;
|
||
-0.13878387444913906 -0.028431438277586155 0.06294422712493711;
|
||
-0.13610076696164725 -0.028037829197217028 0.06241031547053575;
|
||
-0.1335080193450605 -0.027616248159230982 0.061856689730120734;
|
||
-0.1310011543407292 -0.027173070081896185 0.061282177796602645;
|
||
-0.11649284418400539 -0.029718660679223928 0.05059493418875514;
|
||
-0.11412747793329776 -0.029235169928036604 0.04998534694909494;
|
||
-0.11183185659474973 -0.028739156807069538 0.049357459365379885;
|
||
-0.10960785386698936 -0.028230136583549347 0.04871458263785479;
|
||
-0.107449414764391 -0.027712732070757987 0.048054900238084765;
|
||
-0.1010067742543605 -0.030035913148180264 0.03985652411759926;
|
||
-0.0989658692805771 -0.029504447321812382 0.03916932532994344;
|
||
-0.09698208078877331 -0.02896899150495436 0.038466386559246106;
|
||
-0.09505063546052801 -0.028431606854815376 0.037751657245212324;
|
||
-0.09317143312733227 -0.027892622486673277 0.03702228867717901;
|
||
-0.08755719665655483 -0.029654460591863302 0.03165112419363048;
|
||
-0.08576743409266635 -0.029114549477146912 0.03089813129635783;
|
||
-0.08402030511855238 -0.028578111035422484 0.030133890557482588;
|
||
-0.08231359723039965 -0.028044148889432248 0.029358424561623162;
|
||
-0.08064580281614322 -0.027512635462536118 0.028571943924095334;
|
||
-0.07562099754108047 -0.029225028527746767 0.026135747885363513;
|
||
-0.07402205124189658 -0.02870096662135258 0.025329546723042964;
|
||
-0.07245538189513678 -0.02818103553603966 0.024513810950172413;
|
||
-0.07091914838573711 -0.027667562066487267 0.0236892820980254;
|
||
-0.06941194567127179 -0.02715852307168577 0.022855649696120566;
|
||
-0.06444725216331891 -0.028129807594017883 0.02241381197641579;
|
||
-0.0629887732988159 -0.02763280189951615 0.021563370700178854;
|
||
-0.06155686282996444 -0.027142510126807948 0.02070601768968898;
|
||
-0.060147421316205596 -0.026656699587050477 0.019841340933161766;
|
||
-0.05875974806303113 -0.026179197427987327 0.01896864012786145;
|
||
-0.05474981164171225 -0.027817938578884576 0.020689703314815632;
|
||
-0.05339834306170722 -0.02735214679579984 0.019804305041766553;
|
||
-0.052064855674675614 -0.026893378665906336 0.0189127175609396;
|
||
-0.05074918251335782 -0.02644100703367326 0.018015696025811878;
|
||
-0.04944799401648106 -0.02599578821354754 0.01711307693411162;
|
||
-0.04436520947052908 -0.02715696450606668 0.02003529214607189;
|
||
-0.043089584107393296 -0.02672393174200551 0.01912180324645498;
|
||
-0.04182530873924276 -0.026296220647751358 0.01820385010281347;
|
||
-0.04057366905297342 -0.025876206610750012 0.01728182977712425;
|
||
-0.039331241703650065 -0.02545942425212438 0.01635625450605495;
|
||
-0.02725788215620618 -0.028444223181240496 0.02297009691214131;
|
||
-0.026027590759992635 -0.02804148220354547 0.022036752187993003;
|
||
-0.024805147240372426 -0.02764378253724356 0.02110101491862047;
|
||
-0.023589347866205486 -0.02725091384718256 0.020161683409456097;
|
||
-0.022379917120656196 -0.026863185354985736 0.019219647145726874;
|
||
0.0024611476896890623 -0.01530199690864104 0.0012834357703477152;
|
||
0.0036707313966874316 -0.014923349116622638 0.0003322506378020735;
|
||
0.0048766102964706085 -0.01454799372327185 -0.0006210748132951684;
|
||
0.0060798953671353006 -0.014175483649539933 -0.0015758044856345728;
|
||
0.007280016024428352 -0.013804886358427955 -0.0025320598985469427;
|
||
0.010063656512470718 -0.011858559656874148 -0.0006649670891605682;
|
||
0.0112610952310549 -0.01149290667393944 -0.0016238692554735288;
|
||
0.012457556187847591 -0.011129815323658804 -0.002582669900111043;
|
||
0.013653698635247962 -0.010768062445170068 -0.0035421759772075873;
|
||
0.014850558635080485 -0.010407794132715763 -0.004501417594322374] %
|
||
Phase 3:
|
||
Planet: Saturn
|
||
V∞_in: [-1.288181310839508, 3.2263876606130104, -0.15259601195389053] km/s
|
||
V∞_out: [0.48748673373831564, 0.4905484443382068, 0.477662291276709] km/s
|
||
time of flight: 2.643066332108945e8 seconds
|
||
arrival date: 2037-12-13T19:46:20.002
|
||
thrust profile:
|
||
[0.05787434800100662 0.06365972987059527 -0.004690937847485817;
|
||
0.058804962259307765 0.0631535995879651 -0.004740314009454671;
|
||
0.05983542454257423 0.06268609928169047 -0.004788047127416414;
|
||
0.060975433718026835 0.062268789932902475 -0.004835524503135446;
|
||
0.062225980024771796 0.06191324474149255 -0.004880865078012681;
|
||
0.06285801042135475 0.054884663480775316 -0.004819160140313061;
|
||
0.06433749312618502 0.054701052047457566 -0.004861768137879246;
|
||
0.06593351900262197 0.05462711861876099 -0.004903833691377991;
|
||
0.06764791684805822 0.05468390798107871 -0.004945075327582575;
|
||
0.06947857183941591 0.05489653022456621 -0.004980756541231241;
|
||
0.07158131197912566 0.05370903624290616 -0.004989096177551872;
|
||
0.07363165632802447 0.05431132268456726 -0.005020718083045292;
|
||
0.07577820988565821 0.05515538438056131 -0.005046798453303127;
|
||
0.0780073675020361 0.05627588650036708 -0.005067760214972139;
|
||
0.08029568923374143 0.05771722861801827 -0.005083195330091614;
|
||
0.08641404640859522 0.06540989432376075 -0.005159860038250109;
|
||
0.08872876215837687 0.06761198691109115 -0.005157363382001936;
|
||
0.09098645045139106 0.07027159619046919 -0.005144483070629835;
|
||
0.09311920513687692 0.07343855878826683 -0.005115355981375685;
|
||
0.0950435632074984 0.07715907512797704 -0.005070050038753845;
|
||
0.0908660761179946 0.08874696789878138 -0.004496676548803941;
|
||
0.09203697993375162 0.09364596073645495 -0.004406109321394195;
|
||
0.09260828024327085 0.09915333146965871 -0.004286107929658186;
|
||
0.09240637528208999 0.10523220896976805 -0.004130286277826924;
|
||
0.09123868316489085 0.11179453929787758 -0.003935854513014516;
|
||
0.07912465530851204 0.13596343038757475 -0.0028759951878351217;
|
||
0.07549824173301634 0.14287262484776403 -0.002591877765754475;
|
||
0.07044590636435358 0.1495962483655315 -0.002262681758105387;
|
||
0.06394805064460637 0.15579217045212151 -0.0018902947270343009;
|
||
0.056112548356250944 0.16109946342889161 -0.0014792330372583168;
|
||
0.01904757213758233 0.17335141612932936 0.0004365544649561594;
|
||
0.009384103454269783 0.17596362750956665 0.000882767166216666;
|
||
-0.0006032423594752967 0.17701150517873598 0.0013263367626259854;
|
||
-0.010480530421161873 0.17651567069549542 0.0017538590199095807;
|
||
-0.019864131305118157 0.17461251767364694 0.0021520045503883646;
|
||
-0.05544288687740597 0.16702351088257864 0.0039606324298478435;
|
||
-0.06295277675747966 0.16300176340850153 0.004276097768694192;
|
||
-0.06939936202391099 0.15831833114553567 0.004547844760238192;
|
||
-0.07477991730883271 0.15321727880857572 0.004777783846248338;
|
||
-0.07914692452014976 0.14790369716999832 0.004966416095723749;
|
||
-0.09768056439601996 0.1315897001493129 0.0060927517267796195;
|
||
-0.10025432283625794 0.12627019907626186 0.006210956306072848;
|
||
-0.10211674495356184 0.12111183400400113 0.006300806993342294;
|
||
-0.10337178322590118 0.11617115733330916 0.006365439420741851;
|
||
-0.10411315654262526 0.11148534135157803 0.006408856802719585;
|
||
-0.11145137599334029 0.09663646118392062 0.006968262186688305;
|
||
-0.11139513964195542 0.0924950143823055 0.006977002971475946;
|
||
-0.11104614609848756 0.08863309161697829 0.00697321899610817;
|
||
-0.11045699644128014 0.08504405119167102 0.0069578095966956605;
|
||
-0.10967309376541882 0.08171409692812766 0.006932896225461464;
|
||
-0.11346215033922648 0.07153553263548147 0.007283062872687444;
|
||
-0.11239133056124612 0.06868639268322956 0.007242651339214947;
|
||
-0.11122068319797335 0.06605392786207011 0.007196147885643773;
|
||
-0.10997182069294363 0.06362301141102655 0.007144906756191574;
|
||
-0.10866203074565452 0.06137874243355965 0.007089031998008915;
|
||
-0.10882247916215068 0.051286067449190516 0.007021353108173517;
|
||
-0.1074314564672795 0.049376951298364384 0.006958826502473229;
|
||
-0.10601734008274794 0.04761439023924965 0.006893783213155025;
|
||
-0.10458839303537582 0.04598613649007138 0.006826025792342359;
|
||
-0.10315143090380435 0.044482152407399424 0.006756833630724034;
|
||
-0.10462193352254216 0.031820244798679787 0.006445645832376893;
|
||
-0.10318382535379975 0.03054038003667393 0.006373182758224606;
|
||
-0.10175112664140157 0.029356784730798346 0.006299584979370768;
|
||
-0.10032722734085553 0.028260174799026126 0.006224819087912654;
|
||
-0.09891385336534615 0.02724385790286855 0.006149345795101277;
|
||
-0.093268498989721 0.00812297399147717 0.0052265797092424385;
|
||
-0.09188304463066377 0.007256655005284251 0.005150213714500697;
|
||
-0.09051260761340546 0.0064514301571631325 0.0050729858743302735;
|
||
-0.08915836084794382 0.005702278227716097 0.004995363126314977;
|
||
-0.08781997142598436 0.005004364824361484 0.004917333622293092;
|
||
-0.06930476427073393 -0.011470924413190399 0.0037955243203862477;
|
||
-0.06800277450362639 -0.012076207430019012 0.0037171110540640388;
|
||
-0.06671770843946283 -0.012642113866850966 0.003638292302041609;
|
||
-0.06544909624773501 -0.01317286805748239 0.003559164047728649;
|
||
-0.06419717821147211 -0.013671059649300824 0.003479969719091455;
|
||
-0.052308544348541604 -0.013794235723210233 0.003839052530209843;
|
||
-0.05108670201612136 -0.014238447033006175 0.0037593114668918633;
|
||
-0.04988039768593651 -0.014658240490643328 0.003679278438710183;
|
||
-0.048688572914389106 -0.015056466003002617 0.003599331650257482;
|
||
-0.047510999113210946 -0.015434518536486435 0.003519209787879629;
|
||
-0.023101747816005425 -0.015798620815194387 0.01347655988233254;
|
||
-0.021948370627499054 -0.016148031734147573 0.013396736522653932;
|
||
-0.02080732325880399 -0.016482645463410973 0.013316856141104557;
|
||
-0.019678039496320753 -0.016804022833411883 0.013236971265791304;
|
||
-0.018560016398954694 -0.01711343885931475 0.013157167864616725;
|
||
-0.027547965324032513 -0.0157650105890274 0.010572160103389905;
|
||
-0.026450026136227312 -0.01605247950645985 0.010491180109355212;
|
||
-0.025361034081685226 -0.01633189614286892 0.010410303278362336;
|
||
-0.024279917610766172 -0.016604272353015467 0.010329402082475111;
|
||
-0.02320596089521229 -0.016870405667174137 0.010248635610308603;
|
||
-0.02493524974482041 -0.008758509250002357 -0.008449923618533303;
|
||
-0.02387252199314902 -0.0090155341044443 -0.00852950239400513;
|
||
-0.022814864964132365 -0.00926859385313271 -0.008609325377136852;
|
||
-0.02176157874947707 -0.00951856095743065 -0.008689050009448928;
|
||
-0.020712211472897882 -0.009766079471127388 -0.008768924102388106;
|
||
-0.022316082420292004 -0.015432581100616084 -0.002713090916906717;
|
||
-0.02127206654031124 -0.01567617264428185 -0.002793411190767065;
|
||
-0.02022956859236421 -0.0159188548014709 -0.0028738271376681866;
|
||
-0.01918789336871752 -0.016160901736099867 -0.002954272690873852;
|
||
-0.018146303148503164 -0.016402883837149045 -0.003034785707982439] %
|
||
Mass Used: 530.668253715296 kg
|
||
Launch C3: 40.43861983890888 km²/s²
|
||
||V∞_in||: 3.4773947099827938 km/s
|
||
\end{verbatim}
|
||
% \input archive/best/long_mission
|
||
|
||
\end{document}
|