Satellite Toolkit with Rust
An accurate, high-performance satellite orbital kinematics toolkit, written in Rust with a sensible interface. Also includes python bindings for all functions via via pyo3
Github
Crates.io
PyPi
Language Bindings
- Native Rust bindings
- Python bindings for compiled rust code ... speed of Rust with convenience of Python
Install with
pip install satkitPyPi includes binary packages for windows, macos (Intel & ARM), and linux. Python documentation is at: https://satellite-toolkit.readthedocs.io/latest/
Features
- High-precision coordinate transforms between:
- International Terrestrial Reference Frame (ITRF)
- Geocentric Celestial Reference Frame (GCRF) using IAU-2000 reduction
- True-Equinox Mean Equator (TEME) frame used in SGP4 propagation of TLEs
- Celestial Intermediate Reference Frame (CIRF)
- Terrestrial Intermediate Reference Frame (TIRF)
- Terrestrial Geodetic frame (latitude, longitude)
- Geodesic distances
- SGP4, and Keplerian orbit propagation
- JPL high-precision planetary ephemerides
- High-order gravity models
- High-precision, high-speed numerical satellite orbit propagation with high-order efficient Runga-Kutta solvers, ability to solve for state transition matrix, and inclusion following forces:
- High-order Earth gravity with multiple models
- Solar gravity
- Lunar gravity
- Drag (NRL MISE-00 density model)
- Radiation pressure
ODE Solvers
The high-precision numerical satellite orbit propagation makes use of standard Runga-Kutta methods for integration of ordinary differential equations. The ODE solver is included as part of the library.
The methods use Runga-Kutta pairs for ODE integration and error estimation generated by Jim Verner: https://www.sfu.ca/~jverner/
References, Models, and External Software.
The equations and many of the unit tests underlying this work are drawn from the following sources:
- "Fundamentals of Astrodynamics and Applications, Fourth Edition", D. Vallado, Microcosm Press and Springer, 2013. https://celestrak.org/software/vallado-sw.php
- "Satellite Orbits: Models, Methods, Applications", O. Montenbruck and E. Gill, Springer, 2000. https://doi.org/10.1007/978-3-642-58351-3
This code makes reference to and relies on models generated by the following:
- SGP4 Orbit Propagator - https://celestrak.org/software/tskelso-sw.php NORAD / SGP4 orbit propagator used to generate position and velocity states from orbital ephemerides described by Two-Line Element Sets (TLEs). This code base includes a pure-rust translation of the SGP4 orbit propagator
- NRL MSISE-00 Density Model - https://ccmc.gsfc.nasa.gov/models/NRLMSIS~00/ NRL model of air density, including density at high altitudes, used in to compute satellite drag
- Gravity Models - http://icgem.gfz-potsdam.de/home International Center for Global Earth Models (ICEGM), collection and archive in a common format of all existing global gravity field models
- Space Weather - https://celestrak.org/SpaceData/ Space weather used to modulate the air density used in drag calculations
- Earth Orientation Parameters - https://celestrak.org/SpaceData/ Time-varying Earth orientation parameters used for time epoch conversions and high-precision rotations between the inertial and Earth-fixed coordinate frames
- IERS Conventions - https://www.iers.org/IERS/EN/Publications/TechnicalNotes/tn36.html International Earth Rotation and Reference Systems Service Technical Note 36 for rotation between inertial and Earth-fixed coordinate systems.
Verification
The code includes rust test modules and python test modules for verification of nearly calculations, including but not limited to:
- JPL Ephemeris - Via JPL-provided test vectors for Chebychev polynomial calculation
- SGP4 - Via SGP4 test vectors provided with original C++ distribution
Author
Steven Michael (ssmichael@gmail.com)
Please reach out of you find errors in code or calculations, are interested in contributing to this repository, or have suggestions for improvements to the API.