Skip to content

Repository files navigation

minscs — minimalist spacecraft simulator

Five spacecraft subsystems — DHS, TTC, ADCS, EPS and PAYLOAD — each built as an independent FreeRTOS binary, talking over a simulated multi-drop CAN bus, plus a ground-segment EGSE you can drive over TCP. Nodes share no memory: the only thing that crosses a subsystem boundary is an 8-byte CAN frame — except bulk science, which crosses a second bus, a point-to-point SpaceWire link carrying RMAP writes from the payload straight into the DHS's mass memory. The spacecraft/ground boundary is a TCP stream of CCSDS Space Packets with ECSS PUS-C headers.

        ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐
        │   DHS   │   │   TTC   │   │  ADCS   │   │   EPS   │   │ PAYLOAD │
        │  0x1    │   │  0x2    │   │  0x3    │   │  0x4    │   │  0x5    │
        └──┬───┬──┘   └──┬──┬───┘   └────┬────┘   └────┬────┘   └──┬───┬──┘
           │   └─────────┴──┼────┬───────┴─────────────┴───────────┘   │
           │                │    │  UDP :20000  (CAN backplane)        │
           │                │  ┌─┴─────────┐                           │
           │                │  │  can_hub  │  routing table, learned   │
           │                │  └───────────┘  at runtime               │
           └────────────────┼──────────────────────────────────────────┘
              UDP :20100    │   SpaceWire: RMAP bulk science, one way
                            │
              TCP :21000    │                      ── spacecraft ──
        ════════════════════╪══════════════════════════════════════
                            │                      ──── ground ────
                      ┌─────┴─────┐  TCP :21001    ┌──────────┐
                      │   egse    │ ──── stream ──▶│ egse_tm  │ decode TM
                      │  (relay)  │ ◀─── TC ───────│ egse_tc  │ build TC
                      └───────────┘                └──────────┘

Quickstart

Build the project using cmake and then run the complete platform using the ./run_sim.sh script:

$ cmake -B build && cmake --build build -j     # fetches FreeRTOS-Kernel V11.3.0
$ ./run_sim.sh                                 # Ctrl+C stops the platform
$ ./build/bin/egse_tm                          # watch decoded telemetry, in another terminal
$ ./build/bin/egse_tc DHS PING                 # send a command, in a third

Or using docker:

$ docker compose up --build

Documentation

The documentation is available from: https://nunorc.github.io/minscs/, the source is available from docs/.

Contributors

Languages