Stellar ControlMission control · by Stellar Systems v0.1.0

Getting Started

Overview

What Stellar Control is, what it does, and the ideas it is built on.

Stellar Control is a Mission Control System for space systems. It sends telecommands, decodes telemetry into measures, runs operational procedures, raises alarms, plans runs on ground station passes and transfers files. The same system, the same catalogues and the same procedures serve the test bench, the flatsat and the satellite in orbit: only the environment changes.

It is written in Rust, runs on top of a NATS server with JetStream, and is driven from a command line (stellar), a web console and an HTTP/WebSocket API.

What it does#

CapabilityIn shortRead more
TelecommandsSemantic telecommands with typed arguments, preconditions and a three-step acknowledgement chain (driver, gateway, verification on telemetry)Telecommand Lifecycle
TelemetryFrames decoded by drivers, calibrated, turned into derived measures, kept as current valuesMeasures and Current Values
ProceduresA dedicated language, inspired by PLUTO, checked at compile time: steps, procedures, retries, confirmationsProcedure Language
RunsLaunch, follow, answer, suspend, resume, abort; evidence and HTML test reportsRunning Procedures
SafetyHazardous telecommands confirmed by operator and supervisor, policies per environmentHazardous Confirmations
Passes and schedulingPasses pushed by the flight dynamics system and the station provider, runs fired on themPasses, Scheduling
AlarmsLimits and conditions, acknowledgement, shelving, automatic reactionsAlarm Handling
Files and streamsMulti-pass file transfers (chunked or CFDP), uploads, continuous payload streamsFile Transfers
IntegrationDrivers, transports, gateways, output connectors and pass feeders in Rust, Python or any languageExtending Stellar Control
SimulationSimulated targets described in YAML, dry runs of procedures without any infrastructureSimulated Targets

Principles#

Declarative desired state, reconciled continuously. Catalogues, topology, steps and procedures live in a Git repository and are reviewed through merge requests. They compile into a snapshot; a reconciler compares that desired state with the components actually running, binds them together and publishes which targets are ready.

Stateless components, stateful system. Every piece of state lives in Git (desired), in NATS KV (observed) or in JetStream (operational). A restarted component resumes without loss, and adding instances of a component spreads the load.

The language is the contract. The MCS only handles semantic data: telecommands with named arguments, measures, enum values. Binary formats stay inside the drivers, which are plug-and-play processes speaking a NATS contract.

A procedure validated on a flatsat runs as is in orbit. Roles in procedures are bound to concrete targets at launch; environments (SIM, AIT, IVV, in_orbit) carry the policies that differ, such as who confirms a hazardous telecommand.

Errors are found at compile time. Types, units, cross-references, confirmations of hazardous telecommands, maximum durations and environment policies are checked in CI and live in the editor, not during a pass.

Written for operators. The procedure language targets non-developers; diagnostics point at the faulty line in plain words; a language server, a web editor and dry runs are part of the product.

Full traceability. Every message carries the hash of the configuration revision that produced it, every run archives the resolved request it executed, and every step records its evidence.

Main parts#

flowchart LR
    subgraph Git["Configuration repository"]
      cat[Catalogues] --- topo[Topology] --- proc[Procedures]
    end
    Git -- "stellar compile --publish" --> NATS[(NATS + JetStream)]
    subgraph Core["Services of the core"]
      api[API] --- rec[Reconciler] --- exe[Executor]
      comp[Compute] --- alarms[Alarms] --- sched[Scheduler] --- xfer[Transfers]
    end
    Core <--> NATS
    subgraph Edge["Components at the edge"]
      drv[Drivers] --- tr[Transports] --- gw[Gateways] --- conn[Output connectors]
    end
    Edge <--> NATS
    cli[stellar CLI] --> api
    web[Web console] --> api
    gw <--> sat((Target))
PartWhat it contains
Services of the coreAPI, reconciler, executor, compute stage and current value table, alarm service, scheduler, transfer manager; one binary each, or all of them in the stellar-mcs binary
ToolsThe stellar CLI, the web console, the web editor (stellar-editor), the language server (stellar-lsp) and its VS Code extension
SDKsA Rust SDK and a Python SDK for drivers, transports, gateways, output connectors and pass feeders
Simulatorstellar-simulator, which plays a simulated target from a YAML description as a driver and a gateway
ExamplesDrivers, transports, gateways and a TimescaleDB connector built on the SDK, and a complete example configuration repository (examples/config)

See Architecture for how the services work together.

Where to start#

  1. Installation: build Stellar Control and start a NATS server, the services and simulated targets.
  2. Your First Procedure: send telecommands, watch values and run a procedure on simulated targets.
  3. Glossary: the vocabulary used throughout this documentation.
  4. Configuration Repository: how to describe your own platforms, targets and procedures.

Stellar Control · v0.1.0

↑↓ to moveEnter to open