An interactive, high-precision Python satellite tracking application. Predict passes and map ground-tracks for Weather satellites, the ISS, Starlink, and Amateur Radio using the robust skyfield SGP4 physics engine.
OrbiSense combines raw mathematical orbital mechanics with a beautiful, dark-mode customtkinter UI. Originally built to intercept weather-satellite telemetry during severe cyclones, it has evolved into a fully generalized tracking suite. Simply launch the application, pick an orbital category, and instantly visualize the satellite's exact position on a 2D map—or automate a 7-day scan to find the optimal reception windows!
The application follows a strict modular design, separating the visual interface from the heavy orbital calculations.
sequenceDiagram
autonumber
actor User
participant UI as Main.py (UI)
participant TLE as TLE Loader (Data)
participant Engine as Orbit Engine (Physics)
participant API as CelesTrak / Skyfield
User->>UI: Selects Category & Coordinates
UI->>TLE: fetch_tles(category)
TLE->>API: Download TLE (24h Cache)
API-->>TLE: raw tle text
TLE-->>UI: Return EarthSatellites
User->>UI: Clicks "Check Passes"
UI->>Engine: calculate_passes(satellite, lat, lon)
Engine->>API: SGP4 Propagation (satellite.at(t))
API-->>Engine: ECI Coordinates
Engine-->>UI: Array of Azimuth, Elevation, Time
UI-->>User: Renders Ground Track Map & Table
tle_loader.py(Data Acquisition)- Manages local caching in the
tle_cachedirectory with a 24-hour TTL (Time-To-Live). - Parses NORAD 3-line elements into usable Python objects without spamming upstream servers.
- Manages local caching in the
orbit_engine.py(Physics "Brain")- Uses Skyfield to convert geocentric coordinates to observer-relative
Toposcoordinates (WGS84). - Utilizes root-finding algorithms to mathematically solve for the exact moments a satellite's elevation crosses the 0° horizon.
- Uses Skyfield to convert geocentric coordinates to observer-relative
main.py(Visualization "Face")- Features heavily threaded operations (
threading.Thread) to keep the UI fluid while iterating through 7-day orbital predictions for over 50+ satellites.
- Features heavily threaded operations (
- CustomTkinter - For the modern, dark-mode GUI.
- Skyfield - The core physics engine handling SGP4 propagation and time arrays.
- Matplotlib - Embedded directly into Tkinter to render the dynamic 2D Ground Track map.
- Requests - Handles HTTP requests for fresh TLE data from CelesTrak.
- Numpy - Used by Skyfield and Matplotlib for blazing-fast array math operations.