SSA Architecture Session Summary¶
Date: April 6, 2026 Topic: Low-Cost Space Situational Awareness System Architecture Status: Planning complete, ready for implementation
Key Decisions Made¶
1. Cost Strategy: Software-Heavy, Hardware-Minimal¶
Core Principle: Trade compute for aperture. Use statistical methods and distributed networks instead of expensive hardware.
| Traditional SSA | OpenASTRO SSA | Cost Ratio |
|---|---|---|
| 1 professional site ($330K) | 50 detection nodes ($13K) | 25ร cheaper |
| Single point of failure | Massive redundancy | Infinitely more robust |
| Limited coverage | Global distribution | Full sky coverage |
Critical insight from SSA.md: Sony STARVIS sensors (IMX291/IMX307) cost $15-30 but achieve read noise (~1.0 eโป) matching scientific cameras ($10,000+).
2. Three-Stage Architecture¶
Stage 1: Detection (Layer 1 Hardware)
โโโ Ultra-cheap cameras ($100-200 each)
โโโ Wide-field, starlight-capable
โโโ Find unknown objects
โโโ Create initial orbit estimate (Admissible Region method)
โโโ Output: Candidate objects with uncertainty clouds
Stage 2: Refinement (Layer 2 Hardware)
โโโ Entry-level telescopes ($500-1,000 each)
โโโ Track identified objects
โโโ Triangulate from multiple sites
โโโ Refine orbit to high precision
โโโ Output: Precise orbital elements
Stage 3: Characterization (No Hardware - Partnerships)
โโโ Light curve analysis (tumble detection)
โโโ Multi-filter photometry (material classification)
โโโ Size estimation
โโโ Output: Physical properties
3. Network Topology¶
Minimum Viable: 2 detection nodes = $260 (prototype only) Basic Triangulation: 3 detection nodes = $390 (can determine altitude) Operational: 10 detection + 3 tracking = $2,300 (continental coverage) Production: 50 detection + 5 tracking = $9,200 (global coverage)
4. Future: CubeSat Active Sensing¶
Passive optical has limitations: - Only sees sun-illuminated objects (twilight hours) - Cannot measure range directly - Cannot see through clouds - Limited to >10cm objects
Solution: Deploy cheap CubeSats with lidar: - 3U CubeSat: $50-100K to build - Lidar payload: Active illumination, day/night operation - Range resolution: 1-10 meters - 5-10 CubeSats = $500K-1M (still 3ร cheaper than ground radar)
Technical Architecture¶
Hardware Layer¶
Detection Node ($100-200)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DETECTION NODE โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ IMX307/IMX291 board โ $15-30 โ
โ 8mm f/1.2 lens โ $20 โ
โ Raspberry Pi 4 (4GB) โ $55 โ
โ SD card + cables โ $25 โ
โ 3D printed enclosure โ $10 โ
โ Power supply โ $10 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ TOTAL โ$135-155 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Capability:
- Detection: Mag 10-11
- Field of view: ~50ยฐ (all-sky)
- Frame rate: 25-60 fps
- Astrometry: 5-30 arcsec
- Can detect: LEO debris >30cm, GEO satellites
Tracking Station ($300-800)¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TRACKING STATION โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Used 6" Dobsonian โ $200-400 โ
โ ZWO ASI290MM (or equiv) โ $100-300 โ
โ Guide scope (30mm) โ $50 โ
โ Mini PC / NUC โ $200 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ TOTAL โ$550-950 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
OR Budget Option:
โ Modified webcam โ $100 โ
โ Used 6" telescope โ $200 โ
โ Arduino controller โ $30 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ TOTAL โ$330 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Capability:
- Detection: Mag 13-14
- Field of view: ~1ยฐ (narrow)
- Can track: LEO, MEO, GEO objects
- Astrometry: 1-2 arcsec
Software Layer¶
Edge Processing (Raspberry Pi)¶
Components:
1. Streak Detection (streak_detector.py)
- Hough transform for line detection
- Real-time processing at 25 fps
- Filter by velocity (remove planes/birds)
- Plate Solving (
plate_solver.py) - Astrometry.net or astropy
- Convert pixel โ RA/Dec
-
~5-30 arcsec precision
-
Timing Sync (
timing_sync.py) - NTP synchronization
- <50ms timing error
-
Essential for triangulation
-
Upload (
uploader.py) - Batch uploads to central
- Retry on failure
- ~1KB per detection (vs 100MB video)
Central Server (Cloud VPS)¶
Components:
1. Catalog Manager (catalog.py)
- Space-Track.org API integration
- TLE propagation (SGP4)
- Local caching
- Track Associator (
track_associator.py) - Link observations to known objects
- Create new candidates for unknown objects
-
Build tracklets
-
Orbit Solver (
orbit_solver.py) - Gauss method (long arcs)
- Admissible Region + Particle Filter (short arcs)
-
10,000-100,000 virtual particles
-
Triangulator (
triangulator.py) - Multi-site position determination
- Calculate altitude without radar
-
Uncertainty estimation
-
Scheduler (
scheduler.py) - Find common visibility windows
- Coordinate simultaneous observations
- Task distribution
Characterization Module¶
Components:
1. Light Curve Analyzer (lightcurve.py)
- Lomb-Scargle periodogram
- Tumble period detection
- Stability classification
- Material Classifier (
material_classifier.py) - B-V, V-R, R-I color indices
- Match to material signatures
- S-type, C-type, M-type, solar panel
Key Algorithms¶
Track-and-Stack (Replaces Large Aperture)¶
Problem: Faint objects below detection threshold.
Solution: Predict motion, shift frames, accumulate.
# Pseudocode
def track_and_stack(frames, predicted_velocity):
accumulator = zeros_like(frames[0])
for i, frame in enumerate(frames):
# Shift frame by predicted motion
shift = predicted_velocity * i / fps
shifted = scipy.ndimage.shift(frame, shift)
accumulator += shifted
# Result: โN improvement in SNR
return accumulator
Gain: 100 frames โ 2.5 magnitude improvement
Admissible Region + Particle Filter (Replaces Perfect Astrometry)¶
Problem: Short observations (1 minute) don't constrain range.
Solution: Generate all physically valid orbits, then prune.
# Pseudocode
def short_arc_orbit(observations):
# From angles and rates, define valid (range, range_rate) region
# Constraints:
# - Energy < 0 (bound orbit)
# - Perigee > 100 km
# Generate 10,000 particles
particles = sample_admissible_region(n=10000)
# Propagate forward
for particle in particles:
particle = propagate(particle, time=24_hours)
# When new observation arrives:
new_obs = wait_for_observation()
# Prune particles inconsistent with observation
for particle in particles:
if angular_distance(particle, new_obs) > tolerance:
particles.remove(particle)
# Remaining cluster = true orbit
return fit_orbit(particles)
Compute cost: GPU can propagate 100K particles in seconds
Hardware saved: Entire precision optics budget
Triangulation (Replaces Radar)¶
Problem: Single optical observation gives angle, not distance.
Solution: Use 3+ sites to find intersection.
# Pseudocode
def triangulate(observations):
# observations = [(site_lat, site_lon, site_elev), (ra, dec, time), ...]
# Convert sites to ECI at each time
sites_eci = [eci_from_ecef(site, obs.time) for site, obs in observations]
# Line of sight vectors
los_vectors = [ra_dec_to_unit_vector(obs.ra, obs.dec) for obs in observations]
# Find point minimizing distance to all lines
# (geometric intersection)
position = geometric_intersection(sites_eci, los_vectors)
# Altitude = distance from Earth center - Earth radius
altitude = norm(position) - 6371 # km
return position, altitude
Requirement: Timing synchronization (GPS or NTP)
Data Flow¶
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COMPLETE DATA FLOW โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
1. EDGE NODE (RPi)
โ
โโโ Video stream (25 fps)
โโโ Detect streaks (Hough)
โโโ Plate solve (RA/Dec)
โโโ Timestamp (NTP)
โโโ Upload JSON (~1KB)
โ
โผ
2. CENTRAL SERVER
โ
โโโ Store in PostgreSQL
โโโ Associate with catalog
โ โโโ Known object? โ Update orbit
โ โโโ Unknown? โ Create candidate
โ
โโโ For new candidates:
โ โโโ Short arc? โ Admissible Region + particles
โ โโโ Wait for more observations
โ
โโโ For known objects:
โ โโโ Triangulate (if multi-site)
โ โโโ Refine orbit (Gauss method)
โ
โโโ Schedule precision observations (if needed)
โ
โผ
3. TRACKING STATIONS (for refinement)
โ
โโโ Receive task schedule
โโโ Track object
โโโ Measure precise position
โโโ Return high-precision observations
โ
โผ
4. CHARACTERIZATION
โ
โโโ Light curve analysis
โ โโโ Periodogram for tumble period
โ โโโ Stability classification
โ
โโโ Multi-filter photometry
โ โโโ B-V, V-R, R-I colors
โ โโโ Material classification
โ
โโโ Size estimation
โโโ From magnitude + distance + albedo
โ
โผ
5. OUTPUT
โโโ Orbit elements (a, e, i, ฮฉ, ฯ, ฮฝ)
โโโ Altitude and velocity
โโโ Tumble status (stable/unstable)
โโโ Materialtype
โโโ Size estimate
Performance Targets¶
| Metric | Professional | OpenASTRO Target | Notes |
|---|---|---|---|
| Cost per site | $150,000+ | $130 | 1000ร cheaper |
| Detection limit | Mag 15-18 | Mag 10-11 | Stack to improve |
| Astrometric precision | 0.5 arcsec | 5-30 arcsec | N-sites averaging |
| Timing precision | ฮผs (GPS) | ms (NTP) | Acceptable for LEO |
| Coverage | Single point | Global | Distributed advantage |
| Weather resilience | 50% uptime | 99%+ | Multi-site redundancy |
| Orbit precision | km | 10-50 km | Improves with time |
| Altitude determination | Radar (m) | Optical (km) | Lower precision, acceptable |
| Characterization | Yes | Partial | Via partnerships |
Implementation Roadmap¶
Phase 1: Foundation (Weeks 1-4)¶
Tasks:
โโโ Hardware
โ โโโ Order IMX307 kits (3-5 units)
โ โโโ Order RPi 4 boards
โ โโโ Prepare enclosures
โ
โโโ Software Edge
โ โโโ Implement streak_detector.py
โ โโโ Implement plate_solver.py
โ โโโ Implement timing_sync.py
โ โโโ Implement uploader.py
โ
โโโ Software Central
โ โโโ Set up PostgreSQL
โ โโโ Implement catalog.py
โ โโโ Implement track_associator.py
โ โโโ Implement basic API
โ
โโโ Testing
โโโ Unit tests for all modules
โโโ ISS detection test
โโโ Validation against known TLEs
Phase 2: Network (Weeks 5-12)¶
Tasks:
โโโ Deployment
โ โโโ Deploy 3 detection nodes
โ โโโ Configure central server
โ โโโ Test simultaneous observations
โ
โโโ Coordination
โ โโโ Implement scheduler.py
โ โโโ Implement visibility calculator
โ โโโ Test multi-site timing
โ
โโโ Orbit Determination
โ โโโ Implement triangulator.py
โ โโโ Implement orbit_solver.py (Gauss method)
โ โโโ Implement orbit_solver.py (Admissible Region)
โ
โโโ Testing
โโโ Test triangulation with ISS
โโโ Verify altitude accuracy (<100 km error)
โโโ Test unknown object detection
Phase 3: Refinement (Weeks 13-20)¶
Tasks:
โโโ Hardware
โ โโโ Add 3 tracking stations
โ โโโ Integrate with scheduler
โ
โโโ Software
โ โโโ Implement precision tracking
โ โโโ Implement orbit refinement
โ โโโ Implement accuracy metrics
โ
โโโ Testing
โโโ Verify orbit precision
โโโ Compare with Space-Track
โโโ Validate catalog updates
Phase 4: Characterization (Weeks 21-28)¶
Tasks:
โโโ Software
โ โโโ Implement lightcurve.py
โ โโโ Implement material_classifier.py
โ โโโ Integrate with pipeline
โ
โโโ Testing
โ โโโ Test tumble detection
โ โโโ Validate material classification
โ โโโ Compare with professional data
โ
โโโ Partnerships
โโโ Contact amateur networks
โโโ Establish data sharing
โโโ Collaborate oncharacterization
Phase 5: Scale (Months 7+)¶
Tasks:
โโโ Expand network
โ โโโ Add detection nodes
โ โโโ Add tracking stations
โ โโโ Geographic distribution
โ
โโโ Operations
โ โโโ Automate catalog updates
โ โโโ Implement collision alerts
โ โโโ Build web interface
โ
โโโ Future
โโโ CubeSat design
โโโ Active sensing payload
Files Created This Session¶
- SSA Low Cost Architecture.md
- Core philosophy: software-heavy, hardware-minimal
- Hardware tiers and costs
- Software substitutions for expensive hardware
-
Network topology
-
SSA Implementation Roadmap.md
- Phase-by-phase implementation plan
- Hardware bills of materials
- Success metrics
- Testing checklist
-
Risk register
-
SSA Bulk Coding Handoff.md
- Complete code specifications
- File structure
- Function signatures
- Implementation requirements
- Testing requirements
-
Deployment configuration
-
SSA Session Summary.md (this document)
- Key decisions
- Technical architecture
- Algorithms
- Data flow
- Implementation roadmap
References¶
From Science Docs:
- SSA.md - Primary technical reference
- Security cameras SSA.md - Hardware specifications
- Global Meteor Network - Operational reference
- Project Luciole - Fly's eye architecture
Glossary¶
| Term | Definition |
|---|---|
| SSA | Space Situational Awareness |
| LEO | Low Earth Orbit (160-2000 km) |
| MEO | Medium Earth Orbit (2000-35786 km) |
| GEO | Geostationary Earth Orbit (35786 km) |
| TLE | Two-Line Element (orbit format) |
| SGP4 | Simplified General Perturbations (orbit propagator) |
| IMX307 | Sony STARVIS sensor model |
| NTP | Network Time Protocol |
| RA/Dec | Right Ascension/Declination (celestial coordinates) |
| Admissible Region | Valid (range, range-rate) space for short-arc orbits |
| Tracklet | Short series of observations |
| Plate solving | Astrometric calibration (pixelโsky) |
Next Actions¶
- Review all created documents
- Begin implementation starting with
/edge/streak_detector.py - Order hardware for first detection nodes
- Set up central server (VPS + PostgreSQL)
- Test with ISS observations
Open Questions¶
- Deployment locations: Where will first 3 detection nodes be located?
- Git repository: Need to set up GitHub repo and create issues
- VPS provider: Which cloud provider for central server?
- Partnerships: Which amateur networks to contact for Stage 3?
- Funding: Budget for Phase 1 hardware ($2,000)?
Contact & Handoff¶
This documentation is ready for handoff to implementation team.
Implementation priority:
1. Edge detection (streak_detector.py)
2. Catalog integration (catalog.py)
3. Central API (api.py)
4. Testing infrastructure
Documentation complete: April 6, 2026 Ready for implementation: Yes