Tutoriály
Praktické pracovní příklady, které vás provedou od „spusťte dodaný scénář“ k „vyčíslete a obhajte výsledek“. Každé číslo uvedené ve třech tutoriálech je skutečným výstupem enginu, ukotveným k externímu (nekruhovému) směrodatnému orákulu a zafixovaným integračním testem (tests/tutorials.rs), takže tutoriál se nikdy nemůže tiše odchýlit od toho, co engine skutečně dělá. Pokud tutoriál říká, že optické hodiny drží 6600 s, test shodí sestavení v den, kdy to přestane platit.
Kshana je simulátor určování polohy, navigace a času (PNT). Tutoriály používají několik dalších zkratek, každá je rozepsána tam, kde se poprvé objeví: GNSS (globální družicový navigační systém), GPS (Global Positioning System), CLI (rozhraní příkazového řádku) a TOML (Tom's Obvious Minimal Language, formát souborů scénářů).
Jste v projektu noví? Přečtěte si nejprve úvodní přehled pojmů a slovník a pak se vraťte.
Tři pracovní příklady#
| # | Tutoriál | Co se naučíte | Druh scénáře | Obtížnost | ~Čas |
|---|---|---|---|---|---|
| 1 | Moje první oběžná dráha: kde jsou družice GPS | propagovat skutečnou konstelaci GPS, přečíst dostupnost, faktor zhoršení přesnosti polohy (PDOP) a přesnost polohy a exportovat, kde družice skutečně jsou (formát přesných drah SP3) | orbit |
začátečník | 15 min |
| 2 | Holdover hodin: jak dlouho lze setrvat | spustit holdover hodin bez GNSS, přečíst ukazatel kvality časování a pochopit zákon růstu √(q_wf·T), který za ním stojí | clock |
začátečník | 20 min |
| 3 | Kvantová a klasická odolnost GNSS | vrcholový tutoriál: detektor spoofingu (spoof) a úplná fúzní sada PNT (hybrid) a jak číst bezpečnost, integritu a dead-reckoning společně |
spoof + hybrid |
pokročilejší | 35 min |
Notebooky#
Spustitelné notebooky Jupyter, na syntetických datech a veřejných sadách elementů uložených pouze v repozitáři, jsou v notebooks/:
| Notebook | Co se naučíte |
|---|---|
| Důvěra na plavidle a trénink | vygenerovat syntetický proud NMEA z můstku se scénářovanou událostí a ohodnotit jej monitory důvěry plavidla (poradní, nikoli typově schválené navigační zařízení) |
| Mapa interference a expozice trasy | kde navigační data vypadala zhoršeně a jak velké části trasy se to týká |
| Mapování compliance a export pro testovací bench | jaké řádky veřejných rámců sada běhů podporuje důkazy pro (supports evidence for) (nikdy že je rámec splněn) a pohyb a události scénáře exportované jako text pro laboratorní simulátor GNSS (nezapisuje se žádný signál) |
| Kvantové a klasické GDOP | stejná geometrie konstelace s kvantovým a klasickým senzorem, porovnaná podle faktoru zhoršení přesnosti |
| Geometrie oblohy pod skylinou | družice, které místo vidí pod skylinou ulice nebo nábřeží, jejich DOP a chybová elipsa, datovaná obloha ze sad elementů a seedované Monte Carlo proti kovarianci (MODELLED) |
Jak spustit tutoriál#
Každý tutoriál spouští stejný scénář třemi způsoby; vyberte si, který vám vyhovuje. Všechny volají jediný engine, takže čísla jsou shodná (odpovídá části Usage v README).
Příkazový řádek. CLI rozlišuje podle pole kind ve scénáři a zapisuje <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html a <scenario>.report.json vedle vstupu (JSON je JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Několik druhů publikuje také tabulku reprodukovatelnosti jako <scenario>.table.csv (hodnoty oddělené čárkami): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing a moonlight-service-volume, je-li nastaveno místo exportu. Žádný ze tří tutoriálů mezi ně nepatří, takže tento soubor zde neuvidíte.
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- sestaví CLI z tohoto checkoutu. S nainstalovanou binárkou (cargo install kshana) je stejný příkaz kshana scenarios/orbit-sgp4-gps.toml. Bez checkoutu je většina dodaných scénářů součástí binárky: kshana example je vypíše (a pojmenuje těch několik, které součástí nejsou, s důvodem) a kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml jeden zapíše: kopii scenarios/orbit-sgp4-gps.toml, se kterou byla binárka sestavena.
Python. Jednou sestavte rozšíření z tohoto checkoutu pomocí maturin v aktivním virtuálním prostředí a poté zavolejte 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 nainstaluje místo toho publikovaný wheel. Ten může zaostávat za tímto checkoutem: json.loads(kshana.list_kinds()) vám řekne, které druhy scénářů vaše sestavení má.
Playground v prohlížeči. Bez instalace: otevřete Studio, zvolte scénář, upravte parametry a přečtěte si výsledek. Nic se nenahrává; engine běží na straně klienta jako WebAssembly.
Tutoriály uvádějí CLI, ale každý příkaz má výše uvedený ekvivalent v Pythonu a playgroundu. Každý výsledek je reprodukovatelný z scenario + seed + engine version: spusťte jej dvakrát a dostanete bitově shodný výstup.
Okomentované výukové scénáře#
Pro každou schopnostní doménu existuje jeden silně okomentovaný soubor .toml v scenarios/: výuková kopie kanonického scénáře s každým polem vysvětleným přímo v něm, pojmenovaným citovaným orákulem a očekávaným jednořádkovým shrnutím zaznamenaným jako komentář # expected:. Hodnoty polí jsou shodné s nadřazeným scénářem v nejvyšším adresáři scenarios/ repozitáře (tests/tutorials.rs porovnává zpracovaný TOML), takže zdokumentovaný výstup zůstává pravdivý. Zlaté hashe zůstávají rovněž nedotčeny: komentář nikdy nezmění hash scénáře.
| Oblast | Výukový soubor | Druh | Odvozeno z |
|---|---|---|---|
| Holdover hodin | scenarios/clock.toml | clock |
scenarios/clock-holdover.toml |
| Oběžná dráha a geometrie | scenarios/orbit.toml | orbit |
scenarios/orbit-sgp4-gps.toml |
| Integrita (RAIM, autonomní monitorování integrity přijímačem) | scenarios/integrity.toml | integrity |
scenarios/integrity-raim.toml |
| Bezpečnost (spoofing) | scenarios/security.toml | spoof |
scenarios/spoof-attack.toml |
| Hybridní PNT | scenarios/hybrid.toml | hybrid |
scenarios/hybrid-pnt.toml |
| Inerciální výpočet polohy z pohybu | scenarios/inertial.toml | inertial |
scenarios/imu-deadreckoning.toml |
| Přenos času | scenarios/timetransfer.toml | timetransfer |
scenarios/timetransfer.toml |
| Měřicí doména GNSS | scenarios/gnss-sim.toml | gnss-sim |
scenarios/gnss-sim-raim.toml |
Výukový soubor pro bezpečnost uvnitř používá
kind = "spoof": ukazatel kvality bezpečnosti (1 − P_md, jedna minus pravděpodobnost nezachycené události) vytváří balíček spoof. Název souboru se řídí schopností (bezpečnost),kindse řídí balíčkem (spoof). Hlavička tohoto souboru na to upozorňuje.
Úplný katalog druhů scénářů#
Engine rozlišuje podle kind scénáře. Tabulka níže uvádí nejčastěji používané druhy (osm výše uvedených tutoriálových domén a jejich nejbližší sousedy). Není to úplná množina: src/api.rs::list_scenario_kinds() vrací všech 92 vestavěných druhů. Tato funkce (zpřístupněná jako list_kinds() ve vazbách Pythonu a WebAssembly (WASM) a jako kshana kinds --json na příkazovém řádku) je směrodatným, vždy aktuálním katalogem a SCENARIOS.md je její generovaný výčet, jedna sekce na druh s povinnými a volitelnými poli TOML. tests/tutorials.rs::tutorial_scenarios_use_real_kinds vynucuje, aby každý druh, který tutoriál dokumentuje, byl skutečným druhem rozlišení, takže tato tabulka nemůže uvádět druh, který neexistuje.
| Druh | Co dělá |
|---|---|
clock |
Holdover hodin vůči specifikaci; volitelný soubor Monte Carlo (runs > 1). |
inertial |
1-DOF (jeden stupeň volnosti) inerciální dead-reckoning během výpadku GNSS. |
orbit |
Dostupnost GNSS + faktor zhoršení přesnosti (DOP) z konstelace (Walker / dvouřádkové elementy / RINEX, Receiver Independent Exchange format). |
integrity |
Snapshot / separace řešení / ARAIM (pokročilý RAIM) s horizontálními a vertikálními ochrannými úrovněmi (HPL/VPL) + Stanfordský diagram. |
lunar-integrity |
Průlet ARAIM s ochrannými úrovněmi na jižním pólu Měsíce proti sadě relé LunaNet. |
timetransfer |
Optický vs. rádiofrekvenční (RF) obousměrný přenos času/frekvence. |
hybrid |
Vrcholový hybridní PNT: hodiny + inerciální měřicí jednotka (IMU) + podpora přenosem času. |
fusion |
Společná Kalmanova fúze senzorů PNT nad týmiž hybridními vstupy. |
gnss-ins |
Volně a těsně vázaný rozšířený Kalmanův filtr chybového stavu GNSS/INS (inerciální navigační systém). |
gnss-sim |
Simulace pseudovzdáleností v měřicí oblasti (ionosféra Klobuchar, troposféra Saastamoinen/Niell) + RAIM. |
jamming |
Rozpočet spoje při rušení: poměr rušení k signálu (J/S) → efektivní hustota nosné k šumu (C/N₀) → ztráta zachycení. |
spoof |
Stochastický detektor časového spoofingu (Neyman–Pearson / χ²₁) s pravděpodobnostmi falešného poplachu a nezachycené události z Monte Carlo (P_fa/P_md). |
sweep |
1-D průchod obchodní studie parametrem balíčku hodin. |
sweep-nd |
Obecný N-rozměrný průchod libovolným balíčkem přes klíče TOML s tečkami / cesty metrik JSON. |
Za hranicemi tutoriálů: novější schopnosti#
Tři tutoriály zůstávají u klasických balíčků hodin, oběžné dráhy a bezpečnosti. Engine od té doby výrazně vyrostl. Každý řádek níže je dodaný scénář, který můžete spustit tak, jak je (cargo run -- <file> nebo kshana <file>); shrnutí je první řádek, který kshana 0.35.0 pro něj vypsala dne 2026-10-10. Na rozdíl od údajů v tutoriálech jsou tyto řádky záznamem jednoho běhu a nejsou zafixovány tests/tutorials.rs: pro aktuální hodnotu scénář spusťte znovu. Výsledky uvádějí vlastní rozsah (většina nese label) a verifikační matice uvádí, které schopnosti jsou VALIDATED proti vnějšímu orákulu a které MODELLED.
| Schopnost | Scénář | Druh | První řádek shrnutí | Číst dále |
|---|---|---|---|---|
| Spektrum pásma L a vodopád rušení | 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 |
| Sluneční soustava v jedné epoše | 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 |
| Určování polohy kolem jiného tělesa | scenarios/europa-surface-pnt.toml |
body-pnt |
Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs |
SCENARIOS.md |
| Návrh konstelace ve velkém měřítku | 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 |
| Kampaně: druhy řetězené na jedné časové ose | 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 |
| Jeden systém LEO-PNT od začátku do konce | scenarios/leo-pnt-end-to-end.toml |
leo-pnt-chain |
LEO-PNT end to end, generic 1080 km constellation |
LEO-PNT.md |
| Fúzované určování polohy 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 |
| Signály LEO, průlety a navigační zprávy | 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 (průlet) |
LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md |
| Konvergence PPP s vrstvou LEO; určování polohy 5G | 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 |
| Odolnost: GNSS rušeno, uživatele nese LEO | 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 |
| Vertikály: železnice, námořní doprava, telekomunikace, vozidla, Arktida | scenarios/leo-vertical-rail-maritime.toml (a další soubory leo-vertical-*) |
campaign |
campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … |
CAMPAIGNS.md |
| Telekomunikační holdover vůči limitům hodin ITU-T (Mezinárodní telekomunikační unie, sektor telekomunikační standardizace) 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 je nízká oběžná dráha Země a MEO střední oběžná dráha Země; PVT je poloha, rychlost a čas; PPP je přesné bodové určování polohy; 5G je pátá generace mobilního standardu; TDB je barycentrický dynamický čas; JD je juliánské datum; TE je časová chyba.
CLI přidává ke každému běhu tři výstupy:
- Zprávy. Každý běh zapisuje
<scenario>.report.htmla<scenario>.report.json(viz REPORTS.md).kshana --study <suite.toml>spustí sadu scénářů do jednoho.study.jsona.study.html, napříkladkshana --study scenarios/quantum-pnt-demonstrator.suite.toml. - Animation.
kshana <scenario.toml> --animate <svg|html|frames|all>vykreslí časové řady běhu, například--animate htmlnascenarios/orbit-sgp4-gps.tomlzapíšeorbit-sgp4-gps.animation.html. Druh bez vzorkované časové osy (napříkladsolar-system) je odmítnut s chybou; viz ANIMATION.md. - Exporty pro interoperabilitu.
--export <czml|kml|geojson|stk|sigmf|all|list>zapíše výsledek pro jiné nástroje: CZML (Cesium Language), KML (Keyhole Markup Language, pro Google Earth), GeoJSON (geografický JSON), efemeridy STK (Systems Tool Kit) nebo záznam SigMF (Signal Metadata Format).--export listříká, které formáty se na scénář vztahují; SigMF se vztahuje pouze naspectrum. Balíček oběžné dráhy také exportuje--export-sp3,--export-omma--export-oem(zprávy o oběžné dráze CCSDS, Poradní výbor pro kosmické datové systémy). Viz INTEROP.md.
Odstupňovaná cvičení#
Projděte si žebříček. Každá úroveň je těžší a lépe obhajitelná než předchozí; referenční řešení jsou v exercises/.
| Úroveň | Cíl | Co děláte | Referenční řešení |
|---|---|---|---|
| Úroveň 1 — spustit a přečíst | spustit dodaný scénář beze změny a přečíst jeden ukazatel kvality | Spusťte scenarios/clock-holdover.toml; vypište holdover_s pro kvantové a klasické hodiny. CLI, playground nebo jednořádkové volání Pythonu. |
exercises/tier1_run.py |
| Úroveň 2 — upravit a proměřit | změnit jeden parametr a sledovat monotónní účinek | Zpřísněte specifikaci hodin (threshold_ns) nebo prodlužte výpadek a sledujte, jak holdover klesá; nebo k vytvoření tabulky použijte kind = "sweep"/"sweep-nd". |
exercises/tier2_sweep.py |
| Úroveň 3 — vyčíslit a obhájit | Monte Carlo, pásma spolehlivosti, reprodukovatelnost a ochranná úroveň | Spusťte soubor hodin (runs = N), přečtěte pásmo [p05–p95], ověřte, že dva běhy dávají shodný scenario_hash, a přečtěte si výsledek integrity / Stanfordova diagramu. |
exercises/tier3_montecarlo.py |
Referenční řešení používají rozšíření Pythonu (nejprve maturin develop --features python). Spuštěno z kořene repozitáře, tier2_sweep.py vypíše pokles holdoveru čipových atomových hodin z 2610 s při specifikaci 20 ns na 1140 s při 5 ns.
Chcete čerstvá data?#
Úvodní čísla v těchto tutoriálech běží výhradně ze scénářů, které již jsou v repozitáři. Nic se nestahuje, a právě proto jsou reprodukovatelná a bezpečná ke spouštění v kontinuální integraci (CI). Pro cvičení „rozšiřte to“ můžete stáhnout živá data:
- Dvouřádkové elementy GPS (TLE) (obnovení konstelace oběžné dráhy): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, textové 3řádkové sady elementů (název + řádek 1 + řádek 2). Pomocník:
scripts/fetch_tles.sh. Otevřená data (katalog 18. eskadry kosmické obrany Vesmírných sil USA, redistribuovaný Celestrakem, Dr T. S. Kelso). - Ověřovací orákulum SGP4 (Simplified General Perturbations 4) (již součástí repozitáře, nestahujte znovu): testovací vektory AIAA (Americký institut pro letectví a kosmonautiku) 2006-6753 „Revisiting Spacetrack Report #3“, https://celestrak.org/publications/AIAA/2006-6753/, používané
tests/sgp4_verification.rs; vizdocs/SGP4-VALIDATION.md. - Orákulum vztahů stability hodin: NIST (Národní institut standardů a technologie) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, vztahy σ_y(τ)↔fáze za Tutoriálem 2.