A Python-based high-precision orbital propagator designed for simulating the trajectories of Low Earth Orbit (LEO) satellites with exceptional accuracy. This project implements advanced numerical integration techniques and accounts for multiple environmental perturbations to predict satellite positions and velocities over time.
Orbital propagation involves predicting the future position and velocity of a satellite based on initial conditions and the forces acting upon it. For high-precision applications, such as satellite tracking, rendezvous missions, or space situational awareness, it's crucial to model not just the central gravitational force of Earth but also various perturbations that affect the orbit.
HPOP uses the Runge-Kutta integration method (RK8) to solve the equations of motion, providing accurate trajectory predictions for LEO satellites.
- RK8 Integration: Implements the 8th-order Runge-Kutta method for high-accuracy numerical integration of orbital dynamics.
- State Vector: Tracks position (r) and velocity (v) in Cartesian coordinates.
The propagator handles conversions between spherical and Cartesian coordinate systems:
Spherical to Cartesian:
x = r * cos(θ) * cos(φ)
y = r * cos(θ) * sin(φ)
z = r * sin(θ)
Cartesian to Spherical:
r = √(x² + y² + z²)
θ = arcsin(z/r)
φ = arctan2(y, x)
HPOP incorporates several key perturbations to achieve high-precision orbital propagation:
The Earth's gravitational field is not perfectly spherical. The EGM2008 model provides a high-resolution representation of Earth's gravity field using spherical harmonics.
Mathematical Formulation: The gravitational potential V is expressed as:
Where:
- (
$GM_{\oplus}$ ): Earth's gravitational parameter (μ ≈ 3.986004418 × 10¹⁴ m³/s²) - (
$r, \theta, \phi$ ): Spherical coordinates (radius, latitude, longitude) - (
$P_n^m$ ): Associated Legendre functions - ($ J_n$ ): Zonal harmonics (axisymmetric perturbations)
- (
$C_n^m, S_n^m$ ): Tesseral and sectoral harmonics (asymmetric perturbations from EGM2008)
Implementation:
- Loads EGM2008 coefficients from
data/EGM2008NM1000.csv - Computes higher-order harmonics up to degree/order 1000
- Accounts for Earth's oblateness and mass distribution irregularities
Atmospheric drag becomes significant in LEO, especially at altitudes below 1000 km. The exosphere (upper atmosphere) exerts a drag force opposing the satellite's motion.
Key Concepts:
- Density Model: Uses atmospheric density models (e.g., NRLMSISE-00) based on altitude, solar activity, and geomagnetic conditions
-
Drag Force: (
$vec{F_d} = -\frac{1}{2} C_d A \rho v^2 \hat{v}$ )- (
$C_d$ ): Drag coefficient - (
$A$ ): Satellite cross-sectional area - (
$\rho$ ): Atmospheric density - (
$v$ ): Satellite velocity relative to atmosphere
- (
-
Acceleration: (
$\vec{a_d} = \frac{\vec{F_d}}{m}$ )
Implementation:
- Calculates atmospheric density based on position and time
- Applies drag acceleration in the velocity direction
Gravitational perturbations from celestial bodies other than Earth, primarily the Moon and Sun, affect LEO satellite orbits.
Third-Body Perturbation:
- Lunar Gravity: The Moon's gravity causes periodic perturbations, especially during lunar passages
- Solar Gravity: The Sun's influence is smaller but still significant for precise calculations
Mathematical Approach:
- Computes gravitational acceleration from Moon and Sun positions
- Adds perturbation acceleration: (
$\vec{a_{ext}} = -\mu_{body} \frac{\vec{r_{sat}} - \vec{r_{body}}}{|\vec{r_{sat}} - \vec{r_{body}}|^3}$ )- (
$\mu_{body}$ ): Gravitational parameter of the perturbing body - (
$\vec{r_{sat}}, \vec{r_{body}}$ ): Position vectors of satellite and perturbing body
- (
Implementation:
- Tracks Moon and Sun positions using ephemeris data
- Calculates and sums gravitational perturbations
Solar radiation exerts pressure on satellite surfaces due to photon momentum transfer. This is particularly important for satellites with large solar panels or high area-to-mass ratios.
Key Concepts:
-
Radiation Pressure: (
$P_{SRP} = \frac{F_{solar}}{c}$ ) where F_solar is solar flux and c is speed of light - Force on Satellite: Depends on surface properties, orientation, and shadowing
-
Acceleration: (
$\vec{a_{SRP}} = \frac{P_{SRP} A_{eff}}{m} \hat{n}$ )- (
$A_{eff}$ ): Effective cross-sectional area - (
$m$ ): Satellite mass - (
$\hat{n}$ ): Surface normal direction
- (
Implementation:
- Models SRP based on satellite attitude and solar position
- Accounts for eclipses and varying solar distance
- Applies pressure acceleration considering surface reflectivity
LEO-HPOP-project/
├── main.py # Main simulation script
├── state.py # State vector management
├── Gravity/
│ └── gravity.py # Gravitational force calculations
├── Drag/
│ └── drag.py # Atmospheric drag calculations
├── Integration and Conversion/
│ ├── butchertab_ex.py # Butcher tableau for RK integration
│ └── state.py # Additional state utilities
├── data/
│ └── EGM2008NM1000.csv # EGM2008 spherical harmonic coefficients
└── readme.md # This file
-
Clone the repository:
git clone https://github.com/your-repo/LEO-HPOP-project.git cd LEO-HPOP-project -
Install dependencies:
pip install numpy scipy matplotlib
- TBD
- Implement additional perturbations (e.g., Earth's magnetic field, relativistic effects)
- Add support for different orbit types (MEO, GEO)
- Integrate with real-time tracking data
- Optimize for parallel computing
idk