Skip to content

Repository files navigation

SIMPLETON

Satellite Intersection Monitoring Pipeline for Locating Every Threatening Orbital N eighbor

Live demo

All-vs-all satellite conjunction screener. Scans the full public catalog (~30,000 objects) for sub-5 km close approaches in under 30 seconds on consumer hardware.

Validated against CelesTrak SOCRATES: when filtered to equivalent scope (payload-vs-catalog, excluding intra-constellation pairs) and given identical TLE input, 99.8% of SOCRATES events are also flagged by this pipeline, with median TCA agreement under 1 ms and median miss distance of 0.1 m - see Validation below for the breakdown. Full all-vs-all screening finds ~58,000 conjunctions per 24h window, including secondary pairs that SOCRATES excludes.

Backtested against the 2009 Iridium 33 / Cosmos 2251 collision and the 1996 CERISE / Ariane debris collision. The pipeline flags both events at the deployed configuration, with 9 and 3 ms TCA accuracy respectively.

SIMPLETON CelesTrak SOCRATES Plus
Input Space-Track TLEs Space-Track TLEs
Propagator SGP4 (Orekit) SGP4 (STK)
Window 24h (configurable) 7 days
Threshold 5 km (configurable) 5 km
Scope All-vs-all (~500M pairs) Primaries vs secondaries
24h conjunctions ~58,000 (~19,000 filtered to SOCRATES scope) ~19,000
Compute time ~27 seconds (~3,200x realtime) ~10 hours (17x realtime)

Why It Matters

Full-catalog screening in under 30 seconds is not the point. Screening accuracy is capped by public TLE quality, so out-speeding other screeners on the same data doesn't add anything. The value is what cheap screening unlocks.

For example, collision-avoidance maneuver planning. Dodging one conjunction can steer a satellite into several new ones, so finding a burn that clears the threat without creating worse ones means screening the whole catalog against each candidate maneuver. At seconds per scan, a brute-force sweep of hundreds of candidate burns is actually feasible. It's just a matter of adding "phantom" candidate satellites to the catalog before running the detection pipeline.

It could also help with debris-removal target selection and launch-window screening.

How It Works

The detection pipeline has four stages:

1. Propagation (SGP4 + Hermite interpolation)

Rather than calling SGP4 at every timestep, the propagator stage evaluates SGP4 at knot points spaced minutes apart and fills intermediate positions using cubic Hermite interpolation on position and velocity. At the recommended 346 s knot gap that is one real SGP4 call per 32 steps, for 4 missed events out of ~58,000.

2. Coarse sweep (spatial grid indexing)

At each timestep, all satellite positions are hashed into a 1024 x 1024 x 1024 3D cell grid. Candidate pairs are generated only from same and neighboring cells. This eliminates the O(n^2) pairwise comparison.

3. Grouping

Coarse detections are sorted by pair and timestep, clustered into events, and reduced to the closest detection per event.

4. Refinement

Between two interpolated timesteps (~11 seconds apart), relative motion is effectively linear, so squared distance is quadratic, therefore the minimum of a quadratic is just one division. No golden section, no Brent's method, no iterative SGP4 calls. Most candidates get discarded here because the analytical minimum exceeds the 5 km threshold. Only survivors get a single SGP4 call to confirm. Events that pass are scored with collision probability synthesized from empirical SGP4 error models.

Validation

Both pipelines were run on the same TLE catalog over the same 7-day window with matching scoping filters (primary-vs-all, intra-constellation excluded, formation-flight excluded). Events match when both pipelines flag the same satellite pair with TCAs within 1 minute.

Events Count
SOCRATES total 134,598
Our total 134,765
Matched 134,369
Ours only 396
Missed 229

99.8% of SOCRATES events are also flagged by this pipeline. 99.7% of this pipeline's events are also flagged by SOCRATES. Agreement is flat at 99.5%+ across all seven days.

ΔTCA and Δmiss-distance error distributions vs SOCRATES

On matched events, TCA agrees to 3 ms and miss distance to 4 m at p95.

Methodology, TLE replication procedure, and analysis of the remaining 0.2% available at docs/8.

Parameter Tuning

The docs/ directory contains experiments from benchmarking each tunable parameter. Individually safe choices interact when combined, so the Pareto analysis sweeps all parameters simultaneously to find winning combinations.

# Experiment Description
1 Step Size Coarse scan time step in seconds
2 Knot Gap Seconds between real SGP4 calls
3 Cell Size Spatial grid cell edge in km
4 Conjunction Tolerance Coarse scan distance threshold in km
5 Pareto Frontier All parameters simultaneously
6 Garbage Collector GC impact on pipeline throughput
7 Subwindow Count Memory partitioning for peak heap reduction

Selected Pareto-optimal configurations:

Step (s) Knot gap Cell (km) Stride Jaccard Missed Time
9.375 197s 66.5 21 0.99993 2 34s
10.0 250s 71.5 25 0.99990 3 31s
10.8 346s 74.0 32 0.99988 4 27s
10.8 454s 71.5 42 0.99945 29 25s
10.8 454s 64.0 42 0.99861 78 25s
10.8 605s 54.0 56 0.98733 737 23s

Default configuration (bold) is a good compromise, sitting right before the accuracy cliff.

Tech Stack

  • Java 25
  • Spring Boot 4
  • Orekit 13
  • PostgreSQL / Flyway
  • HTMX / Thymeleaf

Architecture

Five Spring Modulith modules:

  • Ui - Controllers and scheduled jobs
  • Conjunction - Detection algorithms and conjunction storage
  • Ingestion - Catalog synchronization from Space-Track
  • Satellite - Satellite entity and repository
  • Spacetrack - HTTP client for Space-Track.org API

Setup

Prerequisites

1. Configure Environment

Copy the example environment file and fill in your Space-Track credentials:

cp .env.example .env

2. Run

# Both PostgreSQL and the application
docker compose up
# Local
docker compose up postgres -d
./mvnw spring-boot:run

About

Satellite collision prediction system. Optimized to allow sub-minute scanning of full catalog on consumer hardware.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages