← Back to home

Simulation project

THAAD Simulation

A simulation project, not a real defense system, built to understand noisy sensing, estimation, guidance, and collision assessment in one closed loop.

Python · Kalman filter · simulation 2025 GitHub repo ↗

SUMMARY

A defensive-intercept simulation studying noisy radar, six-state Kalman filtering, fire-control gates, proportional navigation, and miss-distance assessment.

Problem

Interception simulations are a clean way to study uncertainty, noisy measurements, estimation, geometry, and control under time pressure.

What I built

I built a full guidance/navigation/control loop with noisy radar, six-state Kalman filtering, fire-control gating, proportional navigation, and miss-distance assessment.

Architecture / system design

The pipeline runs measurement -> estimation -> fire-control decision -> guidance command -> physics integration -> assessment.

Failure modes / what broke

The interesting failures are false confidence from noisy estimates, bad launch timing, and guidance choices that look stable until geometry changes.

Proof / metrics / tests

The original field notes include the battle-damage-assessment terminal and architecture explanation; no production claim is made.

Lessons learned

Simulation work is most useful when it makes uncertainty visible instead of hiding it behind perfect inputs.

field notes

Expanded field notes

WHAT THE SIMULATION TEACHES

A simulation project - not a real defense system. It exists to study a closed loop: noisy sensors → state estimation → decision → control → assessment. The systems lesson is the same one that shows up in any real-time pipeline: integration timing, lost detections, and continuous-time events that vanish if you only check the state once per frame.

A 3D kinematic simulation of a THAAD-style terminal missile defense concept, written from scratch to close a complete Guidance, Navigation, and Control (GNC) loop in software: noisy radar → state estimator → launch decision → guided interception → engagement assessment. A sandbox for the maths of hitting a bullet with another bullet, run entirely in code.

The estimator is a 6-state Kalman filter tracking position and velocity from Gaussian-noise position measurements. Fire-control launches only when the predicted impact point (PIP) is plausible, the track is mature, and the threat is clearly descending. The interceptor is a two-stage rocket with mass depletion, drag, and G-limits, steered by Augmented Proportional Navigation with a gravity bias.

DESIGN NOTE — WHY CPA MATTERS

At closing speeds of a few km/s, objects move tens of metres per timestep. A naive distance check between frames misses collisions - the interceptor and threat can "jump over" each other entirely. Continuous collision detection via Closest Point of Approach over each step (tmin = -(Δp·Δv)/|Δv|²) gives you the actual minimum miss distance, not a sampling artifact.

Every run ends with a Battle Damage Assessment table in the terminal alongside an interactive 3D Matplotlib replay with a time slider. A typical kill looks like this:

BATTLE DAMAGE ASSESSMENT · engineering mode
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ BATTLE DAMAGE ASSESSMENT ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ outcome      │ KILL       │
│ kill alt     │ 42.5 km    │
│ miss dist    │ 0.12 m     │
│ closing vel  │ 3 100 m/s  │
│ max g-load   │ 12.4 G     │
└──────────────────────────┘

possible outcomes: KILL · GROUND · TIMEOUT
            
GNC closed loop ballistic threat · 3D kinematics + gravity + drag radar gaussian noise 6-state kalman pos + vel estimate fire control PIP gate guidance (APN) N · LOS-rate · g-bias interceptor 2-stage · drag · g-limits CPA detect closest approach battle damage assessment KILL · GROUND · TIMEOUT closed GNC loop · solid = signal · dashed = control feedback
fig. 3 — full GNC loop: noisy detection → Kalman estimation → launch decision → APN guidance → CPA scoring.

hover or tab through any stage to trace the GNC loop

contact

Open to backend systems, AI infrastructure, and product engineering roles.