SLASH Ground-Based Laser Deorbit Calculator
Inspiration
Low Earth orbit carries millions of debris fragments between 1 and 10 cm. They are too small to track reliably, yet a single one can disable a satellite. The 2009 Cosmos-2251 / Iridium-33 collision alone created thousands of them. SLASH (Solar LAser for Space debris Harnessing) asks a direct question: can a solar-pumped Nd:YAG laser on a mountaintop in Crete nudge these objects into reentry, photon by photon, with no contact and no new debris?
I already had the validated physics in a Python research codebase (slash_core) and a full simulation study showing a 2.7 kg aluminium cube can be dropped from a 400 km orbit to the reentry threshold in 164 laser passes over 310 days with 24.6 MJ of delivered energy. What I did not have was a way to let anyone feel that answer: pick a real fragment from the live catalog, watch it rise over Crete at night, fire the beam, and see the perigee drop. So I built this calculator as a companion to my ORBIT VEIL satellite tracker, and put it on the open web with no backend and no keys.
What it does
You pick any object from the live CelesTrak catalog (about 18,000 objects, refreshed every 2 hours), by name, NORAD id, or a pasted TLE. The tool computes every visibility pass over the Sitia ground station (35.01 N, 26.13 E) for the next days, with elevation, slant range, range-rate, and angular rate sampled along each pass. For each pass it delivers an engagement estimate: atmospheric transmission, beam spot on target, fluence, ablation impulse, delta-v, and the exact two-body perigee after the burn. It only counts burns that actually lower the perigee, screens the post-burn orbit against protected shells (ISS, Tiangong, Starlink, GEO) and a watchlist of high-value assets, and estimates the full deorbit campaign: passes to threshold, days, total energy.
The 3D view shows the full catalog swarming around a Blue Marble Earth with a moving day-night terminator, the Crete station beacon, the target's orbit, and the laser beam itself, which fires only when the debris is genuinely above the horizon. A time slider scrubs plus or minus 12 hours with warp up to 240x. Selecting a pass rotates the scene so Crete faces the debris track and replays the engagement. A small procedural 3D preview even shows the estimated shape of your target, tumbling at its estimated spin rate.
How I built it
Frontend only: Vite, React, TypeScript, Three.js, Tailwind. Orbit propagation is SGP4 via satellite.js, fully in-browser. The 18k-object field runs in a Web Worker that ships two exact SGP4 samples per interval while a custom GLSL vertex shader cubic-Hermite-interpolates between them, so orbits stay curved at any time warp.
The physics is ported from my validated Python models. Clear-sky transmission follows Beer-Lambert with an 8.5 km scale height:
$$T(\theta) = \exp!\left(-\frac{kH}{\sin\theta}\right), \quad H = 8.5\ \text{km},\ k = 0.08\ \text{km}^{-1}\ \text{at}\ 1064\ \text{nm}$$
The spot combines M-squared diffraction with pointing jitter:
$$r_{spot} = \sqrt{\left(\frac{2 M^2 \lambda R}{\pi D}\right)^2 + (R\,\sigma_{jit})^2}$$
and the impulse uses the ablation coupling coefficient Cₘ (default 20 µN/W for aluminium, from the Phipps and Sinko literature):
$$\Delta v = \frac{C_m \, P_{avg} \, T \, t}{m}$$
Perigee after each retrograde burn is exact two-body mechanics from the state vector, not a linearization. With the post-burn speed v′ = v − Δv at burn radius r:
$$a' = \frac{1}{\dfrac{2}{r} - \dfrac{v'^2}{\mu}}, \qquad r'_p = 2a' - r - R_E$$
The burn point becomes the new apogee, and the campaign iterator chains burns until the perigee crosses the 200 km decay threshold.
What I learned
Pointing jitter, not aperture, is the binding constraint. Five arcseconds of jitter is a 9.7 m spot radius at 400 km, while the diffraction term is only 0.4 m. The target does not sit in the beam; it flies through it. That single fact reshapes the whole fluence budget and is why the tool reports dwell time on target per pass.
Second: geometry is unforgiving in both directions. Transmission at zenith is 0.51 but falls to 0.02 at 10 degrees elevation, so the low passes that last longest deliver almost nothing. And a retrograde burn preserves the burn radius as the new apogee, r′ₚ = 2a′ − r − Rₑ, which means where along the pass you fire matters as much as how long.
Challenges
The honest failure modes were the best part. Early versions showed the perigee rising after some burns, which is absurd for a deorbit tool: the engagement sample was chosen for approach geometry, not outcome, and osculating-element noise on near-circular orbits made it worse. The fix scans every valid sample in the pass and engages at the one with the largest measured perigee drop, then hard-gates any pass where the burn cannot deorbit.
The laser once rendered straight through the planet when a selected target dipped below the horizon; the beam now has a hard geometric horizon guard. Scrubbing time spun the whole Earth like a toy, so I rebuilt the scene in an Earth-fixed frame where only the terminator and the satellites move. And 18,000 SGP4 propagations per frame nearly froze the tab before the worker and GPU interpolation split the load.
The deepest uncertainty is physical: published Cₘ values span an order of magnitude. The tool treats it as an adjustable, cited, research-grade estimate rather than a fact, which is what a feasibility tool should do.
Try it
Live demo: https://dimitrilightmirror.github.io/slash-deorbit-calculator/
Built With
- celestrack
- glsl
- react
- sgp4
- tailwind
- three.js
- typescript
- vite
- webgl
Log in or sign up for Devpost to join the conversation.