Traducción automática, no revisada por un hablante nativo. El inglés es la referencia.

Primeros pasosEditar en GitHubFuente: docs/tutorials/README.md

Tutoriales

Ejemplos prácticos que le llevan de “ejecutar un escenario incluido” a “cuantificar y defender un resultado”. Cada número citado en los tres tutoriales es una salida real del motor, anclada a una referencia independiente externa de autoridad reconocida (no circular), y fijada por una prueba de integración (tests/tutorials.rs), de modo que un tutorial nunca puede desviarse en silencio de lo que el motor hace realmente. Si un tutorial dice que el reloj óptico mantiene 6600 s, la prueba hace fallar la compilación el día en que eso deje de ser cierto.

Kshana es un simulador de posicionamiento, navegación y temporización (PNT). Los tutoriales usan algunas abreviaturas más, cada una desarrollada donde aparece por primera vez: GNSS (Sistema Global de Navegación por Satélite), GPS (Sistema de Posicionamiento Global), CLI (interfaz de línea de comandos) y TOML (Tom's Obvious Minimal Language, el formato de archivo de escenario).

¿Es nuevo en el proyecto? Lea primero la introducción a los conceptos y el glosario, y luego vuelva aquí.

Los tres ejemplos prácticos#

# Tutorial Qué se aprende Tipo de escenario Dificultad ~Tiempo
1 Mi primera órbita: dónde están los satélites GPS propagar una constelación GPS real, leer la disponibilidad, la dilución de la precisión de la posición (PDOP) y la exactitud de posición, y exportar dónde están realmente los satélites (formato de órbita precisa SP3) orbit principiante 15 min
2 Holdover del reloj: cuánto tiempo puede mantenerse a la deriva ejecutar un holdover de reloj sin GNSS, leer la cifra de mérito de temporización y comprender la ley de crecimiento √(q_wf·T) que hay detrás clock principiante 20 min
3 Resiliencia GNSS cuántica frente a clásica el colofón: un detector de suplantación (spoof) y un conjunto PNT fusionado completo (hybrid), y cómo leer juntas la seguridad, la integridad y la navegación a estima spoof + hybrid intermedia 35 min

Cuadernos#

Los notebooks de Jupyter ejecutables, con datos sintéticos y conjuntos de elementos públicos conservados solo en el repositorio, están en notebooks/:

Notebook Qué se aprende
Confianza y entrenamiento de buques generar un flujo NMEA sintético de puente con un suceso programado y luego puntuarlo con los monitores de confianza de buques (de carácter consultivo, no un equipo de navegación homologado)
Mapa de interferencia y exposición de la ruta dónde los datos de navegación han parecido degradados y qué parte de una ruta afectan
Correspondencia de compliance y exportación de test-bench a qué filas de marcos públicos aporta evidencias a favor un conjunto de ejecuciones (nunca que un marco se satisfaga), y el movimiento y los sucesos de un escenario exportados como texto para un simulador GNSS de laboratorio (no se escribe ninguna señal)
GDOP cuántico frente a clásico la misma geometría de constelación con un sensor cuántico y uno clásico, comparados por dilución de la precisión
Geometría del cielo bajo un perfil del horizonte los satélites que ve un emplazamiento bajo el perfil del horizonte de una calle o un muelle, su DOP y su elipse de error, un cielo fechado a partir de conjuntos de elementos y un Monte Carlo con semilla frente a la covarianza (MODELLED)

Cómo ejecutar un tutorial#

Cada tutorial ejecuta el mismo escenario de tres maneras; elija la que le convenga. Todas llaman al único motor, de modo que los números son idénticos (refleja la sección Uso del README).

Línea de comandos. La CLI despacha según el campo kind del escenario y escribe <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html y <scenario>.report.json junto a la entrada (JSON es JavaScript Object Notation, SVG Scalable Vector Graphics, HTML HyperText Markup Language). Algunos tipos de escenario publican además una tabla de reproducibilidad como <scenario>.table.csv (valores separados por comas): realtime-frame-eop, lunar-time-budget, lunar-jamming, leo-navmsg, telecom-timing y moonlight-service-volume cuando se fija un sitio de exportación. Ninguno de los tres tutoriales es uno de ellos, de modo que no verá ese archivo aquí.

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

cargo run -- compila la CLI a partir de esta copia de trabajo. Con un binario instalado (cargo install kshana), el mismo comando es kshana scenarios/orbit-sgp4-gps.toml. Sin una copia de trabajo, la mayoría de los escenarios incluidos vienen en el binario: kshana example los enumera (y nombra los pocos que no vienen incluidos, con el motivo), y kshana example orbit-sgp4-gps > orbit-sgp4-gps.toml escribe uno: la copia de scenarios/orbit-sgp4-gps.toml con la que se compiló el binario.

Python. Compile la extensión a partir de esta copia de trabajo una vez con maturin, dentro de un entorno virtual activo, y luego llame a 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 en su lugar la rueda publicada. Puede ir por detrás de esta copia de trabajo: json.loads(kshana.list_kinds()) le indica qué tipos de escenario tiene su compilación.

Playground del navegador. Sin instalación: abra el Studio, elija un escenario, edite los parámetros y lea el resultado. No se sube nada; el motor se ejecuta en el cliente como WebAssembly.

Los tutoriales citan la CLI, pero cada comando tiene el equivalente de Python y del playground indicado arriba. Cada resultado es reproducible a partir de scenario + seed + engine version: ejecútelo dos veces y obtendrá una salida idéntica bit a bit.

Escenarios didácticos anotados#

Para cada dominio de capacidad hay un .toml muy comentado en scenarios/: una copia didáctica de un escenario canónico con cada campo explicado en línea, la referencia independiente citada indicada por nombre y el resumen esperado de una línea registrado como un comentario # expected:. Los valores de los campos son idénticos a los del original en el directorio scenarios/ de nivel superior del repositorio (tests/tutorials.rs compara el TOML analizado), de modo que la salida documentada sigue siendo cierta. Los hashes de referencia tampoco se tocan: un comentario nunca cambia el hash de un escenario.

Dominio Archivo didáctico Tipo Derivado de
Holdover del reloj scenarios/clock.toml clock scenarios/clock-holdover.toml
Órbita y geometría scenarios/orbit.toml orbit scenarios/orbit-sgp4-gps.toml
Integridad (RAIM, monitorización autónoma de integridad del receptor) scenarios/integrity.toml integrity scenarios/integrity-raim.toml
Seguridad (spoofing) scenarios/security.toml spoof scenarios/spoof-attack.toml
PNT híbrido scenarios/hybrid.toml hybrid scenarios/hybrid-pnt.toml
Navegación inercial a estima scenarios/inertial.toml inertial scenarios/imu-deadreckoning.toml
Transferencia de tiempo scenarios/timetransfer.toml timetransfer scenarios/timetransfer.toml
Dominio de medición GNSS scenarios/gnss-sim.toml gnss-sim scenarios/gnss-sim-raim.toml

El archivo didáctico de seguridad usa kind = "spoof" en su interior: la cifra de mérito de seguridad (1 − P_md, uno menos la probabilidad de detección fallida) la produce el paquete spoof. El nombre del archivo sigue a la capacidad (seguridad), mientras que el kind sigue al paquete (spoof). La cabecera de ese archivo lo señala.

El catálogo completo de tipos de escenario#

El motor despacha según el kind del escenario. La tabla siguiente enumera los tipos de escenario de uso más habitual (los ocho dominios de los tutoriales anteriores y sus vecinos más próximos). No es el conjunto completo: src/api.rs::list_scenario_kinds() devuelve los 92 tipos de escenario integrados. Esa función (expuesta como list_kinds() en los enlaces de Python y de WebAssembly (WASM), y como kshana kinds --json en la línea de comandos) es el catálogo de referencia, siempre actualizado, y SCENARIOS.md es su enumeración generada, con una sección por tipo y los campos TOML obligatorios y opcionales. tests/tutorials.rs::tutorial_scenarios_use_real_kinds exige que todo tipo de escenario que documenta un tutorial sea un tipo de despacho real, de modo que nada de esta tabla puede nombrar un tipo de escenario que no exista.

Tipo Qué hace
clock Holdover del reloj frente a la especificación; conjunto Monte Carlo opcional (runs > 1).
inertial Navegación inercial a estima de 1-DOF (un grado de libertad) durante una interrupción de GNSS.
orbit Disponibilidad de GNSS y dilución de la precisión (DOP) a partir de una constelación (Walker / elementos de dos líneas / RINEX, el formato Receiver Independent Exchange).
integrity Instantánea / separación de soluciones / ARAIM (RAIM avanzado) con niveles de protección horizontal y vertical (HPL/VPL) y diagrama de Stanford.
lunar-integrity Paso de nivel de protección ARAIM en el polo sur lunar frente a un conjunto de relés LunaNet.
timetransfer Transferencia bidireccional de tiempo/frecuencia óptica frente a de radiofrecuencia (RF).
hybrid Colofón de PNT híbrido: reloj + unidad de medida inercial (IMU) + ayuda de transferencia de tiempo.
fusion PNT con fusión de sensores mediante un filtro de Kalman conjunto sobre las mismas entradas híbridas.
gnss-ins Filtro de Kalman extendido de estado de error para GNSS/INS (sistema de navegación inercial) débil y fuertemente acoplado.
gnss-sim Simulación de pseudodistancias en el dominio de la medida (ionosfera de Klobuchar, troposfera de Saastamoinen/Niell) + RAIM.
jamming Interferencia (jamming) con balance de enlace: relación interferencia/señal (J/S) → densidad efectiva de portadora a ruido (C/N₀) → pérdida de enganche.
spoof Detector estocástico de suplantación de hora (Neyman–Pearson / χ²₁) con probabilidades de falsa alarma y de detección fallida por Monte Carlo (P_fa/P_md).
sweep Barrido 1-D de estudio de compromisos sobre un parámetro del paquete de relojes.
sweep-nd Barrido genérico N-D sobre cualquier paquete mediante claves TOML con puntos o rutas de métricas JSON.

Más allá de los tutoriales: capacidades más recientes#

Los tres tutoriales se quedan en los paquetes clásicos de reloj, órbita y seguridad. El motor ha crecido mucho más allá de ellos. Cada fila siguiente es un escenario incluido que puede ejecutar tal cual (cargo run -- <file> o kshana <file>); el resumen es la primera línea que kshana 0.35.0 imprimió para él el 2026-10-10. A diferencia de las cifras de los tutoriales, estas líneas son el registro de una ejecución, no están fijadas por tests/tutorials.rs: vuelva a ejecutar el escenario para obtener el valor actual. Los resultados declaran su propio alcance (la mayoría llevan un label), y la matriz de verificación indica qué capacidades están VALIDATED frente a una referencia independiente externa y cuáles están MODELLED.

Capacidad Escenario Tipo Primera línea del resumen Leer más
Espectro de banda L y cascada de interferencia (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
El sistema solar en una é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
Posicionamiento alrededor de otro cuerpo scenarios/europa-surface-pnt.toml body-pnt Positioning around Europa — surface user, 12 relays at 4500 km, 171 epochs SCENARIOS.md
Diseño de constelaciones a gran 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
Campañas: tipos de escenario encadenados en una línea temporal 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
Un sistema LEO-PNT de extremo a extremo scenarios/leo-pnt-end-to-end.toml leo-pnt-chain LEO-PNT end to end, generic 1080 km constellation LEO-PNT.md
Posicionamiento fusionado 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
Señales LEO, pasos y mensajes de navegación 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 (el paso) LEO-SIGNAL.md, LEO-PASS.md, LEO-NAVMSG.md
Convergencia de PPP con una capa LEO; posicionamiento 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
Resiliencia: GNSS interferido, LEO sostiene al usuario 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
Verticales: ferrocarril, marítimo, telecomunicaciones, vehículos, Ártico scenarios/leo-vertical-rail-maritime.toml (y los demás archivos leo-vertical-*) campaign campaign 49575d27b696 | Railway and maritime with a LEO layer | chain: 3 phases over 2520 s, … CAMPAIGNS.md
Holdover de telecomunicaciones frente a los límites de reloj de la ITU-T (Unión Internacional de Telecomunicaciones, Sector de Normalización de las Telecomunicaciones) 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 es órbita terrestre baja y MEO órbita terrestre media; PVT es posición, velocidad y tiempo; PPP es posicionamiento preciso de punto; 5G es el estándar móvil de quinta generación; TDB es el Tiempo Dinámico Baricéntrico; JD es la Fecha Juliana; TE es error de tiempo.

La CLI añade tres salidas a cualquier ejecución:

  • Informes. Cada ejecución escribe <scenario>.report.html y <scenario>.report.json (véase REPORTS.md). kshana --study <suite.toml> ejecuta una suite de escenarios en un único .study.json y .study.html, por ejemplo kshana --study scenarios/quantum-pnt-demonstrator.suite.toml.
  • Animation. kshana <scenario.toml> --animate <svg|html|frames|all> representa las series temporales de la ejecución; por ejemplo, --animate html sobre scenarios/orbit-sgp4-gps.toml escribe orbit-sgp4-gps.animation.html. Un tipo de escenario sin eje de tiempo muestreado (como solar-system) se rechaza con un error; véase ANIMATION.md.
  • Exportaciones de interoperabilidad. --export <czml|kml|geojson|stk|sigmf|all|list> escribe el resultado para otras herramientas: CZML (Cesium Language), KML (Keyhole Markup Language, para Google Earth), GeoJSON (JSON geográfico), unas efemérides STK (Systems Tool Kit) o una grabación SigMF (Signal Metadata Format). --export list indica qué formatos se aplican a un escenario; SigMF se aplica solo a spectrum. El paquete de órbita también exporta --export-sp3, --export-omm y --export-oem (mensajes de órbita de CCSDS, el Comité Consultivo para Sistemas de Datos Espaciales). Véase INTEROP.md.

Ejercicios graduados#

Recorra la escalera. Cada nivel es más difícil y más defendible que el anterior; las soluciones de referencia están en exercises/.

Nivel Objetivo Qué hace Solución de referencia
Nivel 1 — ejecutar y leer ejecutar sin cambios un escenario incluido y leer una cifra de mérito Ejecute scenarios/clock-holdover.toml; imprima el holdover_s cuántico frente al clásico. CLI, playground o una llamada de Python de una línea. exercises/tier1_run.py
Nivel 2 — editar y barrer cambiar un parámetro y observar un efecto monótono Reduzca la especificación del reloj (threshold_ns) o alargue la interrupción y observe cómo cae el holdover; o use kind = "sweep"/"sweep-nd" para tabularlo. exercises/tier2_sweep.py
Nivel 3 — cuantificar y defender Monte Carlo, bandas de confianza, reproducibilidad y un nivel de protección Ejecute un conjunto de relojes (runs = N), lea la banda [p05–p95], confirme que dos ejecuciones dan un scenario_hash idéntico y lea un resultado de integridad / diagrama de Stanford. exercises/tier3_montecarlo.py

Las soluciones de referencia usan la extensión de Python (antes, maturin develop --features python). Ejecutado desde la raíz del repositorio, tier2_sweep.py imprime el holdover del reloj atómico a escala de chip cayendo de 2610 s con una especificación de 20 ns a 1140 s con 5 ns.

¿Quiere datos nuevos?#

Las cifras principales de estos tutoriales se ejecutan por completo a partir de escenarios que ya están en el repositorio. No se descarga nada, lo que las mantiene reproducibles y seguras de ejecutar en integración continua (CI). Para los ejercicios de “ampliación” puede obtener datos en vivo:

  • Elementos de dos líneas (TLE) de GPS (actualizan la constelación de órbita): https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle, conjuntos de elementos de 3 líneas en texto plano (nombre + línea 1 + línea 2). Auxiliar: scripts/fetch_tles.sh. Datos abiertos (catálogo del 18.º Escuadrón de Defensa Espacial de la Fuerza Espacial de EE. UU., redistribuido por Celestrak, Dr. T. S. Kelso).
  • Referencia independiente de verificación de SGP4 (Simplified General Perturbations 4) (ya incorporada, no la vuelva a descargar): vectores de prueba de 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; véase docs/SGP4-VALIDATION.md.
  • Referencia independiente de las relaciones de estabilidad de reloj: Publicación Especial 1065 del NIST (National Institute of Standards and Technology) (Riley, Handbook of Frequency Stability Analysis), https://tf.nist.gov/general/pdf/2220.pdf, las relaciones entre σ_y(τ) y la fase en que se basa el Tutorial 2.