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

Primeiros passosEditar no GitHubFonte: docs/tutorials/README.md

Tutoriais

Exercícios práticos resolvidos que levam você de “executar um cenário fornecido” a “quantificar e defender um resultado”. Todo número citado nos três tutoriais é uma saída real do mecanismo, ancorada em uma referência independente externa (não circular) de autoridade reconhecida, e fixado por um teste de integração (tests/tutorials.rs), de modo que um tutorial nunca pode se afastar em silêncio do que o mecanismo realmente faz. Se um tutorial diz que o relógio óptico mantém 6600 s, o teste derruba o build no dia em que isso deixar de ser verdade.

O Kshana é um simulador de posicionamento, navegação e temporização (PNT). Os tutoriais usam algumas outras abreviações, cada uma explicada onde aparece pela primeira vez: GNSS (Global Navigation Satellite System), GPS (Global Positioning System), CLI (interface de linha de comando) e TOML (Tom's Obvious Minimal Language, o formato de arquivo de cenário).

Novo no projeto? Leia antes o guia de conceitos e o glossário e depois volte aqui.

Os três exemplos práticos#

# Tutorial O que você aprende Tipo de cenário Dificuldade ~Tempo
1 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 de posição (PDOP) e a exatidão de posição, e exportar onde os satélites realmente estão (formato de órbita precisa SP3) orbit iniciante 15 min
2 Holdover de relógio: por quanto tempo você consegue seguir sozinho executar um holdover de relógio sem GNSS, ler a figura de mérito de temporização e entender a lei de crescimento √(q_wf·T) por trás dela clock iniciante 20 min
3 Resiliência quântica contra clássica do GNSS o capstone: um detector de spoofing (spoof) e uma suíte PNT fundida completa (hybrid), e como ler segurança / integridade / navegação por estima em conjunto spoof + hybrid intermediário 35 min

Notebooks#

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

Notebook O que você aprende
Confiança em embarcações e treinamento gerar um fluxo NMEA sintético de ponte com um evento roteirizado e depois 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 rota onde os dados de navegação pareceram degradados e quanto de uma rota eles afetam
Mapeamento de compliance e exportação para test-bench em quais linhas de referenciais públicos um conjunto de execuções fornece evidências em apoio de (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 é gravado)
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 enxerga sob a linha de horizonte de uma rua ou cais, seu DOP e elipse de erro, um céu datado a partir de conjuntos de elementos e um Monte Carlo com seed contra a covariância (MODELLED)

Como executar um tutorial#

Todo tutorial executa o mesmo cenário de três maneiras; escolha a que lhe convier. Todas chamam o mesmo mecanismo, portanto os números são idênticos (espelha a seção Uso do README).

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

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

cargo run -- compila a CLI a partir deste checkout. Com um binário instalado (cargo install kshana), o mesmo comando é kshana scenarios/orbit-sgp4-gps.toml. Sem um checkout, a maioria dos cenários fornecidos está embutida no binário: kshana example os lista (e nomeia os poucos que não estão embutidos, com o motivo), e kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml grava um: a cópia de scenarios/orbit-sgp4-gps.toml com que o binário foi compilado.

Python. Compile a extensão a partir deste checkout uma vez com maturin, dentro de um ambiente virtual ativo, e então 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 o wheel publicado. Ele pode estar defasado em relação a este checkout: json.loads(kshana.list_kinds()) informa quais tipos de cenário 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 mecanismo roda no cliente como WebAssembly.

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

Cenários didáticos anotados#

Para cada domínio de capacidade há um .toml bastante 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 nomeada e o resumo esperado de uma linha registrado como comentário # expected:. Os valores dos campos são idênticos aos do original no diretório scenarios/ de nível superior do repositório (tests/tutorials.rs compara o TOML interpretado), de modo que a saída documentada continua verdadeira. Os hashes de referência (golden) também ficam intocados: um comentário nunca altera o hash de um cenário.

Domínio Arquivo 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, monitoramento autônomo de integridade pelo receptor) 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 inercial por estima scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
Transferência de tempo scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
Domínio de medição do GNSS scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

O arquivo didático de segurança usa kind = "spoof" internamente: a figura de mérito de Segurança (1 − P_md, um menos a probabilidade de detecção perdida) é produzida pelo pacote spoof. O nome do arquivo segue a capacidade (segurança); o kind segue o pacote (spoof). O cabeçalho desse arquivo destaca isso.

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

O mecanismo despacha pelo kind do cenário. A tabela abaixo lista os tipos de cenário mais usados (os oito domínios de tutorial acima mais seus vizinhos mais próximos). Ela não é o conjunto completo: src/api.rs::list_scenario_kinds() devolve todos os 92 tipos de cenário embutidos. Essa função (exposta como list_kinds() nos bindings Python e WebAssembly (WASM), e como kshana kinds --json na linha de comando) é o catálogo autoritativo e sempre atual, e SCENARIOS.md é sua enumeração gerada, uma seção por tipo de cenário com os campos TOML obrigatórios e opcionais. tests/tutorials.rs::tutorial_scenarios_use_real_kinds garante que todo tipo de cenário que um tutorial documenta é um tipo de despacho real, de modo que nada nesta tabela pode nomear um tipo de cenário que não existe.

Tipo O que faz
clock Holdover de relógio contra a especificação; conjunto Monte-Carlo opcional (runs > 1).
inertial Navegação por estima inercial de 1-DOF (um grau de liberdade) durante uma interrupção de GNSS.
orbit Disponibilidade de 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 contra um conjunto de relays LunaNet.
timetransfer Transferência bidirecional de tempo/frequência óptica contra radiofrequência (RF).
hybrid Capstone de PNT híbrido: relógio + unidade de medição inercial (IMU) + auxílio por 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 estado de erro GNSS/INS (sistema de navegação inercial) com acoplamento fraco e forte.
gnss-sim Simulação de pseudodistância no domínio da medição (ionosfera Klobuchar, troposfera Saastamoinen/Niell) + RAIM.
jamming Jamming por orçamento de enlace: razão jammer-sinal (J/S) → densidade efetiva de portadora-ruído (C/N₀) → perda de sincronismo (loss of lock).
spoof Detector estocástico de spoofing de tempo (Neyman–Pearson / χ²₁) com probabilidades de falso alarme e de detecção perdida (P_fa/P_md) por Monte-Carlo.
sweep Varredura 1-D de estudo de compromissos sobre um parâmetro do pacote de relógio.
sweep-nd Varredura genérica N-D sobre qualquer pacote por meio de chaves TOML pontuadas / caminhos de métricas JSON.

Além dos tutoriais: capacidades mais novas#

Os três tutoriais ficam nos pacotes clássicos de relógio, órbita e segurança. O mecanismo cresceu muito além deles. Cada linha abaixo é um cenário fornecido que você pode executar 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 das figuras dos tutoriais, essas linhas são o registro de uma execução, não fixadas por tests/tutorials.rs: execute o cenário de novo para obter o valor atual. Os resultados declaram seu próprio escopo (a maioria traz um label), e a matriz de verificação declara quais capacidades são VALIDATED contra uma referência independente externa e quais são MODELLED.

Capacidade Cenário Tipo Primeira linha do resumo Ler mais
Espectro da 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 em uma é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ção em 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 em uma linha do tempo 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 MEO + LEO fundido 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 de 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 sob jamming, LEO carrega o usuário 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, telecom, veículos, Ártico scenarios/leo-vertical-rail-maritime.toml (e os demais arquivos leo-vertical-*) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
Holdover de telecom contra os limites de relógio G.8272 da ITU-T (União Internacional de Telecomunicações, Setor de Normalização das Telecomunicações) 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 é o padrão 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. Toda execução grava <scenario>.report.html e <scenario>.report.json (veja REPORTS.md). kshana --study <suite.toml> executa uma suíte de cenários em um .study.json e .study.html, por exemplo kshana --study scenarios/quantum-pnt-demonstrator.suite.toml.
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all> renderiza as séries temporais da execução, por exemplo --animate html em scenarios/orbit-sgp4-gps.toml grava orbit-sgp4-gps.animation.html. Um tipo de cenário sem eixo de tempo amostrado (como solar-system) é recusado com um erro; veja ANIMATION.md.
  • Exportações de interoperabilidade. --export <czml|kml|geojson|stk|sigmf|all|list> grava 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 informa quais formatos se aplicam a um cenário; o SigMF se aplica somente a spectrum. O pacote de órbita também exporta --export-sp3, --export-omm e --export-oem (mensagens de órbita do CCSDS, Consultative Committee for Space Data Systems). Veja INTEROP.md.

Exercícios graduados#

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

Nível Objetivo O que você 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 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 cair; ou use kind = "sweep"/"sweep-nd" para tabulá-lo. exercises/tier2_sweep.py
Nível 3 — quantificar e defender Monte-Carlo, faixas de confiança, reprodutibilidade e um nível de proteção Execute um conjunto de relógios (runs = N), leia a faixa [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 (maturin develop --features python primeiro). Executado a partir da raiz do repositório, tier2_sweep.py imprime o holdover do relógio atômico em escala de chip caindo de 2610 s com especificação de 20 ns para 1140 s a 5 ns.

Quer dados novos?#

Os números de destaque nestes tutoriais rodam inteiramente a partir de cenários já presentes no repositório. Nada é baixado, o que os mantém reprodutíveis e seguros para rodar em integração contínua (CI). Para os exercícios de “estenda”, você pode puxar dados ao vivo:

  • Elementos de duas linhas (TLEs) do GPS (atualizar a constelação de órbita): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, conjuntos de elementos de 3 linhas em texto simples (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á incluída, não baixe 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; veja docs/SGP4-VALIDATION.md.
  • Referência independente das relações de estabilidade de relógio: Publicação Especial 1065 do NIST (National Institute of Standards and Technology) (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.