ARTEMIS II · ML PIPELINE
LIVE DATA
NASA/JSC/FOD/FDO · EME2000
Dist Earth
Speed km/s
Day
EME2000 · Earth-centered frame · drag to rotate · scroll to zoom
Day 0.00

Distance from Earth

Speed

Anomaly Score (Isolation Forest)

Speed Residual (TCM signature)

Orbital Energy

Eccentricity

Orion-Watch

Real NASA flight data · Rust physics engine · Python ML pipeline · GitHub Actions auto-deploy

RustPythonIsolation Forest LSTMMonte CarloCCSDS OEM GitHub ActionsEME2000

What This Is

This project ingests the actual NASA/JSC Flight Dynamics Operations OEM ephemeris file from Artemis II — the live state vectors FDO uses in Mission Control — and runs a multi-layer ML pipeline on it.

It is not a simulation. The input data is the same CCSDS OEM file served by FDOweb at MCC-H, updated every ~hour during the mission.

What the Pipeline Does

StepToolWhat it produces
FetchRust (async reqwest/tokio)Latest OEM from NASA AROW or JPL HORIZONS fallback
Parse + FeaturesRust (oem-engine)28 orbital features per state vector in ~7ms total
Anomaly DetectionPython / sklearn IsolationForestFlags TCM burns from jerk + energy residuals
Trajectory ForecastPython / PyTorch LSTMPredicts next 10 state vectors (40 min ahead)
Landing PredictionPython / GradientBoosting + Monte CarloSplashdown lat/lon ± uncertainty radius
VisualizePython / matplotlib5 publication-quality plots
Auto-updateGitHub Actions (cron every 4h)Fetches, runs, commits updated outputs automatically

What the ML Found

Anomaly detection flagged 96 state vectors clustered around T+20.4 hours. This is the Outbound Trajectory Correction (OTC-1) maneuver — a small burn done before TLI to fine-tune the trans-lunar trajectory. The model caught it purely from orbital mechanics residuals (energy jump + jerk spike) with zero labeled training data.

Landing prediction: Monte Carlo ballistic propagation from the EI state vector (speed 10.999 km/s, alt 127 km) places splashdown at approximately 18.4°N, 151.2°W — north of Hawaii, consistent with Artemis nominal Pacific recovery zone, ±42 km (1σ).

Run Locally

# 1. Build Rust binaries
cargo build --release --workspace

# 2. Install Python deps
pip install numpy pandas scikit-learn matplotlib torch

# 3. Run full pipeline (fetch → parse → ML → viz)
python python/pipeline.py --fetch --out outputs

# Or just run the engine on the bundled data
./target/release/oem-engine --input data/bootstrap.oem --features-out data/features.csv

# Or run ML directly
python python/ml/models.py data/features.csv outputs/summary.json outputs

Rust Engine Features (per state vector)

The Rust binary parses 3,193 state vectors and computes 28 features in under 7ms:

dist_km, alt_km, speed_kms, energy, h_mag, h_x/y/z,
ecc, sma_km, inc_deg, visviva_kms,
speed_residual, energy_residual, fpa_deg,
accel_mag, jerk_mag, delta_speed, delta_energy, anomaly_score

GitHub Actions

The workflow at .github/workflows/watch.yml runs every 4 hours during the mission window. It fetches the latest OEM, runs the full pipeline, and commits updated outputs/ back to the repo automatically. No manual intervention needed.

Data Source

Primary: NASA AROW (Artemis Real-time Orbit Website) — public OEM downloads
Fallback: JPL HORIZONS REST API — body ID -170 (Artemis II Orion)

Current State

TRANS-LUNAR COAST
Elapsed
Distance
Speed
Energy
Ecc
FPA

Anomaly Score

Isolation Forest
log Jerk (burn signature)

Mission Stats

Duration8.85 days
Max altitude406,777 km
ApoapsisApr 6 23:07 UTC
Entry speed11.00 km/s
State vectors3,193

ML — Anomaly Detection

Events flagged96 / 3,193
At mission timeT+20.4 h
OTC-1 BURN DETECTED
Isolation Forest score: 1.000 · Jerk spike + ΔEnergy
T+20.41h score 0.987
speed_residual anomaly

ML — Predicted Splashdown

Latitude18.4° N
Longitude151.2° W
1σ radius±42 km
MethodMC ballistic (3k samples)

Rust Engine

Parse time5.5 ms
Feature time1.3 ms
Features/vector28
Total6.8 ms