ORbit Extrapolation KIT 11.3.3 API
1. Purpose
OREKIT library is a low-level library for space mechanics projects. It is implemented in the JAVA language.
OREKIT project was initiated by CS with the following goals in mind:
- provide a common base layer for space projects
- support both quick developments with loose requirements and complex projects with rich physical modeling, fine customization, and high accuracy
- be user-extensible through clear and as simple as possible architecture
- use unified interfaces to allow models and algorithms switching with almost no effort
- provide both basic and rich models that can be plugged interchangeably to ease applications validation
- separate models configuration from models usage to hide away complexity and keep caller code simple
- support both development of standalone and embedded applications (web services, plugins, scripting frameworks ...)
- use up-to-date techniques for low cost development and maintenance
- remove platforms and system dependencies and leverage environment-hell (environment variables, dynamic libraries versions, operating system, filesystem layout ...)
2. Features
Orekit can be used for many purposes, from simple geometrical or orbital tools up to complex orbits propagators with several perturbing forces, maneuvers and discrete events. Here is a short list of the features offered by the library:
- Time
- high accuracy absolute dates
- time scales (TAI, UTC, UT1, GPS, TT, TCG, TDB, TCB, GMST, GST, GLONASS, QZSS, BDT, IRNSS ...)
- transparent handling of leap seconds
- support for CCSDS time code standards
- Geometry
- frames hierarchy supporting fixed and time-dependent (or telemetry-dependent) frames
- predefined frames (EME2000/J2000, ICRF, GCRF, all ITRF from 1988 to 2014 and intermediate frames, TOD, MOD, GTOD and TEME and PZ-90.11 frames, Veis, topocentric, tnw and qsw local orbital frames, Moon, Sun, planets, solar system barycenter, Earth-Moon barycenter, ecliptic)
- user extensible (used operationally in real time with a set of about 60 frames on several spacecraft)
- transparent handling of IERS Earth Orientation Parameters (for both new CIO-based frames following IERS 2010 conventions and old equinox-based frames)
- transparent handling of JPL DE 4xx (405, 406 and more recent) and INPOP ephemerides
- transforms including kinematic combination effects
- composite transforms reduction and caching for efficiency
- extensible central body shapes models (with predefined spherical and ellipsoidic shapes)
- Cartesian and geodesic coordinates, kinematics
- computation of Dilution Of Precision (DOP) with respect to GNSS constellations
- projection of sensor Field Of View footprint on ground for any FoV shape
- Spacecraft state
- Cartesian, elliptical Keplerian, circular and equinoctial parameters, with non-Keplerian derivatives if available
- Two-Line Elements
- transparent conversion between all parameters
- automatic binding with frames
- attitude state and derivative
- Jacobians
- mass management
- user-defined associated state (for example battery status, or higher order derivatives, or anything else)
- Maneuvers
- analytical models for small maneuvers without propagation
- impulse maneuvers for any propagator type
- continuous maneuvers for numerical propagator type
- configurable low thrust maneuver model based on event detectors
- propulsion models intended to be used with maneuver class
- user-friendly interface for maneuver triggers
- Propagation
- analytical propagation models (Kepler, Eckstein-Heschler, GNSS, SDP4/SGP4 with 2006 corrections)
- numerical propagators
- customizable force models
- central attraction
- gravity models including time-dependent like trends and pulsations (automatic reading of ICGEM (new Eigen models), SHM (old Eigen models), EGM and GRGS gravity field files formats, even compressed)
- atmospheric drag
- third body attraction (with data for Sun, Moon and all solar systems planets)
- radiation pressure with eclipses
- solid tides, with or without solid pole tide
- ocean tides, with or without ocean pole tide
- Earth's albedo and infrared
- empirical accelerations to account for the unmodeled forces
- general relativity
- multiple maneuvers
- state of the art ODE integrators (adaptive stepsize with error control, continuous output, switching functions, G-stop, step normalization ...)
- computation of Jacobians with respect to orbital parameters and selected force models parameters
- serialization mechanism to store complete results on persistent storage for later use
- CR3BP model
- customizable force models
- semi-analytical propagation model (DSST) with customizable force models
- tabulated ephemerides
- file based
- memory based
- integration based
- Taylor-algebra (or any other real field) version of most of the above propagators, with all force models, events detection, orbits types, coordinates types and frames allowing allowing high order uncertainties and derivatives computation or very fast Monte-Carlo analyzes
- unified interface above analytical/numerical/tabulated propagators for easy switch from coarse analysis to fine simulation with one line change
- all propagators can manage the time loop by themselves and handle callback
functions (called step handlers) from the calling application at each time step.
- step handlers can be called at discrete time at regular time steps, which are independent of propagator time steps
- step handlers can be called with interpolators valid throughout one propagator time step, which can have varying sizes
- step handlers can be switched off completely, when only final state is desired
- special step handlers are provided for a posteriori ephemeris generation: all intermediate results are stored during propagation and provided back to the application which can navigate at will through them, effectively using the propagated orbit as if it was analytical model, even if it really is a numerically propagated one, which is ideal for search and iterative algorithms
- several step handlers can be used simultaneously, so it is possible to have a fine grained fixed time step to log state in a huge file, and have at the same time a coarse grained time step to display progress for user at a more human-friendly rate, this feature can also be used for debugging purpose, by setting up a temporary step handler alongside the operational ones
- handling of discrete events during integration (models changes, G-stop, simple notifications ...)
- predefined discrete events
- eclipse (both umbra and penumbra)
- ascending and descending node crossing
- anomaly, latitude argument or longitude argument crossings, with either true, eccentric or mean angles
- apogee and perigee crossing
- alignment with some body in the orbital plane (with customizable threshold angle)
- angular separation thresholds crossing between spacecraft and a beacon (typically the Sun) as seen from an observer (typically a ground station)
- raising/setting with respect to a ground location (with customizable triggering elevation and ground mask, optionally considering refraction)
- date and on-the-fly resetting countdown
- date interval with parameter-driven boundaries
- latitude, longitude, altitude crossing
- latitude, longitude extremum
- elevation extremum
- anomaly, latitude argument, or longitude argument crossings, either true, mean or eccentric
- moving target detection (with optional radius) in spacecraft sensor Field Of View (any shape, with special case for circular)
- spacecraft detection in ground based Field Of View (any shape)
- sensor Field Of View (any shape) overlapping complex geographic zone
- complex geographic zone traversal
- inter-satellites direct view
- ground at night
- impulse maneuvers occurrence
- geomagnetic intensity
- possibility of slightly shifting events in time (for example to switch from solar pointing mode to something else a few minutes before eclipse entry and reverting to solar pointing mode a few minutes after eclipse exit)
- events filtering based on their direction (for example to detect only eclipse entries and not eclipse exits)
- events filtering based on an external enabling function (for example to detect events only during selected orbits and not others)
- events combination with boolean operators
- ability to run several propagators in parallel and manage their states simultaneously throughout propagation
- Attitude
- extensible attitude evolution models
- predefined laws
- central body related attitude (nadir pointing, center pointing, target pointing, yaw compensation, yaw-steering)
- orbit referenced attitudes (LOF aligned, offset on all axes)
- space referenced attitudes (inertial, celestial body-pointed, spin-stabilized)
- tabulated attitudes, either respective to inertial frame or respective to Local Orbital Frames
- specific law for GNSS satellites: GPS (block IIA, block IIF, block IIF), GLONASS, GALILEO, BEIDOU (GEO, IGSO, MEO)
- loading and writing of CCSDS Attitude Data Messages (both AEM, and APM types are supported, in both KVN and XML formats, standalone or in combined NDM)
- Orbit determination
- batch least squares fitting
- optimizers choice (Levenberg-Marquardt or Gauss-Newton)
- decomposition algorithms choice (QR, LU, SVD, Cholesky)
- choice between forming normal equations or not
- Kalman filtering
- customizable process noise matrices providers
- time-dependent process nous provider
- parameters estimation
- orbital parameters estimation (or only a subset if desired)
- force model parameters estimation (drag coefficients, radiation pressure coefficients, central attraction, maneuver thrust or flow rate)
- measurements parameters estimation (biases, satellite clock offset, station clock offset, station position, pole motion and rate, prime meridian correction and rate, total zenith delay in tropospheric correction)
- can be used with both numerical, DSST, or SGP4/SDP4 orbit propagators
- multi-satellites orbit determination
- ground stations displacements due to solid tides
- ground stations displacements due to ocean loading (based on Onsala Space Observatory files in BLQ format)
- several predefined measurements
- range
- range rate (one way and two way)
- turn-around range
- azimuth/elevation
- right ascension/declination
- position-velocity
- position
- inter-satellites range (one way and two way)
- inter-satellites GNSS phase
- GNSS code
- GNSS phase with integer ambiguity resolution and wind-up effect
- possibility to add custom measurements
- loading of ILRS CRD laser ranging measurements file
- loading and writing of CCSDS Tracking Data Messages (in both KVN and XML formats, standalone or in combined NDM)
- several predefined modifiers
- tropospheric effects
- ionospheric effects
- clock relativistic effects
- station offsets
- biases
- delays
- Antenna Phase Center
- Shapiro relativistic effect
- possibility to add custom measurement modifiers (even for predefined events)
- combination of GNSS measurements
- dual frequency combination of measurements (Geometry-free, Ionosphere-free, Narrow-lane, Wide-lane and Melbourne-Wübbena)
- single frequency combination of measurements (Phase minus code and GRAPHIC)
- possibility to parse CCSDS Tracking Data Message files
- measurements generation
- with measurements feasibility triggered by regular event detectors (ground visibility, ground at night, sunlit satellite, inter satellites direct view, boolean combination...)
- with measurement scheduling as fixed step streams (optionally aligned with round UTC time)
- with measurement scheduling as high rate bursts rest periods (optionally aligned with round UTC time)
- possibility to customize measurement scheduling
- batch least squares fitting
- GNSS
- computation of Dilution Of Precision
- loading of ANTEX antenna models file
- loading of RINEX observation files (version 2 and version 3)
- support for Hatanaka compact RINEX format
- loading of SINEX station file
- loading of RINEX clock files (version 2 and version 3)
- parsing of IGS SSR messages for all constellations (version 1)
- implementation of Ntrip protocol
- Orbit file handling
- loading of SP3 orbit files (from versions a to d)
- loading and writing of CCSDS Orbit Data Messages (both OPM, OEM, OMM, OCM types are supported, in both KVN and XML formats, standalone or in combined NDM)
- loading of SEM and YUMA files for GPS constellation
- exporting of ephemeris in CCSDS OEM file format
- loading of ILRS CPF orbit files
- Earth models
- atmospheric models (DTM2000, Jacchia-Bowman 2008, NRL MSISE 2000, Harris-Priester and simple exponential models), and Marshall solar Activity Future Estimation, optionally with lift component
- support for CSSI space weather data
- tropospheric delay (modified Saastamoinen, Mendes-Pavlis, Vienna 1, Vienna 3, estimated, fixed)
- tropospheric refraction correction angle (Recommendation ITU-R P.834-7 and Saemundssen's formula quoted by Meeus)
- tropospheric model for laser ranging (Marini-Murray)
- Klobuchar ionospheric model (including parsing α and β coefficients from University of Bern Astronomical Institute files)
- Global Ionospheric Map model
- NeQuick ionospheric model
- VTEC estimated ionospheric model
- Global Pression and Temperature models (GPT and GPT2)
- geomagnetic field (WMM, IGRF)
- geoid model from any gravity field
- displacement of ground points due to tides
- tessellation of zones of interest as tiles
- sampling of zones of interest as grids of points
- Customizable data loading
- loading by exploring folders hierarchy on local disk
- loading from explicit lists of files on local disk
- loading from classpath
- loading from network (even through internet proxies)
- support for zip archives
- automatic decompression of gzip compressed (.gz) files upon loading
- automatic decompression of Unix compressed (.Z) files upon loading
- automatic decompression of Hatanaka compressed files upon loading
- plugin mechanism to add filtering like custom decompression algorithms, deciphering or monitoring
- plugin mechanism to delegate loading to user defined database or data access library
3. Dependency
OREKIT has only one dependency: the Hipparchus open-source library. This library provides mathematical tools for many purposes: geometry, polynomial equations, differential equations, and more... It is distributed under the business-friendly Apache Software License version 2.0.
OREKIT is based on several Hipparchus packages:
- geometry, which provides very useful objects as vectors and rotations (internally represented by quaternions)
- ode, which provides numerical solutions to solve Ordinary Differential Equations (ODE)
- optim, which provides multi-dimensional optimization
- solvers, which provides root-finding algorithms
- differentiation, which provides analytical computation of partial derivatives to arbitrary order and arbitrary number of free parameters
The use of Hipparchus is hidden in OREKIT as much as possible so users don't need to fully master this library. If they wish, they can limit themselves to understanding the simple classes Vector3D and Rotation from the geometry package, and the interface FirstOrderIntegrator from the ode package.
Package | Description |
---|---|
org.hipparchus.analysis | |
org.orekit.annotation |
This package is the top level package for Orekit's specific annotations.
|
org.orekit.attitudes |
This package provides classes to represent simple attitudes.
|
org.orekit.bodies |
This package provides interface to represent the position and geometry of
space objects such as stars, planets or asteroids.
|
org.orekit.compiler.plugin |
This package provides elements to handle data context plugin.
|
org.orekit.data |
This package provide base classes for exploring the configured data
directory tree and read external data that can be used by the library.
|
org.orekit.errors |
This package provides classes to generate and handle exceptions.
|
org.orekit.estimation |
This package is the top level package for orbit determination.
|
org.orekit.estimation.iod |
This package provides initial orbit determination methods.
|
org.orekit.estimation.leastsquares |
The leastsquares package provides an implementation of a batch least
squares estimator engine to perform an orbit determination.
|
org.orekit.estimation.measurements |
The measurements package defines everything that is related to orbit
determination measurements.
|
org.orekit.estimation.measurements.filtering |
This package provides measurement pre-processing filters.
|
org.orekit.estimation.measurements.generation |
This package provides Orbit Determination measurements generation.
|
org.orekit.estimation.measurements.gnss |
This package provides methods to handle GNSS measurements.
|
org.orekit.estimation.measurements.modifiers |
This package provides measurement modifier.
|
org.orekit.estimation.sequential |
The sequential package provides an implementation of a
Kalman Filter engine to perform an orbit determination.
|
org.orekit.files |
Top level package for various parsers.
|
org.orekit.files.ccsds |
This package is gathers sub-packages providing parsers/writers for various CCSDS messages.
|
org.orekit.files.ccsds.definitions |
This package contains definitions for CCSDS objects (frames, time systems...).
|
org.orekit.files.ccsds.ndm |
This package contains the base hierarchy for CCSDS ADM, ODM and TDM.
|
org.orekit.files.ccsds.ndm.adm |
This package contains class managing CCSDS Attitude Data Message.
|
org.orekit.files.ccsds.ndm.adm.aem |
This package contains class managing CCSDS Attitude Ephemeris Message.
|
org.orekit.files.ccsds.ndm.adm.apm |
This package contains class managing CCSDS Attitude Parameter Message.
|
org.orekit.files.ccsds.ndm.cdm |
This package contains class managing CCSDS Conjunction Data Message.
|
org.orekit.files.ccsds.ndm.odm |
This package contains class managing CCSDS Orbit Data Message.
|
org.orekit.files.ccsds.ndm.odm.ocm |
This package contains class managing CCSDS Orbit Comprehensive Message.
|
org.orekit.files.ccsds.ndm.odm.oem |
This package contains class managing CCSDS Orbit Ephemeris Message.
|
org.orekit.files.ccsds.ndm.odm.omm |
This package contains class managing CCSDS Orbit Mean-Elements Message.
|
org.orekit.files.ccsds.ndm.odm.opm |
This package contains class managing CCSDS Orbit Parameter Message.
|
org.orekit.files.ccsds.ndm.tdm |
This package contains class managing CCSDS Tracking Data Message.
|
org.orekit.files.ccsds.section |
This package contains class managing the sections in CCSDS Messages.
|
org.orekit.files.ccsds.utils |
This package contains utilities shared by many CCSDS messages parsers/writers.
|
org.orekit.files.ccsds.utils.generation |
This package contains utilities for CCSDS messages generation.
|
org.orekit.files.ccsds.utils.lexical |
This package contains utilities for CCSDS messages lexical analysis.
|
org.orekit.files.ccsds.utils.parsing |
This package contains classes related to the processing
of parse tokens using the state design pattern.
|
org.orekit.files.general |
This package provides interfaces for orbit file representations and corresponding
parsers.
|
org.orekit.files.ilrs |
This package provides parsers for laser ranging data stored in CDR and CPF formats.
|
org.orekit.files.sinex |
This package provides classes related to station data.
|
org.orekit.files.sp3 |
This package provides a parser for orbit data stored in SP3 format.
|
org.orekit.forces |
This package provides the interface for force models that will be used by the
NumericalPropagator , as well as
some classical spacecraft models for surface forces (spherical, box and solar array ...). |
org.orekit.forces.drag |
This package provides all drag-related forces.
|
org.orekit.forces.empirical |
This package provides empirical forces.
|
org.orekit.forces.gravity |
This package provides all gravity-related forces.
|
org.orekit.forces.gravity.potential |
This package provides classes to read gravity field files and supports several
different formats.
|
org.orekit.forces.inertia |
This package provides inertial force model.
|
org.orekit.forces.maneuvers |
This package provides models of simple maneuvers.
|
org.orekit.forces.maneuvers.jacobians |
Generators for columns of Jacobian matrices related to maneuver parameters.
|
org.orekit.forces.maneuvers.propulsion |
This package provides propulsion models intended to be used with class
Maneuver . |
org.orekit.forces.maneuvers.trigger |
This package provides maneuver triggers' models intended to be used with class
Maneuver . |
org.orekit.forces.radiation |
This package provides all radiation pressure related forces.
|
org.orekit.frames |
This package provides classes to handle frames and transforms between them.
|
org.orekit.geometry.fov |
This package provides classes for representing a spacecraft sensor Field Of View.
|
org.orekit.gnss |
This package provides classes related to GNSS applications.
|
org.orekit.gnss.antenna |
This package provides classes related to receiver and satellites antenna modeling.
|
org.orekit.gnss.attitude |
This package provides classes related to navigation satellites attitude modeling.
|
org.orekit.gnss.clock |
This package provides classes related to navigation clock files.
|
org.orekit.gnss.metric |
This package provides classes related to IGS binary formats.
|
org.orekit.gnss.metric.messages |
This package provides all supported IGS binary
messages . |
org.orekit.gnss.metric.messages.rtcm |
This package provides all supported RTCM
messages . |
org.orekit.gnss.metric.messages.rtcm.ephemeris |
This package provides all supported RTCM ephemeris
messages . |
org.orekit.gnss.metric.messages.rtcm.ephemeris.utils |
This package contains utility classes relate to RTCM ephemeris messages.
|
org.orekit.gnss.metric.messages.ssr |
This package provides all supported IGS SSR
messages . |
org.orekit.gnss.metric.messages.ssr.igm |
This package provides all supported IGS Generic SSR Message types.
|
org.orekit.gnss.metric.messages.ssr.subtype |
This package provides all supported IGS SSR Sub-Type Message.
|
org.orekit.gnss.metric.ntrip |
This package provides streams reading from ntrip casters.
|
org.orekit.gnss.metric.parser |
This package provides the top level
MessagesParser class that can extract messages from binary containers like ByteArrayEncodedMessages or {link org.orekit.metric.gnss.ssr.parser.InputStreamEncodedMessages
InputStreamEncodedMessages}. |
org.orekit.gnss.navigation |
This package provides classes related to RINEX navigation files.
|
org.orekit.models |
Top level package for physical models.
|
org.orekit.models.earth |
This package provides models that simulate certain physical phenomena
of Earth and the near-Earth environment.
|
org.orekit.models.earth.atmosphere |
This package provides the atmosphere model interface and several implementations.
|
org.orekit.models.earth.atmosphere.data |
This package provides classes to get atmospheric data,
including solar flux and planetary geomagnetic indices.
|
org.orekit.models.earth.displacement |
This package provides models computing reference points
displacements on Earth surface.
|
org.orekit.models.earth.ionosphere |
This package provides models that simulate the impact of the ionosphere.
|
org.orekit.models.earth.tessellation |
This package provides ways to do tessellation and sampling of zones of
interest over an ellipsoid surface.
|
org.orekit.models.earth.troposphere |
This package provides models that simulate the impact of the troposphere.
|
org.orekit.models.earth.weather |
This package provides models that simulate global weather conditions on Earth.
|
org.orekit.orbits |
This package provides classes to represent orbits.
|
org.orekit.propagation |
Propagation
|
org.orekit.propagation.analytical |
Top level package for analytical propagators.
|
org.orekit.propagation.analytical.gnss |
This package provides classes to propagate GNSS orbits.
|
org.orekit.propagation.analytical.gnss.data |
This package provides classes related to navigation data containing in
GNSS almanacs and navigation messages.
|
org.orekit.propagation.analytical.tle |
This package provides classes to read and extrapolate tle's.
|
org.orekit.propagation.conversion |
This package provides tools to convert a given propagator or a set of
SpacecraftState into another propagator. |
org.orekit.propagation.events |
This package provides interfaces and classes dealing with events occurring during propagation.
|
org.orekit.propagation.events.handlers |
This package provides an interface and classes dealing with events occurrence only.
|
org.orekit.propagation.integration |
Utilities for integration-based propagators (both numerical and semi-analytical).
|
org.orekit.propagation.numerical |
Top level package for numerical propagators.
|
org.orekit.propagation.numerical.cr3bp |
Top level package for CR3BP Models used with a numerical propagator.
|
org.orekit.propagation.sampling |
This package provides interfaces and classes dealing with step handling during propagation.
|
org.orekit.propagation.semianalytical |
Top level package for semi-analytical propagators.
|
org.orekit.propagation.semianalytical.dsst |
This package provides an implementation of the Draper Semi-analytical
Satellite Theory (DSST).
|
org.orekit.propagation.semianalytical.dsst.forces |
This package provides force models for Draper Semi-analytical Satellite Theory (DSST).
|
org.orekit.propagation.semianalytical.dsst.utilities |
This package provides utilities for Draper Semi-analytical Satellite Theory (DSST).
|
org.orekit.propagation.semianalytical.dsst.utilities.hansen |
This package provides Hansen coefficient related utilities for Draper
Semi-analytical Satellite Theory (DSST).
|
org.orekit.python |
This package provides an interface to python based on JCC as an interface for classes outside the org.orekit domain.
|
org.orekit.time |
This independent package provides classes to handle epochs, time scales,
and to compare instants together.
|
org.orekit.utils |
This package provides useful objects.
|
org.orekit.utils.units |
This package provides very basic handling of units.
|