"Lots of parts are directly from the orekit documentation on [propagation](https://www.orekit.org/site-orekit-latest/architecture/propagation.html), with some updates, simplifications and Pythonification by Petrus Hyvönen, SSC\n",
"\n",
"## Learning Goals\n",
"* *What is an orbit propagator*: What is the background, what types are there, and why\n",
"* *How do I propagate my satellite*: How is it implemented in Orekit\n",
"\n",
"## Keywords\n",
"orekit, propagation"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"from math import radians, degrees"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Initialize orkit and bring up the python-java interface"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import orekit\n",
"vm = orekit.initVM()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now set up the pointer to the orekit-data.zip file, using one of the helper files. The file should be in current directory if not specified otherwise."
"Now we are set up to import and use objects from the orekit library. Packages can be imported as they were native Python packages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Propagation "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Propagation is the prediction of the evolution of a system from an initial state. In Orekit, this initial state is represented by a SpacecraftState, which is a simple container for all needed information : orbit, mass, kinematics, attitude, date, frame etc."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The method of propagating a satellite orbit can be divided into three categories:\n",
"\n",
"- Analytical Propagators: These are based on mathematical analytical models, which commonly does not need so much computing power and are genereally fast but not neccessary precise in complex environments\n",
"- Numerical Propagators: These propagators are based on a numerical models where forces are integrated over time by a large number of calculations. Can handle complex models of different forces acting on a spacecraft\n",
"- Semianalytical: Semianalytical combines features of numerical and analytical method to get a good mix of accuracy and efficency."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Analytical Propagators "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In orekit there are a number of analytical propagators.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Keplerian Propagator\n",
"\n",
"This is a simple propagator that models a Keplerian orbit around a planet, based on the mass of the central body, µ= GM.\n",
"\n",
"The [Keplerian Orbit](https://www.orekit.org/site-orekit-latest/apidocs/org/orekit/propagation/analytical/KeplerianPropagator.html) at the orekit documentation API shows the usage. A basic example is:"
"A basic way to execute the propagator is through the propagate(start, end) method. In this example we propagate the orbit for 48 hours from initialDate."
"The Eckstein-Hechler propagator is an analytical propagator that can use a significant more elaborated model of the gravity field, including the J2 to J6 potential zonal coefficients. It uses mean orbital parameters to compute the new position.\n",
"\n",
"The EH propagator is only applicable for near circular orbits, typically used for LEO satellites.\n",
"\n",
"The [orekit documentation for the EH propagator]() gives more details.\n",
"This analytical propagator is dedicated to propagation of Two-Line Elements (TLE)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"See separate example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Numerical Propagators"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Numerical propagation is one of the most important parts of the Orekit project. Based on Hipparchus ordinary differential equations integrators, the NumericalPropagator class realizes the interface between space mechanics and mathematical resolutions. Despite its utilization seems daunting on first sight, it is in fact quite straigthforward to use."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simple Propagation of Equation of Motion "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The mathematical problem to integrate is a dimension-seven time-derivative equations system. The six first elements of the state vector are the orbital parameters, which may be any orbit type (KeplerianOrbit, CircularOrbit, EquinoctialOrbit or CartesianOrbit) in meters and radians, and the last element is the mass in kilograms. It is possible to have more elements in the state vector if AdditionalEquations have been added (typically PartialDerivativesEquations which is an implementation of AdditionalEquations devoted to integration of Jacobian matrices). The time derivatives are computed automatically by the Orekit using the Gauss equations for the first parameters corresponding to the selected orbit type and the flow rate for mass evolution during maneuvers. The user only needs to register the various force models needed for the simulation. Various force models are already available in the library and specialized ones can be added by users easily for specific needs.\n",
"\n",
"The integrators (first order integrators) provided by Hipparchus need the state vector at t0, the state vector first time derivative at t0, and then calculates the next step state vector, and asks for the next first time derivative, etc. until it reaches the final asked date. These underlying numerical integrators can also be configured. Typical tuning parameters for adaptive stepsize integrators are the min, max and perhaps start step size as well as the absolute and/or relative errors thresholds. \n",
"\n",
"The following code snippet shows a typical setting for Low Earth Orbit propagation:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The numerical propagation is based on an integrator with variable step size. These are specified, as other time units in Orekit, in seconds."
"The actual integrator, in this case DormandPrince853, is part of the Hipparchos library. Note that the tolerances needs casting in Python to an array of doubles (floats)."
"OrbitType.KEPLERIAN.convertType(end_state.getOrbit()) # Note that this is the Osculating orbit!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
%% Cell type:markdown id: tags:
# Propagation
%% Cell type:markdown id: tags:
## Authors
Lots of parts are directly from the orekit documentation on [propagation](https://www.orekit.org/site-orekit-latest/architecture/propagation.html), with some updates, simplifications and Pythonification by Petrus Hyvönen, SSC
## Learning Goals
**What is an orbit propagator*: What is the background, what types are there, and why
**How do I propagate my satellite*: How is it implemented in Orekit
## Keywords
orekit, propagation
%% Cell type:code id: tags:
``` python
%matplotlibinline
frommathimportradians,degrees
```
%% Cell type:markdown id: tags:
Initialize orkit and bring up the python-java interface
%% Cell type:code id: tags:
``` python
importorekit
vm=orekit.initVM()
```
%% Cell type:markdown id: tags:
Now set up the pointer to the orekit-data.zip file, using one of the helper files. The file should be in current directory if not specified otherwise.
Now we are set up to import and use objects from the orekit library. Packages can be imported as they were native Python packages
%% Cell type:markdown id: tags:
# Propagation
%% Cell type:markdown id: tags:
Propagation is the prediction of the evolution of a system from an initial state. In Orekit, this initial state is represented by a SpacecraftState, which is a simple container for all needed information : orbit, mass, kinematics, attitude, date, frame etc.
%% Cell type:markdown id: tags:
The method of propagating a satellite orbit can be divided into three categories:
- Analytical Propagators: These are based on mathematical analytical models, which commonly does not need so much computing power and are genereally fast but not neccessary precise in complex environments
- Numerical Propagators: These propagators are based on a numerical models where forces are integrated over time by a large number of calculations. Can handle complex models of different forces acting on a spacecraft
- Semianalytical: Semianalytical combines features of numerical and analytical method to get a good mix of accuracy and efficency.
%% Cell type:markdown id: tags:
# Analytical Propagators
%% Cell type:markdown id: tags:
In orekit there are a number of analytical propagators.
%% Cell type:markdown id: tags:
## Keplerian Propagator
This is a simple propagator that models a Keplerian orbit around a planet, based on the mass of the central body, µ= GM.
The [Keplerian Orbit](https://www.orekit.org/site-orekit-latest/apidocs/org/orekit/propagation/analytical/KeplerianPropagator.html) at the orekit documentation API shows the usage. A basic example is:
A basic way to execute the propagator is through the propagate(start, end) method. In this example we propagate the orbit for 48 hours from initialDate.
The Eckstein-Hechler propagator is an analytical propagator that can use a significant more elaborated model of the gravity field, including the J2 to J6 potential zonal coefficients. It uses mean orbital parameters to compute the new position.
The EH propagator is only applicable for near circular orbits, typically used for LEO satellites.
The [orekit documentation for the EH propagator]() gives more details.
This analytical propagator is dedicated to propagation of Two-Line Elements (TLE).
%% Cell type:markdown id: tags:
See separate example
%% Cell type:markdown id: tags:
# Numerical Propagators
%% Cell type:markdown id: tags:
Numerical propagation is one of the most important parts of the Orekit project. Based on Hipparchus ordinary differential equations integrators, the NumericalPropagator class realizes the interface between space mechanics and mathematical resolutions. Despite its utilization seems daunting on first sight, it is in fact quite straigthforward to use.
%% Cell type:markdown id: tags:
## Simple Propagation of Equation of Motion
%% Cell type:markdown id: tags:
The mathematical problem to integrate is a dimension-seven time-derivative equations system. The six first elements of the state vector are the orbital parameters, which may be any orbit type (KeplerianOrbit, CircularOrbit, EquinoctialOrbit or CartesianOrbit) in meters and radians, and the last element is the mass in kilograms. It is possible to have more elements in the state vector if AdditionalEquations have been added (typically PartialDerivativesEquations which is an implementation of AdditionalEquations devoted to integration of Jacobian matrices). The time derivatives are computed automatically by the Orekit using the Gauss equations for the first parameters corresponding to the selected orbit type and the flow rate for mass evolution during maneuvers. The user only needs to register the various force models needed for the simulation. Various force models are already available in the library and specialized ones can be added by users easily for specific needs.
The integrators (first order integrators) provided by Hipparchus need the state vector at t0, the state vector first time derivative at t0, and then calculates the next step state vector, and asks for the next first time derivative, etc. until it reaches the final asked date. These underlying numerical integrators can also be configured. Typical tuning parameters for adaptive stepsize integrators are the min, max and perhaps start step size as well as the absolute and/or relative errors thresholds.
The following code snippet shows a typical setting for Low Earth Orbit propagation:
%% Cell type:markdown id: tags:
The numerical propagation is based on an integrator with variable step size. These are specified, as other time units in Orekit, in seconds.
The actual integrator, in this case DormandPrince853, is part of the Hipparchos library. Note that the tolerances needs casting in Python to an array of doubles (floats).