Rocket Telemetry Project Docs

Node Software Processes and Inter-Process Communication

Migrated from Original Docs/Node/Node-SoftwareProcesses-IPC.md

Node Software Processes and Inter-Process Communication

Due to document length constraints, this document is a reference outline. For detailed specifications, see:

  • Section 4: Software Process Architecture , Process model, five independent processes (FastAPI, Antenna Control, DSP, Telemetry Router, Health Monitor)
  • Section 5: Inter-Process Communication (IPC) Buses , Control bus (ZeroMQ), Status/Telemetry bus, DSP-to-Router stream, Antenna feedback loop

Key Concepts

Five independent processes communicate via dedicated IPC buses:

  1. FastAPI Control Server (Python, port 8080)

    • Listens for REST calls from central
    • Publishes control messages to all subsystems
    • Collects status from each worker
    • Exposes /status, /capabilities, /metrics endpoints
  2. Antenna Control Daemon (Python or C++)

    • Receives az/el or coordinate-based pointing requests
    • Converts to device commands (FPGA weights, motor PWM, etc.)
    • Reports actual position and motor status
  3. DSP Pipeline (C++/GNU Radio)

    • Continuous high-rate IQ processing (40 MSPS)
    • Outputs decoded frames, lock metrics, Doppler tracking
  4. Telemetry Router (Python or C++)

    • Extracts frames from the active DSP bit stream
    • Applies field schemas and payload typing for configured payloads
    • Emits telemetry events to output port 9002 as raw frame bytes or schema-backed JSON objects
  5. Health Monitor (Python)

    • Collects CPU, memory, temperature, FPGA load
    • Publishes to Prometheus metrics(:9003) and status bus

IPC Buses:

  • Control Bus (port 5555, ZeroMQ Pub-Sub): FastAPI → all workers
  • Status Bus (port 5556, ZeroMQ Push-Pull): Workers → FastAPI
  • DSP-to-Router Stream (Unix socket): High-bandwidth frame transfer
  • Antenna Feedback: Position and encoder updates back to FastAPI

Design principle: Decouple API path from DSP path. DSP restarts don't kill the HTTP server.


Full details in node-specific documents: See Node-NetworkPorts for port allocation, Node-ConfigurationProtocols for control messaging.

On this page