Skip to content

psmoon-py/nsh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ›°οΈ Project AETHER β€” Autonomous Constellation Manager

National Space Hackathon 2026 | Indian Institute of Technology, Delhi
Orbital Debris Avoidance & Constellation Management System


Overview

Project AETHER (Autonomous Evasion, Tracking, Heuristic Engine for Resilient orbits) is a full-stack system that autonomously manages a constellation of 50+ LEO satellites navigating through 10,000+ tracked debris objects. It ingests orbital telemetry, predicts collisions up to 24 hours ahead, plans and executes fuel-optimal evasion maneuvers, and returns satellites to their operational slots β€” all while respecting real-world constraints like communication blackouts, thruster cooldowns, and finite propellant budgets.

Key Features

  • J2-perturbed RK4 orbital propagation β€” Numba JIT-compiled for 10,000 objects in ~100ms
  • KD-tree conjunction detection β€” O(N log N) spatial screening with coarse-then-fine TCA refinement
  • 6-gate maneuver validation β€” cooldown, LOS, signal delay, fuel, max-Ξ”V, satellite existence
  • Blind conjunction handling β€” pre-uploads evasion sequences before satellite enters blackout
  • Autonomous station-keeping β€” drift monitoring, recovery burn scheduling, uptime tracking
  • EOL management β€” auto-schedules graveyard orbit at ≀5% fuel
  • 3D WebGL dashboard β€” Three.js Earth globe with InstancedMesh debris cloud at 60 FPS

Quick Start

Prerequisites

Option A: Docker (Production / Submission)

docker build -t acm-nsh2026 .
docker run -p 8000:8000 acm-nsh2026

Open http://localhost:8000 β€” both API and dashboard served on the same port.

Option B: Local Development (Recommended During Development)

Terminal 1 β€” Backend:

pip install -r requirements.txt
python scripts/generate_initial_data.py
python -m uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000

Terminal 2 β€” Frontend:

cd frontend
npm install
npm run dev

Backend: http://localhost:8000
Frontend: http://localhost:5173 (auto-proxies /api to backend)


API Endpoints

Method Endpoint Description
POST /api/telemetry Ingest orbital state vectors for satellites and debris
POST /api/maneuver/schedule Schedule an evasion + recovery burn sequence
POST /api/simulate/step Advance simulation time by N seconds
GET /api/visualization/snapshot Compressed state for frontend rendering

Example: Send Telemetry

curl -X POST http://localhost:8000/api/telemetry \
  -H "Content-Type: application/json" \
  -d '{
    "timestamp": "2026-03-12T08:00:00.000Z",
    "objects": [
      {
        "id": "DEB-99421", "type": "DEBRIS",
        "r": {"x": 4500.2, "y": -2100.5, "z": 4800.1},
        "v": {"x": -1.25, "y": 6.84, "z": 3.12}
      }
    ]
  }'

Example: Advance Simulation 1 Hour

curl -X POST http://localhost:8000/api/simulate/step \
  -H "Content-Type: application/json" \
  -d '{"step_seconds": 3600}'

Project Structure

β”œβ”€β”€ Dockerfile                    # ubuntu:22.04 base, exposes port 8000
β”œβ”€β”€ docker-compose.yml            # Optional convenience wrapper
β”œβ”€β”€ requirements.txt              # Python dependencies
β”œβ”€β”€ README.md
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py                   # FastAPI app β€” all 4 API endpoints
β”‚   β”œβ”€β”€ config.py                 # Physical constants from problem statement
β”‚   β”œβ”€β”€ models.py                 # Pydantic request/response schemas
β”‚   β”œβ”€β”€ physics/
β”‚   β”‚   β”œβ”€β”€ propagator.py         # RK4 + J2 with Numba JIT
β”‚   β”‚   β”œβ”€β”€ coordinates.py        # ECI ↔ ECEF ↔ Lat/Lon/Alt
β”‚   β”‚   └── maneuver.py           # RTN frame, Ξ”V planning, Tsiolkovsky
β”‚   β”œβ”€β”€ engine/
β”‚   β”‚   β”œβ”€β”€ state_manager.py      # In-memory NumPy state store
β”‚   β”‚   β”œβ”€β”€ conjunction.py        # KD-tree spatial indexing + TCA search
β”‚   β”‚   β”œβ”€β”€ scheduler.py          # Constraint-validated maneuver queue
β”‚   β”‚   β”œβ”€β”€ station_keeping.py    # Slot drift monitoring + recovery
β”‚   β”‚   └── ground_stations.py    # Line-of-sight + visibility windows
β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”œβ”€β”€ logger.py             # Structured JSON event logging
β”‚   β”‚   └── data_loader.py        # TLE β†’ ECI conversion utilities
β”‚   └── data/
β”‚       └── ground_stations.csv   # 6 ground stations from problem statement
β”‚
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ package.json              # React 18, Three.js, Recharts, D3
β”‚   β”œβ”€β”€ vite.config.js            # Vite + API proxy
β”‚   └── src/
β”‚       β”œβ”€β”€ App.jsx               # Dashboard grid layout
β”‚       β”œβ”€β”€ components/
β”‚       β”‚   β”œβ”€β”€ Globe3D.jsx       # 3D Earth + satellites + debris cloud
β”‚       β”‚   β”œβ”€β”€ BullseyePlot.jsx  # Polar conjunction proximity chart
β”‚       β”‚   β”œβ”€β”€ FuelHeatmap.jsx   # Fleet propellant status grid
β”‚       β”‚   β”œβ”€β”€ ManeuverGantt.jsx # Timeline with burns + cooldowns
β”‚       β”‚   β”œβ”€β”€ CDMList.jsx       # Conjunction warning list
β”‚       β”‚   β”œβ”€β”€ SatellitePanel.jsx# Selected satellite detail view
β”‚       β”‚   └── StatusBar.jsx     # Header with time + sim controls
β”‚       └── hooks/
β”‚           └── useSnapshot.js    # API polling hook
β”‚
β”œβ”€β”€ scripts/
β”‚   └── generate_initial_data.py  # Generate synthetic test constellation
β”‚
└── docs/
    └── technical_report.tex      # LaTeX technical report

Physics & Algorithms

Orbital Propagation

J2-perturbed two-body equations integrated via RK4 (h = 10s):

dΒ²r/dtΒ² = -(ΞΌ/|r|Β³)Β·r + a_J2

a_J2 = (3/2)·J2·μ·R²_E/|r|⁡ · [x(5z²/r² - 1), y(5z²/r² - 1), z(5z²/r² - 3)]

Constants: ΞΌ = 398600.4418 kmΒ³/sΒ², R_E = 6378.137 km, Jβ‚‚ = 1.08263Γ—10⁻³

Conjunction Detection

  1. Build KD-tree over debris positions β†’ O(N log N)
  2. Query 500 km screening ball per satellite β†’ O(k) candidates
  3. Coarse propagation at 60s steps over 24h β†’ find TCA neighborhood
  4. Fine refinement at 1s steps in Β±120s window β†’ precise TCA and miss distance
  5. Classify: CRITICAL (<100m), RED (<1km), YELLOW (<5km)

Fuel Consumption

Tsiolkovsky equation: Ξ”m = m_current Β· (1 - e^(-|Ξ”V| / (Isp Β· gβ‚€)))

Where: Isp = 300s, gβ‚€ = 9.80665 m/sΒ², initial fuel = 50 kg, dry mass = 500 kg

Maneuver Constraints

Constraint Value
Max Ξ”V per burn 15 m/s (0.015 km/s)
Thruster cooldown 600 seconds
Signal delay 10 seconds
Station-keeping box 10 km spherical radius
EOL fuel threshold 5% of initial (2.5 kg)
Collision threshold 100 meters (0.1 km)

Evaluation Criteria

Criterion Weight Our Approach
Safety Score 25% Auto-evasion at 2 km safety margin; blind-conjunction pre-upload
Fuel Efficiency 20% Transverse burns (most efficient); early detection reduces Ξ”V
Constellation Uptime 15% Auto recovery burns; drift monitoring; exponential penalty tracking
Algorithmic Speed 15% KD-tree O(N log N); Numba parallel propagation; coarse/fine TCA
UI/UX & Visualization 15% 3D WebGL globe; 60 FPS; all 4 required visualization modules
Code Quality & Logging 10% Modular architecture; JSON event logs; Pydantic-validated API

Team

Name Role
Member 1 Backend Physics Engine
Member 2 Conjunction Detection & Maneuver Planning
Member 3 Frontend Visualization
Member 4 Integration, Docker, Documentation

License

MIT License. See LICENSE for more details.


Acknowledgments

  • Indian Institute of Technology, Delhi β€” for hosting the National Space Hackathon 2026
  • NASA/CelesTrak β€” for public orbital element data
  • Three.js / React Three Fiber β€” for the 3D rendering framework
  • SciPy β€” for spatial indexing algorithms

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors