Expand description
§SatKit: Satellite Toolkit
A comprehensive, high-performance satellite astrodynamics library combining the speed of Rust with the convenience of Python. SatKit provides industrial-grade satellite orbital mechanics calculations with a clean, intuitive API. Built from the ground up in Rust for maximum performance and memory safety, it offers complete Python bindings for all functionality, making advanced orbital mechanics accessible to both systems programmers and data scientists.
§Core Features
§Time Systems
- Comprehensive timescale transformations (UTC, GPS, UT1, TDB, TT, TAI)
- Leap second handling
- High-precision time arithmetic and conversions
§Coordinate Frame Transformations
High-precision coordinate transforms between multiple reference frames:
- International Terrestrial Reference Frame (ITRF): Earth-fixed frame
- Geocentric Celestial Reference Frame (GCRF): Inertial frame using IAU-2006 reduction
- True Equinox Mean Equator (TEME): Frame used in SGP4 propagation
- Celestial Intermediate Reference Frame (CIRF): IAU-2006 intermediate frame
- Terrestrial Intermediate Reference Frame (TIRF): Earth-rotation intermediate frame
- Geodetic Coordinates: Latitude, longitude, altitude conversions
§Orbit Propagation
Multiple propagation methods for various accuracy requirements:
- SGP4: Simplified General Perturbations for Two-Line Element (TLE) sets with fitting capability
- Numerical Integration: High-precision propagation using adaptive Runge-Kutta 9(8) methods
- Keplerian: Simplified two-body propagation
- State Transition Matrix: Support for covariance propagation
§Force Models
Comprehensive perturbation modeling:
- High-order Earth gravity (JGM2, JGM3, EGM96, ITU GRACE16)
- Solar and lunar gravity perturbations
- Atmospheric drag using NRLMSISE-00 density model with space weather data
- Solar radiation pressure
§Ephemerides
- JPL Ephemerides: High-precision planetary and lunar positions
- Low-Precision Ephemerides: Fast analytical models for sun and moon
§Additional Capabilities
- Keplerian orbital elements and conversions
- Geodesic distance calculations
- TLE parsing, generation, and orbit fitting
- Unscented Kalman Filter (UKF) implementation
§Language Bindings
- Rust: Native library available on crates.io
- Python: Complete Python bindings via PyO3, available on PyPI
- Binary wheels for Windows, macOS (Intel & ARM), and Linux (x86_64 & ARM64)
- Python versions 3.8 through 3.13
- Documentation at https://satellite-toolkit.readthedocs.io/
§Getting Started
§Data Files
The library requires external data files for many calculations:
- JPL Planetary Ephemerides - High-precision planetary positions
- Earth Gravity Models - Spherical harmonic coefficients
- Space Weather Data - Solar flux and geomagnetic indices
- Earth Orientation Parameters - Polar motion and UT1-UTC
- IERS Conventions Tables - Nutation coefficients
Data files need to be downloaded once. Space weather and Earth orientation parameter files are updated daily and should be refreshed periodically for optimal accuracy.
§Downloading Data Files
// Print the directory where data will be stored
println!("Data directory: {:?}", satkit::utils::datadir());
// Download required data files
// - Downloads missing files
// - Updates space weather and Earth orientation parameters
// - Skips files that already exist
satkit::utils::update_datafiles(None, false);§Example Usage
use satkit::{Instant, Duration, TimeScale, ITRFCoord, SolarSystem};
// Create a time instant
let time = Instant::from_datetime(2024, 1, 1, 12, 0, 0.0).unwrap();
// Coordinate frame transformations
let itrf_pos = ITRFCoord::from_geodetic_deg(42.0, -71.0, 100.0);
// Get planetary ephemeris
let (moon_pos, moon_vel) = satkit::jplephem::geocentric_state(
SolarSystem::Moon,
&time
).unwrap();§References
This implementation relies heaviliy on the following excellent references:
- “Fundamentals of Astrodynamics and Applications, Fourth Edition” by D. Vallado, Microcosm Press and Springer, 2013
- “Satellite Orbits: Models, Methods, Applications” by O. Montenbruck and E. Gill, Springer, 2000
§License
MIT License - See LICENSE file for details
Re-exports§
Modules§
- consts
- Universal constants
- earth_
orientation_ params - Earth orientation parameters (polar motion, delta-UT1, length of day) Earth Orientation Parameters (EOP) module
- earthgravity
- Zonal gravity model for Earth gravity
- filters
- frametransform
- Conversion between coordinate frames
- itrfcoord
- International Terrestrial Reference Frame coordinates & transformations to Geodetic, East-North-Up, North-East-Down
- jplephem
- Solar system body ephemerides, as published by the Jet Propulsion Laboratory (JPL)
- kepler
- Keplerian orbital elements Keplerian orbital elements module
- lpephem
- Low-precision ephemeris for sun and moon
- mathtypes
- Mathematical types used throughout the library
- nrlmsise
- NRL-MISE00 Density model
- orbitprop
- High-Precision Orbit Propagation via Runga-Kutta 9(8) Integration
- sgp4
- SGP-4 Orbit Propagator
- spaceweather
- Space Weather
- tle
- Two-line Element Set
- utils
- Utility functions
Structs§
- Duration
- Structure representing a duration in time
This can be used to add or subtract times from
an
Instantobject. - Instant
- A module for handling time and date conversions. Time is stored natively as the number of microseconds since the Unix epoch (1970-01-01 00:00:00 UTC) with leap seconds accounted for.
Enums§
- Frame
- Solar
System - Solar system bodies
- Time
Scale - Time Scales
- Weekday
- Day of week