01 · Systèmes / réseau

Station sol de télémétrie spatiale

Une chaîne C++20 complète pour simuler, recevoir, reconstruire, valider, rejouer et exporter des trames satellites sans masquer les cas difficiles : fragmentation TCP, corruption, perte et état opérationnel dégradé.

C++20Linux/POSIXUDP & TCPCRC-32MultithreadingCTest
STGS / LIVE PIPELINE
$ stgs_ground_station --replay frames.stgf

replay started       24 frames
decoded              24
rejected             0
written              24
station_state        NOMINAL
rejection_rate       0.00

output: telemetry.json

Le problème

Traiter une télémétrie comme un flux non fiable

Une trame reçue ne peut pas être considérée comme correcte simplement parce qu’elle est arrivée. Le logiciel doit retrouver ses limites dans un flux TCP, contrôler sa taille avant allocation, valider son intégrité, isoler les erreurs et continuer à traiter les trames suivantes.

Le même chemin de décodage est utilisé pour le réseau live et le replay. Cela évite deux implémentations qui pourraient diverger et rend un incident reproductible hors connexion.

Architecture

Un pipeline découplé par des queues fermables

UDP / TCP
ou replay STGF
Queue de
trames brutes
Workers
CRC + parsing
Santé station
+ CSV / JSON

Le récepteur reste disponible pendant que plusieurs workers effectuent le travail CPU de validation. Le writer ne reçoit que des objets `TelemetryFrame` valides. La fermeture explicite des queues assure l’arrêt propre du pipeline sans sentinelle ambiguë.

Décisions d’ingénierie

Les points qui rendent le système robuste

01 / PROTOCOL

Bornes vérifiées avant confiance

Magic word, révision, longueur maximale, taille réelle et CRC sont contrôlés avant d’exposer les valeurs métier.

02 / TCP

Réassemblage avec resynchronisation

L’extracteur conserve les fragments, retrouve `STGS` après du bruit et attend une trame complète avant émission.

03 / OPERATIONS

Mode dégradé observable

Une fenêtre glissante combine taux de rejet et télémétrie critique pour passer de `NOMINAL` à `DEGRADED`.

04 / REPLAY

Déterminisme de diagnostic

Le format STGF conserve les octets originaux afin de rejouer exactement la même validation que sur le réseau.

Démonstration réelle

24 trames générées puis rejouées

Cette courte capture a été produite à partir des exécutables compilés : le simulateur écrit un fichier STGF, la station le rejoue, valide chaque trame et produit un export JSON.

Replay STGF → JSONExécution C++ réelle · 24/24 trames validées
./stgs_satellite_simulator --output-file frames.stgf --count 24 --rate 0
./stgs_ground_station --replay frames.stgf --output telemetry.json

Preuves techniques

Ce que le dépôt permet de vérifier

  • Tests du CRC connu, du round-trip, des erreurs de magic/CRC/longueur et de l’extracteur TCP fragmenté.
  • Transition et récupération du mode dégradé testées avec une fenêtre contrôlée.
  • Benchmark reproductible du pipeline de décodage, séparé des coûts réseau et disque.
  • CI GitHub Actions : build Release, CTest, smoke replay CSV/JSON et benchmark court.
Projet suivantMission Control Protocol Server