Skip to content

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)

  1. Plate Solving (plate_solver.py)
  2. Astrometry.net or astropy
  3. Convert pixel โ†’ RA/Dec
  4. ~5-30 arcsec precision

  5. Timing Sync (timing_sync.py)

  6. NTP synchronization
  7. <50ms timing error
  8. Essential for triangulation

  9. Upload (uploader.py)

  10. Batch uploads to central
  11. Retry on failure
  12. ~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

  1. Track Associator (track_associator.py)
  2. Link observations to known objects
  3. Create new candidates for unknown objects
  4. Build tracklets

  5. Orbit Solver (orbit_solver.py)

  6. Gauss method (long arcs)
  7. Admissible Region + Particle Filter (short arcs)
  8. 10,000-100,000 virtual particles

  9. Triangulator (triangulator.py)

  10. Multi-site position determination
  11. Calculate altitude without radar
  12. Uncertainty estimation

  13. Scheduler (scheduler.py)

  14. Find common visibility windows
  15. Coordinate simultaneous observations
  16. Task distribution

Characterization Module

Components: 1. Light Curve Analyzer (lightcurve.py) - Lomb-Scargle periodogram - Tumble period detection - Stability classification

  1. Material Classifier (material_classifier.py)
  2. B-V, V-R, R-I color indices
  3. Match to material signatures
  4. 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

  1. SSA Low Cost Architecture.md
  2. Core philosophy: software-heavy, hardware-minimal
  3. Hardware tiers and costs
  4. Software substitutions for expensive hardware
  5. Network topology

  6. SSA Implementation Roadmap.md

  7. Phase-by-phase implementation plan
  8. Hardware bills of materials
  9. Success metrics
  10. Testing checklist
  11. Risk register

  12. SSA Bulk Coding Handoff.md

  13. Complete code specifications
  14. File structure
  15. Function signatures
  16. Implementation requirements
  17. Testing requirements
  18. Deployment configuration

  19. SSA Session Summary.md (this document)

  20. Key decisions
  21. Technical architecture
  22. Algorithms
  23. Data flow
  24. 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

  1. Review all created documents
  2. Begin implementation starting with /edge/streak_detector.py
  3. Order hardware for first detection nodes
  4. Set up central server (VPS + PostgreSQL)
  5. Test with ISS observations

Open Questions

  1. Deployment locations: Where will first 3 detection nodes be located?
  2. Git repository: Need to set up GitHub repo and create issues
  3. VPS provider: Which cloud provider for central server?
  4. Partnerships: Which amateur networks to contact for Stage 3?
  5. 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