Skip to content

System Architecture

ORION is a two-segment system: a flight segment running on a Raspberry Pi 5 in orbit, and a ground segment at the EPFL Ecublens ground station in Switzerland.

graph LR
    SimSat["SimSat<br/>(Orbital Propagator<br/>+ Mapbox API)"]
    NT["NavTelemetry"]
    EA["EventAction"]
    CM["CameraManager"]
    VLM["VlmInferenceEngine"]
    TR["TriageRouter"]
    GCD["GroundCommsDriver"]
    BM["BufferManager"]
    RX["receiver.py<br/>(Ground Station)"]
    GDS["F-Prime GDS<br/>(Commands/Telemetry)"]

    SimSat -->|"HTTP position"| NT
    SimSat -->|"HTTP Mapbox tile"| CM
    NT -->|"NavState (sync)"| CM
    NT -->|"NavState (sync)"| EA
    EA -->|"ModeChangePort"| CM
    EA -->|"ModeChangePort"| VLM
    EA -->|"ModeChangePort"| TR
    EA -->|"ModeChangePort"| GCD
    BM -->|"Fw::Buffer"| CM
    CM -->|"InferenceRequestPort"| VLM
    VLM -->|"TriageDecisionPort"| TR
    TR -->|"FileDownlinkPort<br/>(HIGH)"| GCD
    TR -->|"disk write<br/>(MEDIUM)"| TR
    GCD -->|"TCP :50050<br/>(ORIO frames)"| RX
    GDS <-->|"TCP :50000<br/>(F-Prime link)"| EA

    CM -->|"buffer return"| BM
    VLM -->|"buffer return"| BM
    TR -->|"buffer return"| BM
    GCD -->|"buffer return"| BM

Flight Segment

The flight segment is an F-Prime deployment (Orion) composed of six custom active/passive components plus the standard F-Prime infrastructure (CdhCore, ComCcsds, FileHandling, DataProducts subtopologies).

Component Inventory

Component Real Satellite Equivalent Type Priority Role
EventAction On-Board Computer (OBC) mode manager Active 38 Mission mode state machine owner. Evaluates mode transitions at 1 Hz, broadcasts mode changes to all pipeline components.
NavTelemetry GNSS receiver payload Active 35 Polls SimSat for orbital position every 5 seconds. Computes Haversine distance to ground station and determines comm window state.
CameraManager Earth observation camera payload Active 30 Acquires imagery from SimSat's Mapbox API. Fuses GPS telemetry and dispatches to the VLM queue. Auto-capture at 65s intervals in MEASURE mode.
VlmInferenceEngine On-board AI co-processor Active 10 Runs the LFM2.5-VL-1.6B model via llama.cpp. 120-second per-frame timeout with KV cache reset on abort.
TriageRouter On-board data handling unit Active 25 Executes triage doctrine: HIGH to downlink, MEDIUM to storage, LOW discarded. Drops all frames in SAFE mode.
GroundCommsDriver X-band radio transmitter Active 20 Manages the simulated X-band link. Transmits HIGH frames over TCP. Queues to disk outside comm window.
BufferManager On-board mass memory Passive : Static pool of 20 x 786,432-byte (512x512 RGB) image buffers.
comDriver (F-Prime) UHF radio transceiver Passive : F-Prime TcpClient on port 50000. Always-on command/telemetry link to GDS.

Rate Groups

All ORION components are driven by a 1 Hz Linux timer through three rate groups:

Rate Group Frequency Members
RG1 1 Hz Telemetry send, FileDownlink, SystemResources, ComQueue, CmdDisp, NavTelemetry, CameraManager, GroundCommsDriver, EventAction
RG2 0.5 Hz CmdSequencer
RG3 0.25 Hz Health watchdog, BufferManagers (Comms, DataProducts, ORION), DataProducts writer/manager

Ground Segment

The ground segment consists of three software elements:

A standalone Python TCP server listening on port 50050. Accepts incoming ORIO-framed image data from GroundCommsDriver, validates the 8-byte header (magic ORIO + payload length), and writes each 512x512 RGB frame to disk as a .raw file.

F-Prime GDS: Command and Telemetry

The standard F-Prime Ground Data System connects to the flight segment over TCP port 50000 via Drv.TcpClient. Provides:

  • Uplink: Command dispatch (SET_ECLIPSE, ENTER_SAFE_MODE, LOAD_MODEL, TRIGGER_CAPTURE, etc.)
  • Downlink: Telemetry channels (position, mode, inference time, triage counts), event logs, and file transfers

SimSat: Orbital Simulator (External)

An external service (default port 9005) that provides:

  • Orbital propagator: Returns current latitude, longitude, and altitude via HTTP
  • Mapbox satellite tiles: Returns 512x512 RGB imagery for the satellite's current ground track position