Maschinelle Übersetzung, nicht von einem Muttersprachler geprüft. Englisch ist die maßgebliche Fassung.

Erste SchritteAuf GitHub bearbeitenQuelle: docs/tutorials/README.md

Tutorials

Praxisnahe, durchgespielte Beispiele, die Sie von „ein mitgeliefertes Szenario ausführen“ zu „ein Ergebnis quantifizieren und verteidigen“ führen. Jede in den drei Tutorials genannte Zahl ist eine reale Ausgabe der Engine, verankert an einer externen (nicht zirkulären) maßgeblichen unabhängigen Referenz und durch einen Integrationstest festgeschrieben (tests/tutorials.rs), sodass ein Tutorial nie unbemerkt von dem abweichen kann, was die Engine tatsächlich tut. Sagt ein Tutorial, dass die optische Uhr 6600 s hält, lässt der Test den Build an dem Tag scheitern, an dem das nicht mehr stimmt.

Kshana ist ein Simulator für Positionierung, Navigation und Zeitgebung (PNT). Die Tutorials verwenden einige weitere Abkürzungen, die jeweils an der ersten Stelle ausgeschrieben sind: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (Befehlszeilenschnittstelle) und TOML (Tom's Obvious Minimal Language, das Format der Szenariodatei).

Neu im Projekt? Lesen Sie zuerst die Einführung in die Konzepte und das Glossar und kehren Sie dann hierher zurück.

Die drei durchgespielten Beispiele#

# Tutorial Was Sie lernen Szenarioart Schwierigkeit ~Zeit
1 Meine erste Umlaufbahn: wo die GPS-Satelliten sind eine reale GPS-Konstellation propagieren, Verfügbarkeit, Positions-DOP (PDOP) und Positionsgenauigkeit lesen und exportieren, wo die Satelliten tatsächlich sind (SP3-Präzisionsbahnformat) orbit Einsteiger 15 min
2 Uhren-Holdover: wie lange können Sie durchhalten einen Uhren-Holdover bei verweigertem GNSS ausführen, die Zeitgebungs-Kennzahl lesen und das dahinterstehende Wachstumsgesetz √(q_wf·T) verstehen clock Einsteiger 20 min
3 Quantum gegen Classical bei der GNSS-Resilienz der Abschluss: ein Spoofing-Detektor (spoof) und eine vollständige fusionierte PNT-Suite (hybrid), und wie Sicherheit / Integrität / Koppelnavigation gemeinsam zu lesen sind spoof + hybrid fortgeschritten 35 min

Notebooks#

Ausführbare Jupyter-Notebooks, nur mit synthetischen Daten und öffentlichen Elementsätzen im Repository, liegen in notebooks/:

Notebook Was Sie lernen
Schiffsvertrauen und Training einen synthetischen NMEA-Brückenstrom mit einem skriptgesteuerten Ereignis erzeugen und ihn dann mit den Schiffsvertrauens-Monitoren bewerten (beratend, keine typzugelassene Navigationsausrüstung)
Störungskarte und Streckenbelastung wo Navigationsdaten degradiert aussahen und wie viel einer Route sie betreffen
Compliance-Zuordnung und Test-Bench-Export wofür eine Reihe von Läufen Belege für öffentliche Framework-Zeilen liefert (nie, dass ein Framework erfüllt ist), und Bewegung und Ereignisse eines Szenarios als Text für einen GNSS-Simulator im Labor exportiert (es wird kein Signal geschrieben)
Quantum gegen Classical bei GDOP dieselbe Konstellationsgeometrie mit einem Quantum- und einem Classical-Sensor, verglichen nach Verdünnung der Genauigkeit
Himmelsgeometrie unter einer Horizontlinie die Satelliten, die ein Standort unter der Horizontlinie einer Straße oder eines Kais sieht, ihr DOP und ihre Fehlerellipse, ein datierter Himmel aus Elementsätzen und eine Monte-Carlo-Simulation mit Seed gegen die Kovarianz (MODELLED)

So führen Sie ein Tutorial aus#

Jedes Tutorial führt dasselbe Szenario auf drei Arten aus; wählen Sie, was zu Ihnen passt. Alle rufen die eine Engine auf, daher sind die Zahlen identisch (entspricht dem Abschnitt Verwendung der README).

Befehlszeile. Die CLI verzweigt nach dem Feld kind des Szenarios und schreibt <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html und <scenario>.report.json neben die Eingabe (JSON ist JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Einige Arten veröffentlichen außerdem eine Reproduzierbarkeitstabelle als <scenario>.table.csv (durch Komma getrennte Werte): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing und moonlight-service-volume, wenn ein Exportstandort gesetzt ist. Keines der drei Tutorials gehört dazu, daher sehen Sie diese Datei hier nicht.

cargo run -- scenarios/orbit-sgp4-gps.toml

cargo run -- baut die CLI aus diesem Checkout. Mit einer installierten Binärdatei (cargo install kshana) lautet derselbe Befehl kshana scenarios/orbit-sgp4-gps.toml. Ohne Checkout sind die meisten mitgelieferten Szenarien in der Binärdatei enthalten: kshana example listet sie auf (und nennt die wenigen, die nicht enthalten sind, mit Begründung), und kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml schreibt eines aus: die Kopie von scenarios/orbit-sgp4-gps.toml, mit der die Binärdatei gebaut wurde.

Python. Bauen Sie die Erweiterung einmal aus diesem Checkout mit maturin in einer aktiven virtuellen Umgebung und rufen Sie dann kshana.run auf:

pip install maturin
maturin develop --features python
import json, kshana
result = json.loads(kshana.run(open("scenarios/orbit-sgp4-gps.toml").read()))
print(result["geometry"]["best_pdop"])

pip install kshana installiert stattdessen das veröffentlichte Wheel. Es kann hinter diesem Checkout zurückliegen: json.loads(kshana.list_kinds()) zeigt Ihnen, welche Szenarioarten Ihr Build hat.

Playground im Browser. Ohne Installation: Öffnen Sie das Studio, wählen Sie ein Szenario, bearbeiten Sie die Parameter und lesen Sie das Ergebnis. Nichts wird hochgeladen; die Engine läuft clientseitig als WebAssembly.

Die Tutorials zitieren die CLI, aber jeder Befehl hat oben das Äquivalent in Python und im Playground. Jedes Ergebnis ist aus scenario + seed + engine version reproduzierbar: Führen Sie es zweimal aus, und Sie erhalten bitidentische Ausgaben.

Kommentierte Lehrszenarien#

Für jeden Fähigkeitsbereich gibt es eine stark kommentierte Datei .toml unter scenarios/: eine Lehrkopie eines kanonischen Szenarios, in der jedes Feld inline erklärt ist, die zitierte unabhängige Referenz genannt wird und die erwartete einzeilige Zusammenfassung als Kommentar # expected: festgehalten ist. Die Feldwerte sind identisch mit denen des Ursprungs im obersten Verzeichnis scenarios/ des Repositorys (tests/tutorials.rs vergleicht das geparste TOML), sodass die dokumentierte Ausgabe stimmt. Auch die Golden-Hashes bleiben unberührt: Ein Kommentar ändert nie einen Szenario-Hash.

Bereich Lehrdatei Typ Abgeleitet von
Uhren-Holdover scenarios/clock.toml clock scenarios/clock-holdover.toml
Bahn & Geometrie scenarios/orbit.toml orbit scenarios/orbit-sgp4-gps.toml
Integrität (RAIM, receiver autonomous integrity monitoring) scenarios/integrity.toml integrity scenarios/integrity-raim.toml
Sicherheit (Spoofing) scenarios/security.toml spoof scenarios/spoof-attack.toml
Hybrid-PNT scenarios/hybrid.toml hybrid scenarios/hybrid-pnt.toml
Inertiale Koppelnavigation scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
Zeitübertragung scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
GNSS-Messungsbereich scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

Die Lehrdatei für Sicherheit verwendet innen kind = "spoof": Die Sicherheitskennzahl (1 − P_md, eins minus der Wahrscheinlichkeit einer verpassten Erkennung) wird vom Spoof-Paket erzeugt. Der Dateiname folgt der Fähigkeit (Sicherheit), die kind folgt dem Paket (Spoof). Der Kopf dieser Datei weist darauf hin.

Der vollständige Katalog der Szenarioarten#

Die Engine verzweigt nach dem Feld kind des Szenarios. Die Tabelle unten listet die am häufigsten verwendeten Arten (die acht Tutorial-Bereiche oben plus ihre nächsten Nachbarn). Sie ist nicht die vollständige Menge: src/api.rs::list_scenario_kinds() gibt alle 92 eingebauten Arten zurück. Diese Funktion (als list_kinds() in den Bindungen für Python und WebAssembly (WASM) und als kshana kinds --json in der Befehlszeile verfügbar) ist der maßgebliche, stets aktuelle Katalog, und SCENARIOS.md ist ihre erzeugte Aufzählung, ein Abschnitt je Art mit den erforderlichen und optionalen TOML-Feldern. tests/tutorials.rs::tutorial_scenarios_use_real_kinds stellt sicher, dass jede in einem Tutorial dokumentierte Art eine reale Dispatch-Art ist, sodass nichts in dieser Tabelle eine nicht existierende Art nennen kann.

Typ Was es tut
clock Uhren-Holdover gegen Vorgabe; optionales Monte-Carlo-Ensemble (runs > 1).
inertial 1-DOF-Koppelnavigation (ein Freiheitsgrad) während eines GNSS-Ausfalls.
orbit GNSS-Verfügbarkeit + Verdünnung der Genauigkeit (DOP) aus einer Konstellation (Walker / Zweizeilen-Bahnelemente / RINEX, das Receiver Independent Exchange Format).
integrity Snapshot / Solution-Separation / ARAIM (advanced RAIM) mit horizontalen und vertikalen Schutzniveaus (HPL/VPL) + Stanford-Diagramm.
lunar-integrity Durchgang mit ARAIM-Schutzniveaus am Mond-Südpol gegen eine LunaNet-Relaismenge.
timetransfer Optische gegen Hochfrequenz-(HF-)Zweiwege-Zeit-/Frequenzübertragung.
hybrid Hybrid-PNT-Abschluss: Uhr + Inertialmesseinheit (IMU) + Stützung durch Zeitübertragung.
fusion Gemeinsame Kalman-Sensorfusion für PNT über dieselben Hybrid-Eingaben.
gnss-ins Lose und eng gekoppeltes GNSS/INS (Inertialnavigationssystem), erweiterter Kalman-Filter im Fehlerzustand.
gnss-sim Simulation von Pseudoentfernungen im Messbereich (Klobuchar-Ionosphäre, Saastamoinen-/Niell-Troposphäre) + RAIM.
jamming Jamming nach Link-Budget: Störer-zu-Signal-Verhältnis (J/S) → effektive Träger-Rausch-Dichte (C/N₀) → Verlust der Verriegelung.
spoof Stochastischer Zeit-Spoof-Detektor (Neyman–Pearson / χ²₁) mit Monte-Carlo-Wahrscheinlichkeiten für Fehlalarm und verpasste Erkennung (P_fa/P_md).
sweep 1-D-Trade-Study-Sweep über einen Uhrenpaket-Parameter.
sweep-nd Generischer N-D-Sweep über ein beliebiges Paket über gepunktete TOML-Schlüssel / JSON-Metrikpfade.

Über die Tutorials hinaus: neuere Fähigkeiten#

Die drei Tutorials bleiben bei den klassischen Paketen für Uhr, Orbit und Sicherheit. Die Engine ist weit darüber hinausgewachsen. Jede Zeile unten ist ein mitgeliefertes Szenario, das Sie unverändert ausführen können (cargo run -- <file> oder kshana <file>); die Zusammenfassung ist die erste Zeile, die kshana 0.35.0 dafür am 2026-10-10 ausgegeben hat. Anders als die Zahlen der Tutorials sind diese Zeilen die Aufzeichnung eines einzelnen Laufs und nicht durch tests/tutorials.rs festgeschrieben: Führen Sie das Szenario erneut aus, um den aktuellen Wert zu erhalten. Die Ergebnisse geben ihren eigenen Geltungsbereich an (die meisten tragen ein label), und die Verifikationsmatrix gibt an, welche Fähigkeiten gegen eine externe unabhängige Referenz VALIDATED und welche MODELLED sind.

Fähigkeit Szenario Typ Erste Zeile der Zusammenfassung Mehr lesen
L-Band-Spektrum und Jamming-Wasserfall scenarios/l-band-waterfall-jamming.toml spectrum scenario spectrum | 5 bands | 3 jammers | noise floor -202.0 dBW/Hz | worst band gps-l1ca min C/N0 3.2 dB-Hz (J/S 60.2 dB) SPECTRUM.md
Das Sonnensystem zu einer Epoche scenarios/solar-system-tour.toml solar-system Solar system at 2026-09-28T00:00:00 (JD 2461311.50080 TDB), 18 bodies, observer Earth SCENARIOS.md
Positionierung um einen anderen Körper scenarios/europa-surface-pnt.toml body-pnt Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs SCENARIOS.md
Konstellationsdesign im großen Maßstab scenarios/constellation-multi-gnss-coverage.toml constellation-design constellation-design: 102 satellites (GPS, Galileo, BeiDou, GLONASS) around the Earth; availability 100.00% (PDOP <= 6 at 10 deg mask), … CONSTELLATION-DESIGN.md
Kampagnen: Arten, verkettet auf einer Zeitleiste scenarios/campaign-jam-spoof-holdover-integrity.toml campaign campaign f87a4a0e0bab | Jamming, spoofing, holdover and integrity: a chained mission | chain: 6 phases over 4570 s, … CAMPAIGNS.md
Ein LEO-PNT-System von Ende zu Ende scenarios/leo-pnt-end-to-end.toml leo-pnt-chain LEO-PNT end to end, generic 1080 km constellation LEO-PNT.md
Fusionierte MEO- und LEO-Positionierung scenarios/meo-leo-fused-pvt.toml leo-pvt LEO PVT (joint) at 40.42, -3.70 over 1800 s LEO-PNT-FUSION.md
LEO-Signale, Durchgänge und Navigationsnachrichten scenarios/leo-band-trade.toml, scenarios/leo-pass-iridium.toml, scenarios/leo-navmsg-encode-decode.toml leo-signal, leo-pass, leo-navmsg LEO pass link budget, air user at 50.00, -30.00; 1 LEO satellite(s), 900 s window (der Durchgang) LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md
PPP-Konvergenz mit einer LEO-Schicht; 5G-Positionierung scenarios/leo-ppp-convergence.toml, scenarios/ntn-5g-positioning.toml leo-ppp, ntn-positioning PPP convergence to 0.10 m horizontal / 0.10 m vertical, 12 runs per case, 96 GNSS satellites SCENARIOS.md
Resilienz: GNSS gestört, LEO trägt den Nutzer scenarios/leo-resilience-gnss-jammed-leo-carries.toml campaign campaign 248395b851cc | GNSS jammed, LEO-PNT carries the user, integrity maintained | chain: 3 phases over 2100 s, … RESILIENCE-CROSSWALK.md
Vertikale Märkte: Schiene, See, Telekommunikation, Fahrzeuge, Arktis scenarios/leo-vertical-rail-maritime.toml (und die anderen Dateien leo-vertical-*) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
Telecom-Holdover gegen die Uhrengrenzwerte nach ITU-T (International Telecommunication Union, Telecommunication Standardization Sector) G.8272 scenarios/telecom-prtc-holdover-24h.toml telecom-timing telecom-timing: max|TE| 603.2 ns over 90000 s; eprtc-a-holdover FAIL, prtc-a FAIL; 100 ns budget exceeded after 8206 s (MODELLED) TELECOM-TIMING.md

LEO ist die niedrige Erdumlaufbahn und MEO die mittlere Erdumlaufbahn; PVT ist Position, Geschwindigkeit und Zeit; PPP ist die präzise Punktpositionierung; 5G ist der Mobilfunkstandard der fünften Generation; TDB ist die baryzentrische dynamische Zeit; JD ist das Julianische Datum; TE ist der Zeitfehler.

Die CLI fügt zu jedem Lauf drei Ausgaben hinzu:

  • Berichte. Jeder Lauf schreibt <scenario>.report.html und <scenario>.report.json (siehe REPORTS.md). kshana --study <suite.toml> führt eine Suite von Szenarien in ein .study.json und ein .study.html zusammen, zum Beispiel kshana --study scenarios/quantum-pnt-demonstrator.suite.toml.
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all> stellt die Zeitreihen des Laufs dar, zum Beispiel schreibt --animate html auf scenarios/orbit-sgp4-gps.toml die Datei orbit-sgp4-gps.animation.html. Eine Art ohne abgetastete Zeitachse (wie solar-system) wird mit einem Fehler abgelehnt; siehe ANIMATION.md.
  • Interop-Exporte. --export <czml|kml|geojson|stk|sigmf|all|list> schreibt das Ergebnis für andere Werkzeuge: CZML (Cesium Language), KML (Keyhole Markup Language, für Google Earth), GeoJSON (geografisches JSON), eine STK-Ephemeride (Systems Tool Kit) oder eine SigMF-Aufzeichnung (Signal Metadata Format). --export list nennt, welche Formate für ein Szenario gelten; SigMF gilt nur für spectrum. Das Orbit-Paket exportiert außerdem --export-sp3, --export-omm und --export-oem (CCSDS, das Consultative Committee for Space Data Systems, Bahnnachrichten). Siehe INTEROP.md.

Abgestufte Übungen#

Arbeiten Sie die Leiter durch. Jede Stufe ist schwerer und belastbarer als die vorige; Referenzlösungen liegen in exercises/.

Stufe Ziel Was Sie tun Referenzlösung
Stufe 1 — ausführen und lesen ein mitgeliefertes Szenario unverändert ausführen und eine Kennzahl lesen Führen Sie scenarios/clock-holdover.toml aus; geben Sie das holdover_s von Quantum gegen Classical aus. CLI, Playground oder ein einzeiliger Python-Aufruf. exercises/tier1_run.py
Stufe 2 — bearbeiten und durchlaufen einen Parameter ändern und eine monotone Wirkung beobachten Verschärfen Sie die Uhrenvorgabe (threshold_ns) oder verlängern Sie den Ausfall und beobachten Sie, wie der Holdover sinkt; oder verwenden Sie kind = "sweep"/"sweep-nd", um ihn zu tabellieren. exercises/tier2_sweep.py
Stufe 3 — quantifizieren und verteidigen Monte-Carlo, Konfidenzbänder, Reproduzierbarkeit und ein Schutzniveau Führen Sie ein Uhren-Ensemble aus (runs = N), lesen Sie das Band [p05–p95], bestätigen Sie, dass zwei Läufe ein identisches scenario_hash ergeben, und lesen Sie ein Integritäts-/Stanford-Ergebnis. exercises/tier3_montecarlo.py

Die Referenzlösungen verwenden die Python-Erweiterung (zuerst maturin develop --features python). Aus dem Wurzelverzeichnis des Repositorys ausgeführt, gibt tier2_sweep.py aus, wie der Holdover der Chip-Scale-Atomuhr von 2610 s bei einer Vorgabe von 20 ns auf 1140 s bei 5 ns fällt.

Frische Daten gewünscht?#

Die Titelzahlen dieser Tutorials laufen vollständig aus Szenarien, die bereits im Repository liegen. Nichts wird abgerufen, wodurch sie reproduzierbar bleiben und sich gefahrlos in der kontinuierlichen Integration (CI) ausführen lassen. Für die „Erweitern Sie es“-Übungen können Sie Live-Daten ziehen:

  • GPS-Zweizeilen-Bahnelemente (TLEs) (die Orbit-Konstellation auffrischen): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, Klartext-Elementsätze mit 3 Zeilen (Name + Zeile 1 + Zeile 2). Hilfsskript: scripts/fetch_tles.sh. Offene Daten (Katalog der 18th Space Defense Squadron der US Space Force, weiterverbreitet von Celestrak, Dr. T. S. Kelso).
  • Verifikationsreferenz für SGP4 (Simplified General Perturbations 4) (bereits eingebunden, nicht erneut abrufen): die Testvektoren „Revisiting Spacetrack Report #3“ von AIAA (American Institute of Aeronautics and Astronautics) 2006-6753, https://celestrak.org/publications/AIAA/2006-6753/, verwendet von tests/sgp4_verification.rs; siehe docs/SGP4-VALIDATION.md.
  • Referenz für Uhrenstabilitätsbeziehungen: NIST (National Institute of Standards and Technology) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, die Beziehungen σ_y(τ)↔Phase hinter Tutorial 2.