Handledningar
Praktiska, genomgångna exempel som tar dig från ”kör ett medföljande scenario” till ”kvantifiera och försvara ett resultat”. Varje tal som citeras i de tre handledningarna är ett verkligt motorresultat, förankrat i en extern (icke-cirkulär) auktoritativ oberoende referens och fastlåst av ett integrationstest (tests/tutorials.rs), så en handledning kan aldrig i det tysta avvika från vad motorn faktiskt gör. Om en handledning säger att den optiska klockan klarar 6600 s, fäller testet bygget den dag det slutar vara sant.
Kshana är en simulator för positionering, navigering och tidssynkronisering (PNT). Handledningarna använder några fler förkortningar, var och en utskriven där den först förekommer: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (command-line interface, kommandoradsgränssnitt) och TOML (Tom's Obvious Minimal Language, scenariofilens format).
Är du ny i projektet? Läs först begreppsintroduktionen och ordlistan och kom sedan tillbaka hit.
De tre genomgångna exemplen#
| # | Handledning | Vad du lär dig | Scenariotyp | Svårighetsgrad | ~Tid |
|---|---|---|---|---|---|
| 1 | Min första bana: var finns GPS-satelliterna | propagera en verklig GPS-konstellation, läsa av tillgänglighet, positionens precisionsförsämring (PDOP) och positionsnoggrannhet samt exportera var satelliterna faktiskt befinner sig (SP3, det precisa banformatet) | orbit |
nybörjare | 15 min |
| 2 | Klock-holdover: hur länge klarar du dig själv | köra en klock-holdover utan GNSS, läsa av tidsmåttet och förstå tillväxtlagen √(q_wf·T) bakom det | clock |
nybörjare | 20 min |
| 3 | Kvant mot klassisk GNSS-resiliens | slutprovet: en spoofing-detektor (spoof) och en fullständig sammanslagen PNT-svit (hybrid), och hur du läser säkerhet, integritet och dödräkning tillsammans |
spoof + hybrid |
medel | 35 min |
Notebooks#
Körbara Jupyter-anteckningsböcker, på syntetiska data och offentliga elementmängder som bara finns i förrådet, finns i notebooks/:
| Notebook | Vad du lär dig |
|---|---|
| Fartygsförtroende och utbildning | generera en syntetisk NMEA-ström från en brygga med en skriptad händelse och poängsätta den med fartygets förtroendemonitorer (rådgivande, inte typgodkänd navigationsutrustning) |
| Störningskarta och exponering längs en rutt | var navigeringsdata har sett försämrade ut och hur stor del av en rutt de berör |
| Compliance-kartläggning och export till testbänk | vilka rader i offentliga ramverk en uppsättning körningar ger belägg för (aldrig att ett ramverk uppfylls), och ett scenarios rörelse och händelser exporterade som text för en GNSS-simulator i laboratorium (ingen signal skrivs) |
| Kvant mot klassisk GDOP | samma konstellationsgeometri med en kvantsensor och en klassisk sensor, jämförda med precisionsförsämring |
| Himmelsgeometri under en siluett | de satelliter en plats ser under en gatu- eller kajsiluett, deras DOP och felellips, en daterad himmel från elementmängder och en Monte Carlo med frö mot kovariansen (MODELLED) |
Så kör du en handledning#
Varje handledning kör samma scenario på tre sätt; välj det som passar dig. Alla anropar en motor, så talen är identiska (motsvarar avsnittet Användning i README).
Kommandorad. CLI:t väljer väg utifrån scenariots fält kind och skriver <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html och <scenario>.report.json bredvid indatafilen (JSON är JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Några typer publicerar också en reproducerbarhetstabell som <scenario>.table.csv (kommaseparerade värden): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing och moonlight-service-volume när en exportplats är angiven. Ingen av de tre handledningarna är någon av dem, så du ser inte den filen här.
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- bygger CLI:t från den här utcheckningen. Med en installerad binär (cargo install kshana) är samma kommando kshana scenarios/orbit-sgp4-gps.toml. Utan utcheckning är de flesta medföljande scenarier inbyggda i binären: kshana example listar dem (och nämner de få som inte är inbyggda, med skälet), och kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml skriver ut ett: den kopia av scenarios/orbit-sgp4-gps.toml som binären byggdes med.
Python. Bygg tillägget från den här utcheckningen en gång med maturin, i en aktiv virtuell miljö, och anropa sedan 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 installerar i stället det publicerade wheel-paketet. Det kan ligga efter den här utcheckningen: json.loads(kshana.list_kinds()) visar vilka scenariotyper ditt bygge har.
Lekplats i webbläsaren. Ingen installation: öppna Studio, välj ett scenario, redigera parametrarna och läs resultatet. Ingenting laddas upp; motorn körs hos klienten som WebAssembly.
Handledningarna citerar CLI:t, men varje kommando har motsvarigheten i Python och lekplatsen ovan. Varje resultat går att reproducera från scenario + seed + engine version: kör det två gånger så får du bitidentiska utdata.
Kommenterade undervisningsscenarier#
För varje förmågeområde finns en rikt kommenterad .toml under scenarios/: en undervisningskopia av ett kanoniskt scenario där varje fält förklaras på plats, den åberopade oberoende referensen namnges och den förväntade sammanfattningen på en rad finns registrerad som en # expected:-kommentar. Fältvärdena är identiska med förlagans i förrådets översta katalog scenarios/ (tests/tutorials.rs jämför den tolkade TOML-filen), så den dokumenterade utdatan förblir sann. De gyllene hasharna är också orörda: en kommentar ändrar aldrig ett scenarios hash.
| Område | Undervisningsfil | Typ | Härledd från |
|---|---|---|---|
| Klock-holdover | scenarios/clock.toml | clock |
scenarios/clock-holdover.toml |
| Bana & geometri | scenarios/orbit.toml | orbit |
scenarios/orbit-sgp4-gps.toml |
| Integritet (RAIM, receiver autonomous integrity monitoring) | scenarios/integrity.toml | integrity |
scenarios/integrity-raim.toml |
| Säkerhet (spoofing) | scenarios/security.toml | spoof |
scenarios/spoof-attack.toml |
| Hybrid-PNT | scenarios/hybrid.toml | hybrid |
scenarios/hybrid-pnt.toml |
| Tröghetsnavigering | scenarios/inertial.toml | inertial |
scenarios/imu-deadreckoning.toml |
| Tidsöverföring | scenarios/timetransfer.toml | timetransfer |
scenarios/timetransfer.toml |
| GNSS-mätdomänen | scenarios/gnss-sim.toml | gnss-sim |
scenarios/gnss-sim-raim.toml |
Undervisningsfilen för säkerhet använder
kind = "spoof"internt: måttet för säkerhet (1 − P_md, ett minus sannolikheten för missad detektion) produceras av spoof-paketet. Filnamnet följer förmågan (säkerhet), medankindföljer paketet (spoof). Filens huvud pekar ut detta.
Hela katalogen över scenariotyper#
Motorn väljer väg utifrån scenariots kind. Tabellen nedan listar de vanligaste typerna (de åtta handledningsområdena ovan samt deras närmaste grannar). Den är inte den fullständiga uppsättningen: src/api.rs::list_scenario_kinds() returnerar alla 92 inbyggda typer. Den funktionen (tillgänglig som list_kinds() i bindningarna för Python och WebAssembly (WASM), och som kshana kinds --json på kommandoraden) är den auktoritativa, alltid aktuella katalogen, och SCENARIOS.md är dess genererade uppräkning, ett avsnitt per typ med de obligatoriska och valfria TOML-fälten. tests/tutorials.rs::tutorial_scenarios_use_real_kinds säkerställer att varje typ som en handledning dokumenterar är en verklig typ att välja väg efter, så ingenting i den här tabellen kan nämna en typ som inte finns.
| Typ | Vad den gör |
|---|---|
clock |
Klock-holdover mot specifikation; valfritt Monte Carlo-ensemble (runs > 1). |
inertial |
Tröghetsbaserad dödräkning i 1-DOF (en frihetsgrad) under ett GNSS-avbrott. |
orbit |
GNSS-tillgänglighet + precisionsförsämring (DOP) från en konstellation (Walker / tvåradiga elementmängder / RINEX, Receiver Independent Exchange-formatet). |
integrity |
Snapshot / solution-separation / ARAIM (advanced RAIM) med horisontella och vertikala skyddsnivåer (HPL/VPL) + Stanford-diagram. |
lunar-integrity |
ARAIM-skyddsnivåpass vid månens sydpol mot en uppsättning LunaNet-reläer. |
timetransfer |
Optisk mot radiofrekvent (RF) tvåvägsöverföring av tid och frekvens. |
hybrid |
Slutprov för hybrid-PNT: klocka + tröghetsmätenhet (IMU) + stöd från tidsöverföring. |
fusion |
Gemensam PNT med Kalman-filtersensorfusion över samma hybrida indata. |
gnss-ins |
Löst och tätt kopplat GNSS/INS (tröghetsnavigeringssystem), utökat Kalman-filter med feltillstånd. |
gnss-sim |
Pseudoavståndssimulering i mätdomänen (Klobuchar-jonosfär, Saastamoinen/Niell-troposfär) + RAIM. |
jamming |
Jamming med länkbudget: störsignal-till-signal-förhållande (J/S) → effektiv bärvåg-till-brustäthet (C/N₀) → förlorad låsning. |
spoof |
Stokastisk detektor för tidsspoofing (Neyman–Pearson / χ²₁) med Monte Carlo-sannolikheter för falsklarm och missad detektion (P_fa/P_md). |
sweep |
1-D-svep för en avvägningsstudie över en parameter i klockpaketet. |
sweep-nd |
Generellt N-dimensionellt svep över valfritt paket via punktseparerade TOML-nycklar / JSON-mätvärdessökvägar. |
Bortom handledningarna: nyare förmågor#
De tre handledningarna håller sig till de klassiska paketen för klocka, bana och säkerhet. Motorn har vuxit långt bortom dem. Varje rad nedan är ett medföljande scenario som du kan köra som det är (cargo run -- <file> eller kshana <file>); sammanfattningen är den första raden som kshana 0.35.0 skrev ut för det den 2026-10-10. Till skillnad från handledningarnas värden är dessa rader en registrering av en körning och inte fastlåsta av tests/tutorials.rs: kör scenariot igen för att få aktuellt värde. Resultaten anger sin egen omfattning (de flesta har en label), och verifieringsmatrisen anger vilka förmågor som är VALIDATED mot en extern oberoende referens och vilka som är MODELLED.
| Förmåga | Scenario | Typ | Första raden i sammanfattningen | Läs mer |
|---|---|---|---|---|
| L-bandsspektrum och jamming-vattenfall | 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 vid en epok | 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 kring en annan himlakropp | scenarios/europa-surface-pnt.toml |
body-pnt |
Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs |
SCENARIOS.md |
| Konstellationsutformning 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 |
| Kampanjer: typer kedjade på en 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 |
| Ett LEO-PNT-system från början till slut | scenarios/leo-pnt-end-to-end.toml |
leo-pnt-chain |
LEO-PNT end to end, generic 1080 km constellation |
LEO-PNT.md |
| Sammanslagen positionering med MEO + LEO | 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, pass och navigeringsmeddelanden | 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 (passet) |
LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md |
| PPP-konvergens med ett LEO-lager; 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 |
| Resiliens: GNSS störs ut med jamming, LEO bär användaren | 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: järnväg, sjöfart, telekom, fordon, Arktis | scenarios/leo-vertical-rail-maritime.toml (och de andra leo-vertical-*-filerna) |
campaign |
campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … |
CAMPAIGNS.md |
| Telekom-holdover mot klockgränserna 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 är låg jordbana och MEO medelhög jordbana; PVT är position, hastighet och tid; PPP är precis punktpositionering; 5G är den femte generationens mobilstandard; TDB är barycentrisk dynamisk tid; JD är juliansk dag; TE är tidsfel.
CLI:t lägger till tre utdata ovanpå varje körning:
- Rapporter. Varje körning skriver
<scenario>.report.htmloch<scenario>.report.json(se REPORTS.md).kshana --study <suite.toml>kör en svit av scenarier till en.study.jsonoch en.study.html, till exempelkshana --study scenarios/quantum-pnt-demonstrator.suite.toml. - Animation.
kshana <scenario.toml> --animate <svg|html|frames|all>renderar körningens tidsserie, till exempel skriver--animate htmlpåscenarios/orbit-sgp4-gps.tomlfilenorbit-sgp4-gps.animation.html. En typ utan samplad tidsaxel (somsolar-system) avvisas med ett fel; se ANIMATION.md. - Export för samverkan.
--export <czml|kml|geojson|stk|sigmf|all|list>skriver resultatet för andra verktyg: CZML (Cesium Language), KML (Keyhole Markup Language, för Google Earth), GeoJSON (geografisk JSON), en STK-efemerid (Systems Tool Kit) eller en SigMF-inspelning (Signal Metadata Format).--export listanger vilka format som gäller för ett scenario; SigMF gäller baraspectrum. Omloppspaketet exporterar också--export-sp3,--export-ommoch--export-oem(CCSDS, Consultative Committee for Space Data Systems, banmeddelanden). Se INTEROP.md.
Graderade övningar#
Arbeta dig uppför stegen. Varje nivå är svårare och mer försvarbar än den förra; referenslösningar finns i exercises/.
| Nivå | Mål | Vad du gör | Referenslösning |
|---|---|---|---|
| Nivå 1 – kör och läs | kör ett medföljande scenario oförändrat och läs av ett kvalitetsmått | Kör scenarios/clock-holdover.toml; skriv ut holdover_s för kvant mot klassisk. CLI, lekplats eller ett Python-anrop på en rad. |
exercises/tier1_run.py |
| Nivå 2 – redigera och svep | ändra en parameter och observera en monoton effekt | Skärp klockspecifikationen (threshold_ns) eller förläng avbrottet och se holdover sjunka; eller använd kind = "sweep"/"sweep-nd" för att tabellera det. |
exercises/tier2_sweep.py |
| Nivå 3 – kvantifiera och försvara | Monte Carlo, konfidensband, reproducerbarhet och en skyddsnivå | Kör ett klockensemble (runs = N), läs av bandet [p05–p95], bekräfta att två körningar ger identisk scenario_hash och läs ett integritets-/Stanford-resultat. |
exercises/tier3_montecarlo.py |
Referenslösningarna använder Python-tillägget (maturin develop --features python först). Körd från förrådets rot skriver tier2_sweep.py ut hur den chipskaliga atomklockans holdover faller från 2610 s vid en specifikation på 20 ns till 1140 s vid 5 ns.
Vill du ha färska data?#
Huvudvärdena i de här handledningarna körs helt från scenarier som redan finns i förrådet. Ingenting hämtas, vilket är det som håller dem reproducerbara och säkra att köra i kontinuerlig integration (CI). För övningarna ”bygg vidare” kan du hämta levande data:
- Tvåradiga elementmängder (TLE) för GPS (uppdatera omloppskonstellationen): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, elementmängder i klartext med 3 rader (namn + rad 1 + rad 2). Hjälpskript:
scripts/fetch_tles.sh. Öppna data (katalogen från US Space Force 18th Space Defense Squadron, vidaredistribuerad av Celestrak, Dr T. S. Kelso). - Oberoende referens för verifiering av SGP4 (Simplified General Perturbations 4) (redan inkluderad, hämta inte igen): testvektorerna i AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 ”Revisiting Spacetrack Report #3”, https://celestrak.org/publications/AIAA/2006-6753/, som används av
tests/sgp4_verification.rs; sedocs/SGP4-VALIDATION.md. - Oberoende referens för klockstabilitetens samband: NIST (National Institute of Standards and Technology) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, sambanden mellan σ_y(τ) och fas bakom handledning 2.