Vejledninger
Praktiske, gennemarbejdede eksempler, der fører dig fra “kør et medfølgende scenarie” til “kvantificér og forsvar et resultat.” Hvert tal i de tre tutorials er et rigtigt motoroutput, forankret i en ekstern (ikke-cirkulær) autoritativ uafhængig reference og fastlåst af en integrationstest (tests/tutorials.rs), så en tutorial aldrig i det skjulte kan glide væk fra det, motoren faktisk gør. Hvis en tutorial siger, at det optiske ur holder 6600 s, får testen buildet til at fejle den dag, det holder op med at være sandt.
Kshana er en simulator til positionering, navigation og tidssynkronisering (PNT). Tutorials bruger nogle få flere forkortelser, hver især skrevet ud, hvor den først optræder: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (kommandolinjegrænseflade) og TOML (Tom's Obvious Minimal Language, scenariernes filformat).
Ny i projektet? Læs først begrebsintroduktionen og ordlisten, og vend så tilbage hertil.
De tre gennemarbejdede eksempler#
| # | Tutorial | Hvad du lærer | Scenarietype | Sværhedsgrad | ~Tid |
|---|---|---|---|---|---|
| 1 | Min første bane: hvor er GPS-satellitterne | propagér en rigtig GPS-konstellation, aflæs tilgængelighed, præcisionsfortynding for position (PDOP) og positionsnøjagtighed, og eksportér, hvor satellitterne faktisk er (SP3, det præcise baneformat) | orbit |
begynder | 15 min |
| 2 | Ur-holdover: hvor længe kan du holde dig i gang | kør en GNSS-nægtet ur-holdover, aflæs kvalitetsmålet for tid og forstå vækstloven √(q_wf·T) bag det | clock |
begynder | 20 min |
| 3 | Kvante mod klassisk GNSS-modstandsdygtighed | slutstenen: en spoofing-detektor (spoof) og en komplet fusioneret PNT-suite (hybrid), og hvordan du aflæser sikkerhed / integritet / dødregning sammen |
spoof + hybrid |
mellem | 35 min |
Notebooks#
Kørbare Jupyter-notebooks på syntetiske data og offentlige elementsæt, som kun ligger i repositoriet, findes i notebooks/:
| Notebook | Hvad du lærer |
|---|---|
| Fartøjstillid og træning | frembring en syntetisk NMEA-strøm fra en bro med en scriptet hændelse, og vurdér den derefter med fartøjets tillidsmonitorer (vejledende, ikke typegodkendt navigationsudstyr) |
| Interferenskort og eksponering på ruten | hvor navigationsdata har set forringede ud, og hvor meget af en rute det berører |
| Compliance-kortlægning og eksport til testbænk | hvilke rækker i offentlige rammeværker et sæt kørsler leverer belæg for (aldrig at et rammeværk er opfyldt), og et scenaries bevægelse og hændelser eksporteret som tekst til en GNSS-simulator i laboratoriet (der skrives intet signal) |
| Kvante mod klassisk GDOP | den samme konstellationsgeometri med en kvante- og en klassisk sensor, sammenlignet ved præcisionsfortynding |
| Himmelgeometri under en skyline | de satellitter, et sted ser under en gade- eller kajskyline, deres DOP og fejlellipse, en dateret himmel ud fra elementsæt og en Monte Carlo med seed mod kovariansen (MODELLED) |
Sådan kører du en tutorial#
Hver tutorial kører det samme scenarie på tre måder; vælg den, der passer dig. De kalder alle den ene motor, så tallene er identiske (spejler afsnittet Brug i README).
Kommandolinje. CLI'en vælger efter scenariets felt kind og skriver <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html og <scenario>.report.json ved siden af inputtet (JSON er JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Nogle få kinds udgiver også en reproducerbarhedstabel som <scenario>.table.csv (kommaseparerede værdier): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing og moonlight-service-volume, når der er angivet et eksportsted. Ingen af de tre tutorials hører til dem, så du ser ikke den fil her.
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- bygger CLI'en fra dette checkout. Med en installeret binær (cargo install kshana) er den samme kommando kshana scenarios/orbit-sgp4-gps.toml. Uden et checkout er de fleste medfølgende scenarier indbygget i den binære: kshana example viser dem (og nævner de få, der ikke er indbygget, med begrundelsen), og kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml skriver ét ud: den kopi af scenarios/orbit-sgp4-gps.toml, som den binære blev bygget med.
Python. Byg udvidelsen fra dette checkout én gang med maturin i et aktivt virtuelt miljø, og kald derefter kshana.run:
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 installerer i stedet det udgivne wheel. Det kan hænge bagud i forhold til dette checkout: json.loads(kshana.list_kinds()) fortæller dig, hvilke scenarietyper dit build har.
Legeplads i browseren. Ingen installation: åbn Studio, vælg et scenarie, redigér parametrene og aflæs resultatet. Intet uploades; motoren kører hos klienten som WebAssembly.
Tutorials citerer CLI'en, men hver kommando har en tilsvarende Python- og legepladsvariant ovenfor. Hvert resultat kan gengives ud fra scenario + seed + engine version: kør det to gange, og du får bit-identisk output.
Kommenterede undervisningsscenarier#
For hvert funktionsområde er der én kraftigt kommenteret .toml under scenarios/: en undervisningskopi af et kanonisk scenarie, hvor hvert felt er forklaret i linjen, den anførte uafhængige reference er nævnt, og den forventede opsummering på én linje er optaget som en kommentar # expected:. Feltværdierne er identiske med forældrenes i repoets mappe scenarios/ på øverste niveau (tests/tutorials.rs sammenligner den parsede TOML), så det dokumenterede output forbliver sandt. De gyldne hashes er heller ikke rørt: en kommentar ændrer aldrig et scenaries hash.
| Domæne | Undervisningsfil | Type | Afledt af |
|---|---|---|---|
| Urets holdover | scenarios/clock.toml | clock |
scenarios/clock-holdover.toml |
| Bane og geometri | scenarios/orbit.toml | orbit |
scenarios/orbit-sgp4-gps.toml |
| Integritet (RAIM, receiver autonomous integrity monitoring) | scenarios/integrity.toml | integrity |
scenarios/integrity-raim.toml |
| Sikkerhed (spoofing) | scenarios/security.toml | spoof |
scenarios/spoof-attack.toml |
| Hybrid PNT | scenarios/hybrid.toml | hybrid |
scenarios/hybrid-pnt.toml |
| Inertial dødregning | scenarios/inertial.toml | inertial |
scenarios/imu-deadreckoning.toml |
| Tidsoverførsel | scenarios/timetransfer.toml | timetransfer |
scenarios/timetransfer.toml |
| GNSS-måledomæne | scenarios/gnss-sim.toml | gnss-sim |
scenarios/gnss-sim-raim.toml |
Undervisningsfilen for sikkerhed bruger
kind = "spoof"indeni: kvalitetsmålet for sikkerhed (1 − P_md, én minus sandsynligheden for en overset detektion) frembringes af spoof-pakken. Filnavnet følger funktionen (sikkerhed), menskindfølger pakken (spoof). Filens header gør opmærksom på det.
Det fulde katalog over scenarietyper#
Motoren vælger efter scenariets kind. Tabellen nedenfor viser de mest brugte kinds (de otte tutorial-områder ovenfor og deres nærmeste naboer). Den er ikke den komplette mængde: src/api.rs::list_scenario_kinds() returnerer alle 92 indbyggede kinds. Den funktion (tilgængelig som list_kinds() i bindingerne til Python og WebAssembly (WASM) og som kshana kinds --json på kommandolinjen) er det autoritative, altid opdaterede katalog, og SCENARIOS.md er dens genererede oversigt, ét afsnit pr. kind med de påkrævede og valgfrie TOML-felter. tests/tutorials.rs::tutorial_scenarios_use_real_kinds sikrer, at hver kind, en tutorial dokumenterer, er en rigtig dispatch-kind, så intet i denne tabel kan nævne en kind, der ikke findes.
| Type | Hvad det gør |
|---|---|
clock |
Ur-holdover mod specifikation; valgfrit Monte Carlo-ensemble (runs > 1). |
inertial |
1-DOF (én frihedsgrad) inertial dødregning under et GNSS-udfald. |
orbit |
GNSS-tilgængelighed + præcisionsfortynding (DOP) ud fra en konstellation (Walker / two-line elements / RINEX, Receiver Independent Exchange-formatet). |
integrity |
Snapshot / solution-separation / ARAIM (advanced RAIM) med horisontale og vertikale beskyttelsesniveauer (HPL/VPL) + Stanford-diagram. |
lunar-integrity |
ARAIM-gennemløb for beskyttelsesniveau ved månens sydpol mod et LunaNet-relæsæt. |
timetransfer |
Optisk mod radiofrekvent (RF) tovejs overførsel af tid/frekvens. |
hybrid |
Slutsten for hybrid PNT: ur + inertimåleenhed (IMU) + støtte fra tidsoverførsel. |
fusion |
Fælles Kalman-sensorfusion til PNT over de samme hybride input. |
gnss-ins |
Løst og tæt koblet GNSS/INS (inertialt navigationssystem) fejltilstands-extended Kalman-filter. |
gnss-sim |
Pseudoafstandssimulering i måledomænet (Klobuchar-ionosfære, Saastamoinen/Niell-troposfære) + RAIM. |
jamming |
Jamming med link-budget: forhold mellem jammer og signal (J/S) → effektiv bærebølge-til-støj-tæthed (C/N₀) → tab af lås. |
spoof |
Stokastisk detektor for tids-spoofing (Neyman–Pearson / χ²₁) med Monte Carlo-sandsynligheder for falsk alarm og oversete detektioner (P_fa/P_md). |
sweep |
1-D-sweep til afvejningsstudie over en parameter for en urpakke. |
sweep-nd |
Generisk N-D-sweep over en vilkårlig pakke via punkterede TOML-nøgler / JSON-metrikstier. |
Ud over tutorials: nyere funktioner#
De tre tutorials holder sig til de klassiske pakker for ur, bane og sikkerhed. Motoren er vokset langt ud over dem. Hver række nedenfor er et medfølgende scenarie, du kan køre, som det er (cargo run -- <file> eller kshana <file>); opsummeringen er den første linje, kshana 0.35.0 udskrev for det den 2026-10-10. I modsætning til tutorial-tallene er disse linjer en optegnelse af én kørsel og ikke fastlåst af tests/tutorials.rs: kør scenariet igen for at få den aktuelle værdi. Resultater angiver selv deres omfang (de fleste har en label), og verifikationsmatrixen angiver, hvilke funktioner der er VALIDATED mod en ekstern uafhængig reference, og hvilke der er MODELLED.
| Funktion | Scenarie | Type | Første linje af opsummeringen | Læs mere |
|---|---|---|---|---|
| L-bånd-spektrum og jamming-vandfald | 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 |
| Solsystemet ved én epoke | 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 |
| Positionering omkring et andet legeme | scenarios/europa-surface-pnt.toml |
body-pnt |
Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs |
SCENARIOS.md |
| Konstellationsudformning i stor skala | 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 |
| Kampagner: kinds kædet på én tidslinje | 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 |
| Ét LEO-PNT-system fra ende til anden | scenarios/leo-pnt-end-to-end.toml |
leo-pnt-chain |
LEO-PNT end to end, generic 1080 km constellation |
LEO-PNT.md |
| Fusioneret MEO- + LEO-positionering | scenarios/meo-leo-fused-pvt.toml |
leo-pvt |
LEO PVT (joint) at 40.42, -3.70 over 1800 s |
LEO-PNT-FUSION.md |
| LEO-signaler, gennemløb og navigationsmeddelelser | 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 (gennemløbet) |
LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md |
| PPP-konvergens med et LEO-lag; 5G-positionering | 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 |
| Modstandsdygtighed: GNSS jammet, LEO bærer brugeren | 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 |
| Vertikaler: bane, søfart, telekommunikation, køretøjer, Arktis | scenarios/leo-vertical-rail-maritime.toml (og de andre leo-vertical-*-filer) |
campaign |
campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … |
CAMPAIGNS.md |
| Holdover i telekommunikation mod urgrænserne i 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 er lav jordbane og MEO mellemhøj jordbane; PVT er position, hastighed og tid; PPP er præcis punktpositionering; 5G er femte generation af mobilstandarden; TDB er barycentrisk dynamisk tid; JD er juliansk dato; TE er tidsfejl.
CLI'en tilføjer tre outputs oven på enhver kørsel:
- Rapporter. Hver kørsel skriver
<scenario>.report.htmlog<scenario>.report.json(se REPORTS.md).kshana --study <suite.toml>kører en suite af scenarier ind i én.study.jsonog.study.html, for eksempelkshana --study scenarios/quantum-pnt-demonstrator.suite.toml. - Animation.
kshana <scenario.toml> --animate <svg|html|frames|all>gengiver kørslens tidsserie, for eksempel skriver--animate htmlpåscenarios/orbit-sgp4-gps.tomlfilenorbit-sgp4-gps.animation.html. En kind uden en samplet tidsakse (såsomsolar-system) afvises med en fejl; se ANIMATION.md. - Interop-eksporter.
--export <czml|kml|geojson|stk|sigmf|all|list>skriver resultatet til andre værktøjer: CZML (Cesium Language), KML (Keyhole Markup Language, til Google Earth), GeoJSON (geographic JSON), en STK-efemeride (Systems Tool Kit) eller en SigMF-optagelse (Signal Metadata Format).--export listfortæller, hvilke formater der gælder for et scenarie; SigMF gælder kun forspectrum. Bane-pakken eksporterer også--export-sp3,--export-ommog--export-oem(CCSDS, Consultative Committee for Space Data Systems, banemeddelelser). Se INTEROP.md.
Graderede øvelser#
Arbejd dig igennem stigen. Hvert niveau er sværere og mere forsvarligt end det forrige; referenceløsninger findes i exercises/.
| Niveau | Mål | Hvad du gør | Referenceløsning |
|---|---|---|---|
| Niveau 1 — kør og aflæs | kør et medfølgende scenarie uændret og aflæs ét kvalitetsmål | Kør scenarios/clock-holdover.toml; udskriv holdover_s for kvante mod klassisk. CLI, legeplads eller et Python-kald på én linje. |
exercises/tier1_run.py |
| Niveau 2 — redigér og sweep | ændr én parameter og iagttag en monoton virkning | Skærp urets specifikation (threshold_ns) eller forlæng udfaldet og se holdover falde; eller brug kind = "sweep"/"sweep-nd" til at stille det op i en tabel. |
exercises/tier2_sweep.py |
| Niveau 3 — kvantificér og forsvar | Monte Carlo, konfidensbånd, reproducerbarhed og et beskyttelsesniveau | Kør et urensemble (runs = N), aflæs [p05–p95]-båndet, bekræft, at to kørsler giver en identisk scenario_hash, og aflæs et integritets-/Stanford-resultat. |
exercises/tier3_montecarlo.py |
Referenceløsningerne bruger Python-udvidelsen (først maturin develop --features python). Kørt fra repositoriets rod udskriver tier2_sweep.py chipskala-atomurets holdover faldende fra 2610 s ved en specifikation på 20 ns til 1140 s ved 5 ns.
Vil du have friske data?#
Hovedtallene i disse tutorials kører helt og holdent fra scenarier, der allerede ligger i repoet. Intet hentes, og det er det, der gør dem reproducerbare og sikre at køre i continuous integration (CI). Til øvelserne “udvid det” kan du hente levende data:
- GPS two-line elements (TLE'er) (opdatér bane-konstellationen): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, elementsæt i ren tekst med 3 linjer (navn + linje 1 + linje 2). Hjælper:
scripts/fetch_tles.sh. Åbne data (katalog fra US Space Force 18th Space Defense Squadron, videredistribueret af Celestrak, Dr T. S. Kelso). - Uafhængig verifikationsreference for SGP4 (Simplified General Perturbations 4) (allerede medleveret, hent ikke igen): testvektorerne fra AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 “Revisiting Spacetrack Report #3”, https://celestrak.org/publications/AIAA/2006-6753/, brugt af
tests/sgp4_verification.rs; sedocs/SGP4-VALIDATION.md. - Uafhængig reference for urstabilitetsrelationer: NIST (National Institute of Standards and Technology) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, relationerne σ_y(τ)↔fase bag Tutorial 2.