Tradução automática, não revista por um falante nativo. O inglês é a referência.

ComeçarEditar no GitHubFonte: docs/tutorials/README.md

Tutoriais

Exemplos práticos que o levam de “executar um cenário fornecido” a “quantificar e defender um resultado”. Cada número citado nos três tutoriais é uma saída real do motor, ancorada numa referência independente externa (não circular) de autoridade reconhecida, e fixado por um teste de integração (tests/tutorials.rs), pelo que um tutorial nunca pode afastar-se silenciosamente do que o motor realmente faz. Se um tutorial disser que o relógio ótico aguenta 6600 s, o teste faz falhar a compilação no dia em que isso deixar de ser verdade.

O Kshana é um simulador de posicionamento, navegação e temporização (PNT). Os tutoriais usam mais algumas abreviaturas, cada uma por extenso onde aparece pela primeira vez: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (command-line interface) e TOML (Tom's Obvious Minimal Language, o formato dos ficheiros de cenário).

É novo no projeto? Leia primeiro o guia de conceitos e o glossário e depois volte aqui.

Os três exemplos práticos#

# Tutorial O que aprende Tipo de cenário Dificuldade ~Tempo
1 A minha primeira órbita: onde estão os satélites GPS propagar uma constelação GPS real, ler a disponibilidade, a diluição da precisão da posição (PDOP) e a exatidão de posição, e exportar onde os satélites estão realmente (formato de órbita precisa SP3) orbit principiante 15 min
2 Holdover do relógio: durante quanto tempo se consegue navegar em inércia executar um holdover de relógio sem GNSS, ler a figura de mérito de temporização e compreender a lei de crescimento √(q_wf·T) que lhe está por trás clock principiante 20 min
3 Resiliência GNSS quântica contra clássica o tutorial final: um detetor de spoofing (spoof) e um conjunto PNT completo e fundido (hybrid), e como ler em conjunto segurança / integridade / navegação por estima spoof + hybrid intermédia 35 min

Cadernos interativos#

Os notebooks Jupyter executáveis, sobre dados sintéticos e conjuntos de elementos públicos mantidos apenas no repositório, estão em notebooks/:

Notebook O que aprende
Confiança e formação de embarcações gerar um fluxo NMEA sintético de ponte com um evento programado e pontuá-lo com os monitores de confiança de embarcação (consultivo, não um equipamento de navegação homologado)
Mapa de interferência e exposição de rotas onde os dados de navegação pareceram degradados e quanto de um percurso afetam
Mapeamento de compliance e exportação de test-bench para que linhas de referenciais públicos um conjunto de execuções fornece elementos de prova em apoio (nunca que um referencial é satisfeito), e o movimento e os eventos de um cenário exportados como texto para um simulador GNSS de laboratório (nenhum sinal é escrito)
GDOP quântico contra clássico a mesma geometria de constelação com um sensor quântico e um clássico, comparados pela diluição da precisão
Geometria do céu sob uma linha de horizonte os satélites que um local vê sob a linha de horizonte de uma rua ou de um cais, o seu DOP e elipse de erro, um céu datado a partir de conjuntos de elementos e um Monte Carlo com seed face à covariância (MODELLED)

Como executar um tutorial#

Todos os tutoriais executam o mesmo cenário de três formas; escolha a que lhe convier. Todas chamam o mesmo motor, pelo que os números são idênticos (espelha a secção Utilização do README).

Linha de comandos. A CLI despacha com base no campo kind do cenário e escreve <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html e <scenario>.report.json junto da entrada (JSON é JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Alguns tipos de cenário publicam também uma tabela de reprodutibilidade como <scenario>.table.csv (valores separados por vírgulas): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing e moonlight-service-volume quando está definido um local de exportação. Nenhum dos três tutoriais é um deles, pelo que não verá esse ficheiro aqui.

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

cargo run -- compila a CLI a partir desta cópia de trabalho. Com um binário instalado (cargo install kshana), o mesmo comando é kshana scenarios/orbit-sgp4-gps.toml. Sem uma cópia de trabalho, a maioria dos cenários fornecidos está incluída no binário: kshana example lista-os (e indica os poucos que não estão incluídos, com o motivo), e kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml escreve um: a cópia de scenarios/orbit-sgp4-gps.toml com que o binário foi compilado.

Python. Compile a extensão a partir desta cópia de trabalho uma vez com o maturin, dentro de um ambiente virtual ativo, e depois chame 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 instala antes o wheel publicado. Pode ficar atrás desta cópia de trabalho: json.loads(kshana.list_kinds()) indica-lhe que tipos de cenário a sua compilação tem.

Playground no navegador. Sem instalação: abra o Studio, escolha um cenário, edite os parâmetros e leia o resultado. Nada é enviado; o motor corre no cliente como WebAssembly.

Os tutoriais citam a CLI, mas cada comando tem o equivalente em Python e no playground acima. Cada resultado é reproduzível a partir de scenario + seed + engine version: execute-o duas vezes e obtém uma saída idêntica bit a bit.

Cenários didáticos anotados#

Para cada domínio de capacidade existe um .toml muito comentado em scenarios/: uma cópia didática de um cenário canónico com cada campo explicado em linha, a referência independente citada indicada e o resumo esperado de uma linha registado como comentário # expected:. Os valores dos campos são idênticos aos do cenário de origem no diretório scenarios/ de topo do repositório (tests/tutorials.rs compara o TOML analisado), pelo que a saída documentada continua verdadeira. Os hashes de referência também ficam intactos: um comentário nunca altera o hash de um cenário.

Domínio Ficheiro didático Tipo Derivado de
Holdover do relógio scenarios/clock.toml clock scenarios/clock-holdover.toml
Órbita e geometria scenarios/orbit.toml orbit scenarios/orbit-sgp4-gps.toml
Integridade (RAIM, monitorização autónoma da integridade pelo recetor) scenarios/integrity.toml integrity scenarios/integrity-raim.toml
Segurança (spoofing) scenarios/security.toml spoof scenarios/spoof-attack.toml
PNT híbrido scenarios/hybrid.toml hybrid scenarios/hybrid-pnt.toml
Navegação estimada inercial scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
Transferência de tempo scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
Domínio de medições GNSS scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

O ficheiro didático de segurança usa kind = "spoof" no interior: a figura de mérito de Segurança (1 − P_md, um menos a probabilidade de falha de deteção) é produzida pelo pacote spoof. O nome do ficheiro segue a capacidade (segurança), o kind segue o pacote (spoof). O cabeçalho desse ficheiro chama a atenção para isto.

O catálogo completo de tipos de cenário#

O motor despacha com base no kind do cenário. A tabela abaixo lista os tipos de cenário mais usados (os oito domínios dos tutoriais acima mais os vizinhos mais próximos). Não é o conjunto completo: src/api.rs::list_scenario_kinds() devolve todos os 92 tipos de cenário incorporados. Essa função (exposta como list_kinds() nas ligações Python e WebAssembly (WASM), e como kshana kinds --json na linha de comandos) é o catálogo de referência, sempre atual, e SCENARIOS.md é a sua enumeração gerada, com uma secção por tipo de cenário e os campos TOML obrigatórios e opcionais. tests/tutorials.rs::tutorial_scenarios_use_real_kinds garante que todos os tipos de cenário que um tutorial documenta são tipos de despacho reais, pelo que nada nesta tabela pode nomear um tipo de cenário que não existe.

Tipo O que faz
clock Holdover do relógio face à especificação; ensemble de Monte Carlo opcional (runs > 1).
inertial Navegação inercial por estima de 1-DOF (um grau de liberdade) durante uma interrupção GNSS.
orbit Disponibilidade GNSS + diluição da precisão (DOP) a partir de uma constelação (Walker / elementos de duas linhas / RINEX, o Receiver Independent Exchange format).
integrity Snapshot / separação de soluções / ARAIM (RAIM avançado) com níveis de proteção horizontal e vertical (HPL/VPL) + diagrama de Stanford.
lunar-integrity Passagem de níveis de proteção ARAIM no polo sul lunar face a um conjunto de relés LunaNet.
timetransfer Transferência bidirecional de tempo/frequência ótica contra de radiofrequência (RF).
hybrid Tutorial final de PNT híbrido: relógio + unidade de medição inercial (IMU) + auxílio de transferência de tempo.
fusion PNT por fusão de sensores com filtro de Kalman conjunto sobre as mesmas entradas híbridas.
gnss-ins Filtro de Kalman estendido de estados de erro GNSS/INS (sistema de navegação inercial), de acoplamento fraco e forte.
gnss-sim Simulação de pseudodistâncias no domínio da medição (ionosfera de Klobuchar, troposfera de Saastamoinen/Niell) + RAIM.
jamming Jamming por balanço de ligação: relação interferência-sinal (J/S) → densidade portadora-ruído efetiva (C/N₀) → perda de bloqueio.
spoof Detetor estocástico de spoofing de tempo (Neyman–Pearson / χ²₁) com probabilidades de falso alarme e de falha de deteção por Monte Carlo (P_fa/P_md).
sweep Varrimento 1-D de estudo de compromissos sobre um parâmetro de um pacote de relógio.
sweep-nd Varrimento N-D genérico sobre qualquer pacote através de chaves TOML com pontos / caminhos de métricas JSON.

Para além dos tutoriais: capacidades mais recentes#

Os três tutoriais ficam pelos pacotes clássicos de relógio, órbita e segurança. O motor cresceu muito para além deles. Cada linha abaixo é um cenário fornecido que pode executar tal como está (cargo run -- <file> ou kshana <file>); o resumo é a primeira linha que o kshana 0.35.0 imprimiu para ele em 2026-10-10. Ao contrário dos valores dos tutoriais, estas linhas são o registo de uma execução, não fixadas por tests/tutorials.rs: execute novamente o cenário para obter o valor atual. Os resultados indicam o seu próprio âmbito (a maioria traz um label), e a matriz de verificação indica que capacidades são VALIDATED face a uma referência independente externa e quais são MODELLED.

Capacidade Cenário Tipo Primeira linha do resumo Ler mais
Espetro de banda L e cascata de jamming 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
O sistema solar numa época 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
Posicionamento em torno de outro corpo scenarios/europa-surface-pnt.toml body-pnt Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs SCENARIOS.md
Projeto de constelações em larga escala 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
Campanhas: tipos de cenário encadeados numa única cronologia 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
Um sistema LEO-PNT de ponta a ponta scenarios/leo-pnt-end-to-end.toml leo-pnt-chain LEO-PNT end to end, generic 1080 km constellation LEO-PNT.md
Posicionamento fundido 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
Sinais, passagens e mensagens de navegação LEO 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 (a passagem) LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md
Convergência PPP com uma camada LEO; posicionamento 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
Resiliência: GNSS com jamming, o LEO leva o utilizador 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
Verticais: ferrovia, marítimo, telecomunicações, veículos, Ártico scenarios/leo-vertical-rail-maritime.toml (e os outros ficheiros leo-vertical-*) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
Holdover de telecomunicações face aos limites de relógio G.8272 da ITU-T (International Telecommunication Union, Telecommunication Standardization Sector) 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 é órbita terrestre baixa e MEO órbita terrestre média; PVT é posição, velocidade e tempo; PPP é posicionamento preciso de ponto; 5G é a norma móvel de quinta geração; TDB é o Tempo Dinâmico Baricêntrico; JD é a Data Juliana; TE é o erro de tempo.

A CLI acrescenta três saídas a qualquer execução:

  • Relatórios. Cada execução escreve <scenario>.report.html e <scenario>.report.json (ver REPORTS.md). kshana --study <suite.toml> executa um conjunto de cenários num único .study.json e .study.html, por exemplo kshana --study scenarios/quantum-pnt-demonstrator.suite.toml.
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all> desenha as séries temporais da execução, por exemplo --animate html em scenarios/orbit-sgp4-gps.toml escreve orbit-sgp4-gps.animation.html. Um tipo de cenário sem eixo temporal amostrado (como solar-system) é recusado com um erro; ver ANIMATION.md.
  • Exportações de interoperabilidade. --export <czml|kml|geojson|stk|sigmf|all|list> escreve o resultado para outras ferramentas: CZML (Cesium Language), KML (Keyhole Markup Language, para o Google Earth), GeoJSON (JSON geográfico), efemérides STK (Systems Tool Kit) ou uma gravação SigMF (Signal Metadata Format). --export list indica que formatos se aplicam a um cenário; o SigMF aplica-se apenas a spectrum. O pacote de órbita também exporta --export-sp3, --export-omm e --export-oem (mensagens de órbita CCSDS, do Consultative Committee for Space Data Systems). Ver INTEROP.md.

Exercícios graduados#

Percorra a escada. Cada nível é mais difícil e mais defensável do que o anterior; as soluções de referência encontram-se em exercises/.

Nível Objetivo O que faz Solução de referência
Nível 1 — executar e ler executar um cenário fornecido sem alterações e ler uma figura de mérito Execute scenarios/clock-holdover.toml; imprima o holdover_s quântico contra clássico. CLI, playground ou uma chamada Python de uma linha. exercises/tier1_run.py
Nível 2 — editar e varrer alterar um parâmetro e observar um efeito monótono Aperte a especificação do relógio (threshold_ns) ou alongue a interrupção e veja o holdover descer; ou use kind = "sweep"/"sweep-nd" para o tabelar. exercises/tier2_sweep.py
Nível 3 — quantificar e defender Monte Carlo, bandas de confiança, reprodutibilidade e um nível de proteção Execute um ensemble de relógios (runs = N), leia a banda [p05–p95], confirme que duas execuções dão um scenario_hash idêntico e leia um resultado de integridade / Stanford. exercises/tier3_montecarlo.py

As soluções de referência usam a extensão Python (primeiro maturin develop --features python). Executado a partir da raiz do repositório, tier2_sweep.py imprime o holdover do relógio atómico à escala de chip a descer de 2610 s com uma especificação de 20 ns para 1140 s a 5 ns.

Quer dados novos?#

Os números de destaque destes tutoriais correm inteiramente a partir de cenários que já estão no repositório. Nada é descarregado, o que os mantém reproduzíveis e seguros para executar em integração contínua (CI). Para os exercícios de “alargar” pode obter dados em direto:

  • Elementos de duas linhas (TLE) do GPS (atualizar a constelação de órbita): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, conjuntos de elementos em texto simples de 3 linhas (nome + linha 1 + linha 2). Auxiliar: scripts/fetch_tles.sh. Dados abertos (catálogo do 18th Space Defense Squadron da US Space Force, redistribuído pelo Celestrak, Dr. T. S. Kelso).
  • Referência independente de verificação do SGP4 (Simplified General Perturbations 4) (já incorporada, não descarregar de novo): vetores de teste AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 “Revisiting Spacetrack Report #3”, https://celestrak.org/publications/AIAA/2006-6753/, usados por tests/sgp4_verification.rs; ver docs/SGP4-VALIDATION.md.
  • Referência independente das relações de estabilidade de relógio: NIST (National Institute of Standards and Technology) Special Publication 1065 (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, as relações σ_y(τ)↔fase por trás do Tutorial 2.