SA
Salad109/satellite-conjunction-detector
Satellite collision prediction system built with Orekit. Optimized to allow sub-minute scanning of full catalog on consumer hardware.
Conjunction Detector
Satellite conjunction detection system that monitors orbital objects for potential collisions. Ingests data from
Space-Track.org, propagates orbits using Orekit, and identifies close approaches
between satellites.
Tech Stack
- Java 25
- Spring Boot 4 / Spring Modulith
- Orekit 13
- PostgreSQL / Flyway
- HTMX / Thymeleaf
Architecture
The application is organized into five modules:
- Ui - UI controllers and scheduled jobs
- Conjunction - Detection algorithms and conjunction storage
- Ingestion - Orchestrates catalog synchronization from Space-Track
- Satellite - Satellite entity and repository
- Spacetrack - HTTP client for Space-Track.org API
Coarse and Fine Scanning
The detection algorithm uses a two-step approach:
- Coarse sweep: Pre-computes satellite positions using SGP4 with Hermite interpolation, then uses spatial grid
indexing to efficiently find nearby satellites within tolerance - Refinement: Solves for precise TCA and miss distance, filtering by 5 km collision
threshold
See docs for tuning experiments and optimal parameters.
Setup
Prerequisites
- Java 25
- Docker Compose
- Space-Track.org account
1. Configure Environment
Copy the example environment file and fill in your Space-Track credentials:
cp .env.example .env2A. Run with Docker Compose
docker compose upThis starts PostgreSQL and the application. The app will be available at http://localhost:8080.
2B. Running Locally for Development
docker compose up postgres -d
./mvnw spring-boot:run