Satellite orbit propagation and trajectory generation for tracking of space objects—including debris, rocket bodies, and payloads—focusing primarily on artificial satellites in low Earth orbit (LEO).
- Orbit Propagator for Tracking Earth's Artificial Satellites in LEO
- Table of Contents
The software processes orbital elements extracted from Space-Track or Celestrak and, through the SGP4 model, propagates the orbit of space objects. Additionally, it implements coordinate conversions to calculate approximations to the reference point and generate trajectories with an initial instant (H0) for tracking.
The python implementation of SGP4 (Simplified General Perturbations Model 4) uses orbital elements in the OMM (Orbit Mean-Elements Message) format to predict the position of a satellite at a given time.
The coordinate systems involved include:
- TEME (True Equator Mean Equinox): Orbital reference system associated with OMM elements.
- ITRS (International Terrestrial Reference System): Earth-fixed system, serving as the basis for geodetic coordinates.
- ECEF (Earth-Centered, Earth-Fixed): Earth-centered system fixed relative to its rotation.
- ENU (East-North-Up): Local coordinate system relative to an observer.
- Geodetic Coordinates (Latitude, Longitude, and Altitude): System used to represent positions on Earth's surface.
- Azimuth, Elevation, and Range: Sensor pointing representation, with azimuth (horizontal direction), elevation (height above the horizon), and range (target distance).
The application has the following main features:
- Reading Orbital Elements: Imports data from Space-Track and Celestrak.
- Orbit Propagation: Uses the SGP4 model to compute the object's orbital trajectory.
- Coordinate Conversions: Implements conversion between TEME, ITRS, ECEF, ENU, and geodetic coordinates.
- Trajectory Generation: Determines approximation points to the observer and defines tracking instants (H0).
- Map Visualization: Uses Folium to display trajectories on interactive maps.
- Bilingual Interface: Supports English and Portuguese using gettext.
The application is organized into different pages, each dedicated to a specific functionality:
- 🏠 Home Page: Welcome page of the application.
- 0️⃣ Simplified Configuration - Basic Functions of the APP: Simplified setup with essential application functions.
- 1️⃣ Obtain Orbital Elements: Acquisition of orbital elements.
- 2️⃣ Orbit Propagation: Orbit propagation.
- 3️⃣ Map Visualization: Display of trajectories on interactive maps.
- 4️⃣ Orbital Change/Object Maneuvering: Orbital modification and object maneuvers.
- 5️⃣ Selection of Specific Trajectories for Sensors: Choice of custom trajectory for specific sensors.
- Language: Python
- Framework: Streamlit
- Libraries: Pandas, Folium, NumPy, SGP4, Astropy, Pymap3d
- Internationalization: Gettext
- Install Python (>= 3.11) from the official Python website.
- Ensure that pip is installed. You can verify this by running:
pip --version
python -m pip install --upgrade pip - Update system packages and install Python if it is not already installed:
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip - Clone this repository:
git clone https://github.com/francisvalguedes/TrajectoryOrbitPropag.git
cd TrajectoryOrbitPropag For Debian/Ubuntu: Clone the repository and run the installation script without sudo:
./install_debian.sh the install_debian.sh file will create a python environment in an env folder located in the repository folder and install the dependencies in the file requirements.txt
- Clone this repository:
sudo apt install git
git clone https://github.com/francisvalguedes/TrajectoryOrbitPropag.git
cd TrajectoryOrbitPropag -
Create and activate a virtual environment:
- On Windows:
python -m venv env
env\Scripts\activate
pip install --upgrade pip- On Linux:
sudo apt install virtualenv
virtualenv env
source env/bin/activate
pip install --upgrade pip- Install the project dependencies:
pip install -r requirements.txt Activate env and run streamlit app
cd TrajectoryOrbitPropag
streamlit run source/main.py --server.port 8080or
./run.shOpen the link in shel (http://localhost:8080).
with the app running
confirm that the server is running on port 8080
curl http://localhost:8080
check active rules in iptables
sudo iptables -t nat -L PREROUTING -n -v
sudo iptables -L OUTPUT -n -v
Redirect app port 8080 to web server port 80:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
test if web server works without specifying port, by typing in browser: my_ip_address. If it works then make the redirect permanent:
sudo apt-get install iptables-persistent
if already isntalled then restart it:
sudo dpkg-reconfigure iptables-persistent
TrajectoryOrbitPropag/
├─ .streamlit/
│ └─ config.toml
├─ data/
│ ├─ celestrak/
│ │ └─ teste.md
│ ├─ confLocalWGS84.csv
│ ├─ confRadar.csv
│ ├─ norad_id.csv
│ └─ RCS.csv
├─ figures/
│ └─ ...
├─ locales/
│ ├─ pt-BR/
│ │ └─ LC_MESSAGES/
│ │ └─ ...
│ └─ README.md
├─ source/
│ ├─ lib/
│ │ ├─ constants.py
│ │ ├─ orbit_functions.py
│ │ └─ pages_functions.py
│ ├─ pages/
│ │ ├─ 00_Simplified.py
│ │ ├─ 01_orbital_elements.py
│ │ ├─ 02_orbit_propagation.py
│ │ ├─ 03_map.py
│ │ ├─ 04_orbit_compare.py
│ │ └─ 05_trajectory.py
│ └─ main.py
├─ .gitignore
├─ conf.json
├─ get_translate.py
├─ install_debian.sh
├─ LICENSE
├─ localazy.json
├─ README.md
├─ requirements.txt
└─ run.sh
- SGP4 - MIT License
- Astropy - BSD-3-Clause
- pandas - BSD-3-Clause
- numpy - BSD-3-Clause
- streamlit - Apache 2.0
- pymap3d - BSD-2-Clause
- Geopandas - BSD 3-Clause License
- Folium - MIT License
- Contributions are welcome! Feel free to open issues and pull requests.
- This project is licensed under the MIT License. See the LICENSE file for more details.
- Autor: Francisval Guedes Soares,-
- Contributions/suggestions from: Felipe Longo, Hareton, André Henrique, Marcos Leal, Leilson, Alan Karlo.
