Mapa de capacidades: qué hace Kshana, qué hace en parte y qué no hace
Kshana es un motor de evidencias de rendimiento y resiliencia PNT (posicionamiento, navegación y temporización), no un conjunto completo de herramientas de sistemas espaciales. Se centra en la temporización y el holdover, su dominio mejor validado (véase POSITIONING.md). Esta página es el mapa honesto del alcance: para cada área de capacidad que podría comprobar una persona revisora de adquisiciones o de investigación, indica el estado, lo que existe realmente en el código, lo que falta y dónde se sitúa en la hoja de ruta. El estado es uno de:
- full: implementado de extremo a extremo y validado hasta el nivel indicado en la fila;
- partial: un modelo real pero limitado (alcance acotado explícitamente más abajo);
- none: no modelado (fuera de alcance hoy).
Estos tres son los únicos valores que toma la columna de estado. Califican la madurez de la capacidad, que es un eje distinto de la calificación VALIDATED / MODELLED / PARTNER de VERIFICATION-MATRIX.md: esta última califica la procedencia de la evidencia, fila por fila, y se comprueba por máquina a partir de src/verification.rs.
Nada de lo que figura aquí es aspiracional: "partial" nunca significa "casi terminado", significa "esto y nada más". Véanse también VALIDATION.md, INTEGRITY.md, QUANTUM-MODELS.md y el registro de cierre de afirmaciones excesivas CLAIMS-VS-REALITY.md (cada afirmación excesiva histórica, cómo se resolvió y una protección de CI (integración continua) que mantiene esa resolución).
PNT básico (donde Kshana realmente actúa)#
| Capacidad | Estado | Qué existe | Qué falta | Hoja de ruta |
|---|---|---|---|---|
| Determinación y propagación de órbita | parcial | SGP4/SDP4 sin dependencias (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4), validado hasta 4,12 mm frente a los 666 vectores AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 (posición y velocidad, esta última hasta 1 mm/s); kepleriano analítico + secular J2; velocidad inercial expuesta y presentada de extremo a extremo mediante el escenario ephemeris ejecutable (src/ephemeris.rs, accesible desde CLI/Python/WASM/MCP (CLI: interfaz de línea de comandos; WASM: WebAssembly; MCP: Model Context Protocol)): por paso emite el estado TEME (ecuador verdadero, equinoccio medio) y GCRS (Geocentric Celestial Reference System) (posición + velocidad), la posición ITRF/ECEF (ITRF: International Terrestrial Reference Frame; ECEF: centrado en la Tierra y fijo a ella), la traza en tierra del subsatélite en WGS-84 (WGS: World Geodetic System) (lat/lon/alt), y acimut/elevación/alcance de estación + tasa de alcance/Doppler (la tasa radial de alcance coincide con la derivada verdadera de la posición, sin ruido de JD (JD: fecha juliana), hasta 6e-9 m/s), y mediante la exportación de efemérides con velocidad en OEM (Orbit Ephemeris Message) de CCSDS (Consultative Committee for Space Data Systems) (--export-oem). Un propagador numérico (de Cowell) (src/propagator.rs) integra un modelo de fuerzas de gravedad zonal configurable, con el campo zonal terrestre completo hasta el grado 6 (forces::zonal_accel, el J2..J6 publicado de EGM-96 (EGM: Earth Gravitational Model)), con un integrador adaptativo a elegir (RK4 (Runge–Kutta de cuarto orden) con doblado de paso o el par embebido Dormand–Prince RK5(4) (integrate_dopri / propagate_dopri, una estimación de error embebida más barata, de 7 evaluaciones, que supera la misma puerta de Kepler y coincide con la ruta RK4 hasta <1 m en una órbita J2..J6)), contrastado con una verdad analítica más sólida que un contraste numérico entre herramientas: la órbita sin perturbar reproduce la solución kepleriana exacta de variables universales con precisión submétrica en 24 h (una puerta más estricta que la del hito, "frente a la referencia < 10 m"), la energía y el momento angular se conservan hasta ~1e-9 relativo, la regresión nodal por J2 coincide con la tasa secular de forma cerrada según la teoría de primer orden, se verifica que la aceleración zonal es el gradiente exacto de su propio potencial (y que se reduce a la forma cerrada de J2 validada con los 666 vectores), y solve_kepler_checked devuelve Err en lugar de una respuesta errónea cuando Newton no converge (p. ej., cerca del perigeo con e = 0,999). La gravedad de tercer cuerpo (Sol y Luna) dependiente de la época está integrada en el integrador dependiente del tiempo (ForceModel::third_body / accel_at, con las efemérides de baja precisión de Sol y Luna de Montenbruck y Gill de src/ephem.rs, sin necesidad de un kernel DE/SPK (DE: Development Ephemeris; SPK: kernel de efemérides planetarias)): cada evaluación del lado derecho (RHS) muestrea las posiciones de los perturbadores en la época avanzada epoch_jd_tt + t/86400, de modo que el Sol y la Luna se mueven por sus órbitas durante la integración. Se verifica que la perturbación es el gradiente exacto de su potencial perturbador, que se anula en el geocentro y que tiene las magnitudes de LEO (órbita terrestre baja) de los manuales (~5e-7 m/s² el Sol, ~1.1e-6 m/s² la Luna); las efemérides del Sol alcanzan anclas J2000 derivadas a mano (distancia al perihelio, declinación del solsticio de ~−23°, movimiento de ~1°/día) y las de la Luna su envolvente de perigeo/apogeo, una distancia media de ~384.400 km, una cota de inclinación de ≤ 5,3° y el retorno de dirección al mes sidéreo; y se prueba que la conexión con la integración es exacta bit a bit (el término RHS es igual a third_body_accel en la posición muestreada en t = 0 y t = 1 día), con un desplazamiento de época de un cuarto de año que da una trayectoria distinta. La presión de radiación solar (SRP) usa el mismo RHS dependiente de la época (forces::srp_accel / ForceModel::solar_radiation): el modelo de bola de cañón ν·P☉·cᵣ·(A/m)·(AU/d)²·d̂ con un factor de eclipse de umbra y penumbra forces::conical_shadow (ν suave ∈ [0.1], verificado para decrecer por una penumbra monótona que se extiende más allá del cilindro de umbra), verificado frente a la presión de 1 AU (AU: unidad astronómica) de los manuales (≈ 4.54e-6 N/m²), la magnitud de LEO de ~1.36e-7 m/s² que empuja alejándose del Sol, la caída con el inverso del cuadrado (al duplicar la distancia al Sol queda en la cuarta parte), una aceleración exactamente nula en el cilindro de umbra y un desplazamiento propagado que escala ~linealmente con A/m. La resistencia atmosférica es el primer término que depende de la velocidad (forces::drag_accel / ForceModel::drag + el nuevo RHS con accel_rv / paso de velocidad): resistencia cuadrática −½·ρ(h)·(C_D·A/m)·|v_rel|·v_rel frente a la atmósfera en corrotación v_rel = v − ωₑ ẑ × r, con ρ el forces::atmospheric_density exponencial por tramos de Vallado, verificada por el ancla de nivel del mar de 1,225 kg/m³, una caída de LEO estrictamente monótona con una altura de escala física de ~58 km, la magnitud de resistencia de ~2e-6 m/s² que se opone a la velocidad relativa y la firma de disipación (una órbita de 300 km pierde energía específica de forma monótona y su semieje mayor decae unos ~km/día acotados, mientras que la órbita en el vacío conserva la energía). La corrección relativista postnewtoniana (de Schwarzschild) es el segundo término que depende de la velocidad (forces::relativistic_accel / ForceModel::relativity): la forma β = γ = 1 de IERS (International Earth Rotation and Reference Systems Service) a = (μ/c²r³)·{[4μ/r − v²]·r + 4(r·v)·v}, el principal responsable del avance relativista del perigeo, verificada frente a su valor circular de forma cerrada 3μ²/(c²r³)·r̂ (radial, hacia fuera), su cociente de LEO de manual ≈1.9e-9 respecto al problema de dos cuerpos, la forma simplificada a mano de velocidad radial y la firma conservativa (perturba la órbita pero mantiene el semieje mayor por debajo de un metro al día, lo contrario estructural de la resistencia). El término de arrastre de marco de Lense–Thirring (forces::lense_thirring_accel / ForceModel::lense_thirring, IERS 2010 §10) es la corrección gravitomagnética más allá de Schwarzschild: opcional, de ~1–2 órdenes de magnitud por debajo de este en LEO, verificado para anularse sin rotación terrestre y para quedar por debajo de la magnitud de Schwarzschild. La determinación de órbita (OD, src/orbit_determination.rs) cierra el lazo desde las observaciones hasta un estado: un corrector por lotes de Gauss–Newton (src/batch_ls.rs) lleva un [r, v] candidato al mejor ajuste de los alcances de estación terrestre propagados a lo largo del arco (submétrico / mm·s⁻¹ con alcances sin ruido; ~2 m con un residuo posterior al ajuste en el nivel de ruido de 5 m, la firma de un ajuste de mínimos cuadrados coherente), con una variante recursiva secuencial sobre el filtro unscented |
El modelo de fuerzas de Cowell por defecto lleva solo el campo zonal: el campo teseral de alto grado de EGM2008 (Earth Gravitational Model 2008) (src/gravity_sh.rs, grado y orden 70, con un cargador from_gfc para archivos ICGEM (International Centre for Global Earth Models)) se compone únicamente en el motor de ajuste de efemérides preciso (src/precise_od.rs; véase AGENCY-ORBIT-VALIDATION.md); la densidad de resistencia atmosférica es la exponencial por tramos de Vallado estática (independiente de la actividad solar), no NRLMSISE-00 (el modelo de atmósfera extendido de espectrómetro de masas y radar de dispersión incoherente del Naval Research Laboratory; la cláusula de densidad termosférica < 5 %); la SRP es el modelo de bola de cañón con una sombra geométrica de umbra y penumbra cónicas (sin oscurecimiento del limbo solar, sin sombra de Tierra achatada, sin forma ni actitud del satélite); la relatividad abarca los términos de Schwarzschild y de Lense–Thirring (arrastre de marco), ambos opcionales, pero sin ajuste de parámetros PPN (PPN: posnewtoniano parametrizado); el tercer cuerpo y la SRP usan las efemérides de baja precisión (~0,005° el Sol, ~0,3° la Luna), no la exactitud de un kernel DE/SPK. Los niveles conservativos del modelo de fuerzas (dos cuerpos → J2–J6 → Sol/Luna → SRP) están VALIDATED frente a Orekit 12,2 (peor caso de 0,08 m en 24 h, tests/numerical_cowell_propagator_reference.rs), y la determinación de órbita por lotes y secuencial está VALIDATED frente a los estimadores de Orekit 12,2 (tests/batch_sequential_orbit_determination_reference.rs); el nivel de resistencia atmosférica y la fidelidad absoluta de las entradas de efemérides y densidad siguen siendo MODELLED; no hay contraste con GMAT (General Mission Analysis Tool) |
gravedad teseral en el modelo de Cowell por defecto + resistencia atmosférica NRLMSISE-00 + oscurecimiento del limbo solar + efemérides de grado DE + validación cruzada con GMAT + mediciones de tasa de alcance y ángulo en OD y STM analítica (matriz de transición de estado): P2+ |
| Sistemas de tiempo | parcial | src/timescales.rs: API de fecha juliana (civil↔JD, MJD (fecha juliana modificada)), UTC↔TAI (UTC: Tiempo Universal Coordinado; TAI: Tiempo Atómico Internacional) mediante la tabla completa de segundos intercalares de IERS (10→37 s, 1972→2017), TAI→TT (TT: Tiempo Terrestre), UT1 (Tiempo Universal 1, el tiempo de rotación terrestre) mediante DUT1 (el tiempo de rotación terrestre menos el Tiempo Universal Coordinado), y el ángulo de rotación terrestre de IAU-2000 (IAU: Unión Astronómica Internacional) (ERA validado bit a bit frente al vector eraEra00 de SOFA (Standards of Fundamental Astronomy)). La aproximación DUT1≈0 de la ruta de SGP4 está documentada explícitamente en el punto de llamada gstime (un error de GMST (tiempo sidéreo medio de Greenwich) de ≤ ~13″, muy por debajo del propio error de modelo de SGP4), y el escenario ephemeris admite parámetros explícitos dut1_s/xp_arcsec/yp_arcsec o una serie IERS real finals2000A incorporada (eop_finals2000a / kshana --eop <file>, interpolada con la misma EopSeries que usa precise_od), de modo que la traza en tierra se reduce con el UT1 y el movimiento polar reales de IERS, y no solo con los escalares nominales |
Las rutas de órbita terrestre siguen usando una JD de un solo f64 (resolución de ~50 µs hacia 2020; este, y no el algoritmo, es el límite de un contraste por diferencias finitas); existe una JD en dos partes (timescales::TwoPartJd, usada por las rutas radiométrica, CCSDS-TDM, de simulador de segmento terreno y de sistema solar, y src/jd2.rs Jd2) que se aplica en SGP4 (Sgp4::propagate_at(Jd2)), la predicción de pasos, la geometría y los diseños Walker (validada frente a SOFA, tests/jd2_sofa_time_oracle.rs), y en la rotación terrestre de la ruta de órbita (jd2::gmst82, cio::gcrs_to_itrs_matrix_jd2, orbit::Propagator::position_in_frame_jd2, el two_part_jd opcional del escenario de efemérides; VALIDATED frente a ERFA, tests/jd2_earth_rotation_erfa_oracle.rs), con conversiones sin pérdida entre Jd2 y TwoPartJd; las rutas de órbita terrestre por defecto mantienen la fecha de un solo f64 salvo que se establezca two_part_jd, y la época del modelo de fuerzas de Cowell sigue siendo de un solo f64 a propósito (su error analítico de Sol y Luna eclipsa un redondeo de 40 µs); el UTC de segundo elástico anterior a 1972 (1960–1971) se modela en la ruta en dos partes (jd2, timescales::tai_minus_utc_on_date, VALIDATED frente a ERFA, tests/jd2_pre1972_sofa_oracle.rs), pero timescales::tai_minus_utc de un solo f64 sigue fijando 10 s antes de 1972; un predictor de orientación terrestre por mínimos cuadrados + autorregresivo (src/eop_ls_ar.rs, comparado con el Boletín A de IERS como hallazgo) puede ahora extender una serie EOP más allá de su última fila (EopSeries::with_ls_ar_prediction, opcional; tests/eop_prediction_beyond_table.rs), de modo que los argumentos de marco posteriores a la tabla siguen el pronóstico en lugar de quedar fijados; la serie por defecto sigue fijándose y todavía ninguna clave de escenario activa la predicción |
hecho (base); JD en dos partes a través de la rotación terrestre en la ruta de órbita: hecho (opcional en el escenario de efemérides) ; predicción de EOP más allá de la tabla: hecho (biblioteca, opcional); UTC anterior a 1972 en la ruta en dos partes: hecho |
| Marcos de referencia | full | src/frames.rs: TEME↔ECEF basado en GMST, geodésicas WGS-84↔ECEF (exacta + inversa iterativa, con precisión de máquina a todas las altitudes) y un observador geodésico de estación terrestre (acimut/elevación/alcance); precesión IAU 2006 (src/precession.rs: los ángulos de Fukushima–Williams (γ̄, φ̄, ψ̄, ε̄_A) + la matriz de sesgo y precesión GCRS↔media de la fecha); nutación IAU 2000A/2000B + cadena TEME→GCRS completa (src/nutation.rs: la serie IAU 2000A completa, con 678 términos lunisolares + 687 planetarios, nutation_iau2000a / nutation_matrix_2000a, tabla generada por máquina a partir de la referencia nut00a de ERFA (Essential Routines for Fundamental Astronomy) mediante tools/gen_nut00a.py, junto a la serie 2000B de 77 términos, los argumentos de Delaunay, la matriz de nutación iauNumat de SOFA, la ecuación de los equinoccios y teme_to_gcrs(r, v, jd_tt) mediante TEME→TOD→MOD→GCRS (verdadero de la fecha, medio de la fecha); ambas series validadas bit a bit frente a los vectores de referencia nut00a/nut00b de SOFA/ERFA, Δψ/Δε hasta 1e-13 rad); movimiento polar de IERS PEF→ITRF (pseudo fijo a la Tierra a terrestre) (teme_to_itrf / polar_motion_matrix, iauPom00 de SOFA, x_p/y_p suministrados por quien llama; un efecto de decenas de metros al radio orbital); reducción IAU 2006/2000A basada en CIO (CIO: Origen Intermedio Celeste) (src/cio.rs: la cadena GCRS↔CIRS↔ITRS sin equinoccio (CIRS: Sistema de Referencia Intermedio Celeste; ITRS: Sistema Internacional de Referencia Terrestre), con el CIP (Polo Intermedio Celeste) X,Y a partir de la matriz NPB (nutación-precesión-sesgo) 2006/2000A, la serie del localizador del CIO s de 66 términos, gcrs_to_cirs_matrix, el ángulo de rotación terrestre y la gcrs_to_itrs_matrix completa, validada bit a bit frente a los vectores eraXys06a/eraC2ixys/eraEra00 de SOFA). Las transformaciones de extremo a extremo ahora están ancladas a un ejemplo resuelto de autoridad publicado, y no solo a la autoconsistencia: frente al estado de Vallado AIAA 2006-6753 (2004-04-06, con sus EOP (parámetros de orientación terrestre) de IERS; tests/frame_reference_vectors.rs), TEME→PEF coincide hasta 0,1 mm, TEME→ITRF hasta 0,6 mm, el GCRS→ITRS completo con CIO hasta 4 mm, y ECEF→geodésicas reproduce el ejemplo 3-3 de Vallado (lat/lon/alt) hasta el último dígito publicado. Toda la cadena es accesible al usuario mediante el escenario ephemeris (posición ITRF/ECEF + traza en tierra del subsatélite en WGS-84 en cada paso) |
La cadena TEME→GCRS por defecto usa 2000B (~1 mas, por debajo de su propia simplificación de rotación de marco de velocidad); la ruta < 0,1 mas 2000A completa está disponible mediante nutation_matrix_2000a, y la reducción rigurosa CIO (X, Y, s) está disponible mediante src/cio.rs. La ruta TEME heredada usa el GMST de IAU-1982 (convención de SGP4). El contraste numérico independiente con ANISE/SPICE (ANISE: Attitude, Navigation, Instrument, Spacecraft, Ephemeris, un conjunto de herramientas de geometría planetaria en Rust puro; SPICE: Spacecraft, Planet, Instrument, C-matrix, Events) está entregado (xval/anise-frames/: gcrs_to_itrs_matrix frente al GCRF→ITRF93 de ANISE (GCRF: Marco de Referencia Celeste Geocéntrico; ITRF93: Marco de Referencia Terrestre Internacional 1993) en ocho épocas de 2020–2023, ≤ 0,86 m en el suelo, ≤ 3,6 m a la órbita de un sistema global de navegación por satélite (GNSS)); es un crate independiente fuera de las puertas de CI por defecto. precession_matrix y teme_to_gcrs_matrix también se contrastan directamente con ERFA en 40 épocas de 1950–2100, y la cadena CIO admite los desfases del polo celeste de IERS dX, dY (cio::gcrs_to_cirs_matrix_with_offsets; tests/frames_erfa_vector_oracle.rs); las rutas por defecto siguen despreciando dX, dY. La matriz de verificación califica esta fila como VALIDATED (vectores SOFA/ERFA + Vallado) |
TEME↔ECEF + geodésicas: hecho (verificado con Vallado); TEME→GCRS inercial: hecho (2000B + 2000A completa); ITRF con movimiento polar: hecho (verificado con Vallado); GCRS→ITRS con CIO: hecho (verificado con Vallado) |
| Temporización y frecuencia | parcial | Reloj de Kalman de dos estados con Q exacta de van Loan (NIST (National Institute of Standards and Technology) SP (Special Publication) 1065) con una actualización de covarianza estabilizada de Joseph (semidefinida positiva con cocientes Q/R extremos, comprobada por Cholesky en CI) y un monitor de salud de consistencia del filtro (src/filter_health.rs): una evaluación NIS/NEES de Monte Carlo (NIS: innovación normalizada al cuadrado; NEES: error de estimación normalizado al cuadrado) frente a bandas de confianza χ², presentada como filter_health en el JSON del resultado (JavaScript Object Notation) y como tarjeta verde/ámbar en el área de pruebas, con una prueba de barrido de desajuste Q/R que demuestra que el monitor pasa a incoherente cuando el ajuste es incorrecto (Bar-Shalom §5,4); estimadores ADEV (desviación de Allan), MDEV (desviación de Allan modificada), TDEV (desviación de tiempo), HDEV (desviación de Hadamard) solapados + intervalos de confianza basados en χ² con grados de libertad efectivos específicos del tipo de ruido (formas cerradas de la tabla 5 de NIST SP 1065 para WPM/FPM/WFM/FFM/RWFM (WPM: modulación de fase de ruido blanco; FPM: modulación de fase de ruido flicker; WFM: modulación de frecuencia de ruido blanco; FFM: modulación de frecuencia de ruido flicker; RWFM: modulación de frecuencia de paseo aleatorio), el conjunto que usa Stable32; la curva ADEV exportada identifica el tipo de ley de potencias del registro a partir de su pendiente de MDEV y adjunta una banda del 95% por τ — src/allan.rs), validados numéricamente frente a las desviaciones de referencia de Stable32 para el conjunto de datos canónico NBS14 hasta 1e-4 (tests/allan_reference.rs) y con los edf contrastados mediante un conjunto de Monte Carlo de FM (modulación de frecuencia) de ruido blanco; cifra de mérito (FoM) de holdover honesta y acotada por la rejilla; conjuntos de relojes; modelo de transferencia de tiempo bidireccional con cancelación de retardo recíproco + un límite de retardo diferencial no recíproco de FM de paseo aleatorio (src/timetransfer.rs, con la firma de Allan informada); una calculadora de holdover de reloj sin GNSS (src/holdover.rs) que expone el crecimiento del error de avance por inercia de van Loan en forma cerrada σ_x²(t) = q_wf·t + q_rw·t³/3 + q_drift·t⁵/20 como una inversión de holdover hasta el umbral orientada al usuario (cuánto tiempo funciona un reloj en libertad antes de que su error de temporización supere el presupuesto), con clases representativas de relojes cuánticos (red óptica/iones atrapados/iones de mercurio) — modelado, no validado externamente: contrastado con la recursión de covarianza multipaso clock_state, y declarado con honestidad que para un reloj muy estable el holdover hasta un umbral estricto está gobernado por el nivel de ruido rojo de tau largo supuesto, no por el ADEV citado (use niveles medidos para obtener una cifra defendible). Un nivel de protección de temporización condicional (src/tpl.rs) se apoya en la misma maquinaria de holdover para el caso de spoofing: una cota del error de tiempo no detectado dada una comprobación cruzada independiente, un límite de monitor de k-σ más la varianza de avance por inercia de van Loan sobre la latencia de detección más un tiempo hasta la alarma de CUSUM (suma acumulada), calibrado con un spoof real registrado (JammerTest 2024, Zenodo 15911589) y reproducible mediante cargo run --example tpl_jammertest. Composición modelada, condicionada a la detección: no existe una cota incondicional finita (una rampa suficientemente lenta elude a un único monitor asistido por reloj). El error máximo de intervalo de tiempo (MTIE) y el TDEV están VALIDATED frente a allantools (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs), y la inversión de la varianza de avance por inercia del holdover está VALIDATED frente a SciPy (tests/gnss_denied_clock_holdover_reference.rs); el tipo de escenario telecom-timing los aplica a las máscaras G.8272 / G.8272.1 / G.8273.2 / G.8271.1 de ITU-T (Sector de Normalización de las Telecomunicaciones de la Unión Internacional de Telecomunicaciones); véase TELECOM-TIMING.md |
edf completo con el algoritmo de Greenhall (las formas cerradas simples tienen sesgo acotado pero son más toscas que el BasicSum exacto) e identificación de mezclas de varios tipos de ruido | edf exacto + identificación de ruido mixto: P2 |
| Procesamiento GNSS / PNT | parcial | Una simulación de pseudodistancias en el dominio de la medición (tipo de escenario gnss-sim, src/gnss_sim.rs): por cada satélite visible sintetiza ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath y el Doppler en L1, con la ionosfera monofrecuencia de Klobuchar (IS-GPS-200 (IS: Interface Specification; GPS: Sistema de Posicionamiento Global) §20.3.3.5.2.5) y la troposfera cenital de Saastamoinen (Davis 1985) proyectada con la función de mapeo de Niell (1996), cada modelo con prueba unitaria frente a un cálculo manual, y luego pasa los residuos a RAIM instantáneo (monitorización autónoma de integridad del receptor) para obtener HPL/VPL por época (HPL: nivel de protección horizontal; VPL: nivel de protección vertical) y emite una matriz gnss_measurements[] (pseudodistancia, Doppler, C/N₀, correcciones de iono/tropo por SV (vehículo espacial, es decir, un satélite)). Además, DOP/disponibilidad (DOP: dilución de la precisión) y RAIM de separación de soluciones a partir de órbitas; ingesta de NAV multi-GNSS de RINEX (Receiver Independent Exchange Format) 3 (GPS/Galileo/QZSS/BeiDou (QZSS: Sistema Casi Cenital de Satélites de Japón) mediante IS-GPS-200, vector de estado de GLONASS (Sistema Global de Navegación por Satélite de Rusia)) analizada → posición ECEF y sesgo de reloj del SV, utilizable como fuente Propagator de primera clase Y como bloque de constelación rinex en línea (scenarios/orbit-rinex.toml); ingesta de OBSERVACIÓN de RINEX 3 (se espera que el formato de observación 4,00 se analice, pero no se ha probado ningún archivo 4,00; los archivos de NAVEGACIÓN de RINEX 4 se rechazan por su nombre en lugar de decodificarse mal); un solucionador de posicionamiento de punto único (tipo de escenario pvt, src/pvt.rs) que convierte pseudodistancias de código RINEX reales + efemérides de difusión en una posición del receptor mediante mínimos cuadrados ponderados iterados: corrección de Sagnac/rotación terrestre, reloj de satélite de difusión con −TGD, la combinación libre de ionosfera de doble frecuencia L1/L2 (o Klobuchar monofrecuencia), troposfera de Saastamoinen/Niell, ponderación por elevación, DOP y RAIM instantáneo, validado con datos reales de IGS (International GNSS Service) (estación ABMF, Guadalupe, 2018-05-13) hasta 5,7 m de RMS (raíz del error cuadrático medio) en 3-D / 1,1 m horizontal frente a la coordenada topográfica de la estación (tests/pvt_abmf.rs, scenarios/pvt-abmf.toml); y lectura/escritura de órbitas precisas SP3 (Standard Product 3, el formato de órbitas precisas) |
Un motor de posicionamiento por código y, desde 0,36, procesamiento de fase de portadora sobre observaciones reales: el solucionador pvt calcula una posición real a partir de mediciones de código reales (posicionamiento de punto único, de nivel métrico, con la combinación libre de ionosfera de doble frecuencia); rtk_real::run_rtk hace RTK de línea base corta sobre código y fase GPS de doble frecuencia reales (dobles diferencias, un filtro de Kalman flotante, fijación de ambigüedad entera con LAMBDA con la prueba del cociente, src/lambda.rs), y un filtro PPP flotante estático se ejecuta sobre código y fase reales con órbitas y relojes finales de IGS. Ambos están VALIDATED frente a coordenadas ITRF2020 publicadas de estaciones IGS (WTZR/WTZZ, tests/rtk_real_wettzell_oracle.rs, tests/ppp_real_wettzell_oracle.rs, umbrales preregistrados); lo que sigue ausente es la resolución de ambigüedad entera en PPP, el RTK cinemático o de red y el funcionamiento en tiempo real. El suavizado de portadora de Hatch es un hallazgo MODELLED fijado (sus umbrales preregistrados no se alcanzaron). El tipo de escenario leo-ppp ejecuta un filtro PPP flotante sobre mediciones que simula, para estudios de convergencia; el paquete gnss-sim directo sigue siendo un simulador a partir de la verdad; BeiDou-GEO (GEO: órbita geoestacionaria) excluido |
Fijación de ambigüedades PPP, RTK cinemático o de red, funcionamiento en tiempo real: use RTKLIB/gLAB (RTKLIB: una biblioteca de código abierto de posicionamiento cinemático en tiempo real) |
| Fusión de sensores / navegación por estima con INS (sistema de navegación inercial) | full | Biblioteca strapdown de 3 ejes (src/inertial/{attitude,mechanization,imu_errors}.rs): actitud por cuaternión con compensación de coning/sculling, mecanización NED (norte-este-abajo) completa (velocidad de rotación terrestre + velocidad de transporte, gravedad de Somigliana de WGS-84) y un modelo determinista de errores de IMU (unidad de medida inercial) (se modelan factor de escala, desalineación, sensibilidad a g, cuantización, rampa de velocidad). El navegador strapdown está ahora conectado a un paquete GNSS/INS débilmente acoplado ejecutable con una cifra de mérito (src/fusion/pack.rs, kind = "gnss-ins"): la mecanización de tres ejes se disciplina con el EKF de estado de error de 15 estados (filtro de Kalman extendido) (src/fusion/{gnss_ins_ekf,closed_loop}.rs, realimentación de posición/velocidad/actitud/sesgo) mientras hay GNSS, y luego avanza por inercia durante la interrupción, sustituyendo el reinicio por ajuste a la verdad por una fusión genuina e informando del error horizontal fusionado frente al avance de un INS libre en lazo abierto. El paquete inertial heredado, aparte, sigue ejecutando el presupuesto escalar de 1 DOF (DOF: grado de libertad) con reinicio por ajuste a la verdad. También se implementa una actualización de pseudodistancia fuertemente acoplada (update_tightly_coupled / fuse_tightly_coupled): forma la innovación en el dominio del alcance (jacobiano de línea de visión sobre δp) y sigue corrigiendo con menos de cuatro satélites, donde no existe una solución PVT (posición, velocidad y tiempo) débilmente acoplada. Un UKF GNSS/INS fuertemente acoplado completo de 17 estados (filtro de Kalman unscented) (src/fusion/tightly_coupled17.rs) lleva posición, velocidad, error de actitud, sesgos de acelerómetro y de giroscopio, y el reloj del receptor (sesgo + deriva), con navegación por estima con CAI (CAI: interferómetro de átomos fríos) cuántico: el ruido de proceso de paseo aleatorio de velocidad es el q_va derivado del acelerómetro de átomos fríos, y avanza por inercia durante una interrupción de 120 segundos acotada a unos pocos cientos de metros (frente a los kilómetros de un INS libre de grado de navegación). Este UKF de 17 estados está ahora expuesto como un escenario ejecutable (src/fusion/hybrid_ukf.rs, kind = "hybrid-ukf", accesible desde CLI/Python/WASM/MCP): los 15 estados de error del INS se amplían con la corrección del sesgo del acelerómetro derivada del CAI (el interferómetro de átomos fríos fija el límite de paseo aleatorio de velocidad q_va) y un reloj de 2 estados de fase y frecuencia cuyo ruido de proceso procede del motor de reloj con parámetros q (clock_state::q_from_allan, perfil de Allan → q_wf/q_rw), impulsado por el modelo de error de CAI acotado entre corchetes, de modo que la ejecución demuestra una hibridación de corto plazo de IMU clásica + largo plazo cuántico. Su cifra de mérito es la autoconsistencia del filtro: NEES + blancura de innovación (NIS) agrupados sobre un conjunto de Monte Carlo frente a sus bandas χ² del 95% (el filtro ajustado cae dentro de las bandas; un filtro mal ajustado se señala, una puerta objetivamente comprobable). Esto es una declaración de AUTOCONSISTENCIA bajo el ruido modelado, NO una garantía de exactitud en el mundo real: las entradas de CAI y de reloj están acotadas o modeladas, el hardware de CAI es propiedad del socio, y nada de lo aquí expuesto implica TRL (nivel de madurez tecnológica)>3, herencia de vuelo ni validación externa. El modelo determinista de errores de IMU es configurable por sensor desde el archivo de escenario TOML (Tom's Obvious Minimal Language) gnss-ins ([imu_*.error_model]: factor de escala, desalineación, sensibilidad a g, cuantización, rampa de velocidad), y por defecto es una fuente de sesgo constante pura cuando se omite |
El acoplamiento fuerte es solo de pseudodistancia (la fase de portadora está en la hoja de ruta); el escenario hybrid-ukf usa una única trayectoria nivelada a velocidad constante en la que los estados de error de actitud y de sesgo de IMU solo son débilmente observables, de modo que la consistencia NEES se evalúa sobre el subconjunto estimable (posición, velocidad, reloj = 8 estados): la observabilidad completa de los 17 estados exige una trayectoria con maniobras (hoja de ruta); el par sesgo de acelerómetro/inclinación del acoplamiento débil es débilmente separable, por lo que no se afirma una calibración por sesgo; el modelo de errores de IMU omite la rectificación de vibraciones y la deriva por gradiente de temperatura; el UKF de 17 estados y las rutas de acoplamiento fuerte están autovalidados (integración analítica a velocidad constante, convergencia con ayuda de GNSS, recuperación de sesgos, la cota de interrupción de 120 s limitada por el CAI y la referencia independiente de consistencia χ² de NEES/NIS); la propia mecanización strapdown está VALIDATED frente a NaveGo v1.4 (tests/classical_strapdown_ins_reference.rs: actitud idéntica bit a bit, velocidad/posición dentro de cotas analíticas indicadas), pero no se ha ejecutado ninguna validación cruzada a nivel de filtro (NaveGo o el conjunto de datos de vehículo de KF-GINS) |
acoplamiento fuerte con fase de portadora, observabilidad completa de los 17 estados con trayectoria de maniobras, biblioteca de trayectorias, validación cruzada a nivel de filtro con NaveGo/KF-GINS: P2 |
| Integridad / RAIM / ARAIM (monitorización autónoma avanzada de integridad del receptor) | parcial | RAIM instantáneo real en src/raim.rs: solución por mínimos cuadrados + detección de fallos por χ² de residuos (umbral exacto a partir de un χ² de gamma incompleta sin dependencias) y HPL/VPL basados en pendiente (pbias a partir de un χ² no central para los P_fa/P_md configurados); RAIM de separación de soluciones (MHSS) con detección e identificación de fallos; presupuesto de riesgo de integridad (P_HMI) de ARAIM (araim_raim) que resuelve el menor HPL/VPL cuya P_HMI = Σ_k p_fault,k·Q((PL−T_k)/σ_k) sumada satisface una asignación explícita de riesgo de integridad, el modo de fallo de constelación completa de doble y múltiple constelación (araim_dual_raim, ARAIM TN (nota técnica) de la UE (Unión Europea) / DO-316; P_const = 0 ⇒ araim_raim bit a bit), un mensaje de soporte de integridad explícito (IntegritySupportMessage: σ_URA/σ_URE/b_nom/P_sat/P_const, con los valores de referencia GPS+Galileo de WG-C (WG: grupo de trabajo)), además de un diagrama de integridad de Stanford(-ESA, la Agencia Espacial Europea) (el tipo de escenario integrity y un renderizador stanford_svg independiente de las cuatro zonas + el límite PL=error). Documentado de extremo a extremo en ARAIM_REFERENCE.md. Además, la autoconsistencia del filtro de la cifra de mérito del escenario (cota de k-σ) |
RAIM es accesible mediante el tipo de escenario integrity y (0,36, opcional) junto a la cifra de mérito de reloj/holdover como un bloque integrity_fom aparte ([integrity]: RAIM instantáneo sobre un cielo predefinido desde un emplazamiento declarado, no disponible mientras el GNSS está denegado; MODELLED), nunca integrado en la cifra de mérito de holdover, que sigue informando de la autoconsistencia; el RAIM instantáneo incluye FDE de un solo satélite (detección y exclusión de fallos, raim::snapshot_raim_fde, VALIDATED frente a RTKLIB raim_fde en tests/integrity_snapshot_raim_rtklib_oracle.rs); la separación de soluciones de múltiples hipótesis de ARAIM ADD v4.2 con determinación de subconjuntos de varios satélites está en src/araim_reference.rs (VALIDATED frente a Stanford MAAST, tests/integrity_araim_stanford_oracle.rs), pero el presupuesto de sigma uniforme raim::araim_raim sigue cubriendo solo fallos de un único SV y de toda la constelación y no es conforme con ADD (0,36, opcional: fallos simultáneos de subconjuntos de varios SV mediante la regla de subconjuntos de ADD v4.2 generalizada más allá de pares, araim_subset_raim, add_v42_protection_levels_to_order; MODELLED, sin ejecución de MAAST más allá de pares), y la exclusión de varios SV no se modela; y araim_dual_raim está conectado al ejecutor de escenarios TOML mediante el indicador araim_dual (scenarios/araim-gps-galileo.toml), con una ruta de disponibilidad por época araim_dual_constellation_availability; los núcleos instantáneo/MHSS/ARAIM se ejercitan sobre geometría real de órbitas precisas de IGS (SP3) (tests/igs_real_data.rs) y sobre TLE reales de GPS+Galileo de Celestrak (tests/araim_dual_real_data.rs, con cada satélite propagado a una época UTC común, la época de TLE (conjunto de elementos de dos líneas) más reciente del conjunto, 2026-06-07T07:21:04, para un usuario con una inclinación de 45° a 400 km durante 24 h: la disponibilidad bajo un VAL (límite de alerta vertical) de 12 m / HAL (límite de alerta horizontal) de 10 m es 0,993 solo con GPS, 1,000 con GPS+Galileo combinados y 0,990 en el modo dual robusto frente a fallos de constelación; la cifra publicada antes aquí, 0,21→0,67 con el modo robusto "limitado", procedía de propagar cada satélite desde su propia época de TLE, un cielo que nunca existió, y se retira); la comparación anterior con la "Tabla A-3 de EU-ARAIM-TN" se retira (no hay fuente pública), y en xval/araim-m3/ se intenta una reproducción de las entradas de URA máximo del hito 3 de ARAIM de WG-C UE-EE. UU. (tablas 5 a 7, filas Depleted y Baseline) con desviaciones declaradas (MODELLED, véase INTEGRITY.md); sin certificación DO-229/ARAIM |
ARAIM de múltiples fallos (ADD v4.2): hecho; subconjuntos de varios SV en raim + paridad de dominio del receptor con gLAB + conexión con la cifra de mérito: P2 (véase INTEGRITY.md) |
| Modelado de amenazas de spoofing y jamming | parcial | Un detector estocástico de spoofing de tiempo (tipo de escenario spoof, src/spoof.rs + src/detection.rs): cuatro formas de inyección (rampa lineal, salto escalón, meaconing, reproducción) frente a un monitor asistido por reloj con una prueba de energía χ²₁ / de Neyman–Pearson bilateral, con el umbral de detección fijado a partir de un presupuesto objetivo de falsas alarmas P_fa y la probabilidad de detección fallida P_md informada tanto en forma cerrada como por Monte Carlo (las dos coinciden hasta unas pocas veces 1/√N); la cifra de mérito de seguridad es 1 − P_md. Además, un modelo de jamming por presupuesto de enlace (tipo de escenario jamming, src/jamming.rs): relación inhibidor-señal a partir de la geometría (pérdida de trayectoria en espacio libre + ganancia de la antena receptora por dirección), la ecuación estándar de C/N₀ efectivo con antiinterferencia (ganancia de procesamiento de desensanchado + factor de separación espectral Q; Kaplan y Hegarty §9,4), la pérdida de enganche por satélite con un umbral de seguimiento configurable y una cifra de mérito availability_under_jamming sobre una constelación Walker. Además, un conjunto de monitores de spoofing multicapa de RF/medición (RF: radiofrecuencia) (src/spoof_monitors.rs): una prueba de paridad de consistencia RAIM multisatélite (parity_raim_test, SOS (suma de cuadrados) ponderada de residuos frente a un umbral χ²(m−4); y señala correctamente que un sesgo de modo común es invisible para RAIM), un monitor AGC (control automático de ganancia) (AgcMonitor, exceso de potencia recibida sobre el nivel esperado), un monitor de calidad de señal / SQM (monitorización de calidad de señal) (SqmMonitor, desequilibrio de correlador Early/Late) y un combinador de fusión de capas (fuse_spoof_layers). Estos se componen en un CombinedSpoofDetector integrado cuyo evaluate ingiere una época de observables (geometría + residuos, potencia de AGC, tomas Early/Late) y ejecuta las tres capas con la fusión ponderada en una sola llamada, devolviendo los diagnósticos por capa; se expone como el escenario spoof-detect ejecutable (src/spoof_detect.rs, accesible desde CLI / Python / área de pruebas, JSON + SVG (Scalable Vector Graphics)) y está caracterizado frente a los parámetros publicados de los escenarios de TEXBAT (Texas Spoofing Test Battery) (Humphreys et al., ION (Institute of Navigation) GNSS 2012; tests/spoof_texbat_validation.rs), reproduciendo el patrón de detectabilidad documentado, incluidos los resultados negativos: ds2 de sobrepotencia detectado por AGC + SQM, ds3 de potencia igualada solo por SQM, ds4 de empuje de posición por RAIM, y ds7 de potencia igualada y alineado en fase de portadora dejado (correctamente) al detector asistido por reloj |
El tipo de escenario jamming es un presupuesto de enlace: no tiene multitrayecto ni dinámica de AGC en el tiempo. Desde 0,36 admite cuatro secciones opcionales: [crpa], un haz de agrupación adaptativa por canal (anulación de nulos o MVDR de src/crpa.rs, contrastado con un recálculo independiente en numpy; MODELLED), y [terrain], la pérdida única por difracción de filo de cuchillo de la trayectoria del inhibidor sobre una tesela SRTM (src/jamming_terrain.rs, ITU-R P.526-15 §4,1, contrastada con un recálculo independiente en numpy sobre una tesela real; MODELLED, un solo filo de cuchillo), [acquisition], histéresis entre adquisición y seguimiento, y [front_end], la lectura asentada del AGC y la pérdida del cuantificador del ADC con entrada gaussiana (src/jamming_rx.rs; marcada como no válida para inhibidores no gaussianos; MODELLED). El multitrayecto especular, el desvanecimiento móvil terrestre y el AGC existen en la capa IQ (src/iq/channel/multipath.rs, src/iq/channel/land_mobile.rs, src/iq/frontend/agc.rs) y no están conectados al tipo de escenario jamming; la tabla del Q de separación espectral contiene los valores de manual por tipo (CW y banda estrecha 1, banda ancha y barrido 2 desde 0,36), fijados a los coeficientes derivados de las densidades espectrales de potencia (PSD) en navsignal (véase la fila de señal de navegación). El detector de spoofing asistido por reloj es de un solo reloj; los monitores de RF/medición están ahora integrados (CombinedSpoofDetector) y caracterizados frente a los parámetros publicados de los escenarios de TEXBAT (Humphreys et al.); el residuo es la validación frente a los vectores sin procesar, es decir, las muestras IQ (en fase/cuadratura) de TEXBAT (que requieren un front-end de adquisición y seguimiento SDR (radio definida por software) que kshana no tiene, por ser un simulador y no un receptor) o un escenario Spirent con licencia: un trabajo posterior documentado |
detector combinado asistido por reloj + consistencia RAIM multi-SV integrada + AGC + SQM + caracterización con parámetros de TEXBAT: hecho; validación con vectores sin procesar (IQ de TEXBAT / Spirent con licencia): trabajo posterior |
| Modulación de señales de navegación y rendimiento del seguimiento de código | parcial | src/navsignal.rs: el nivel de señal entre el presupuesto de enlace y el dominio de la medición. Densidades espectrales de potencia de área unitaria para BPSK-R(n) (modulación por desplazamiento de fase binaria, chips rectangulares) y sine-BOC(m,n) (portadora con desplazamiento binario) (validadas en CI hasta área unitaria, hasta la forma cerrada del coeficiente de separación espectral (SSC) propio de BPSK κ = 2/(3R_c) y hasta la división espectral de BOC: nulo en la portadora, picos en ±f_s); el coeficiente de separación espectral κ = ∫ G_s(f)G_i(f) df, que ahora deriva el Q antiinterferencia que usa jamming a partir de los espectros reales de señal e inhibidor (Q = 1/(R_c·κ)) en lugar de una constante representativa (la referencia de banda ancha se contrasta en CI); el ancho de banda RMS (de Gabor) (BOC > BPSK: la medida de información de distancia / de Cramér–Rao); la fluctuación de ruido térmico del seguimiento de código con DLL (lazo de enganche de retardo) early–late coherente (Kaplan y Hegarty §8: ~submétrica para C/A a 45 dB-Hz, monótona en C/N₀); y la envolvente de error por multitrayecto (EML (early-minus-late) coherente, hallada localizando el cero del discriminador compuesto; se verifica la supresión del correlador estrecho). Una capa de compromiso de diseño de códigos de distancia (CodeFamily) añade el lóbulo lateral de autocorrelación periódica de secuencias m/Gold (1/L para una secuencia m) y la cota de correlación cruzada de Gold de tres valores t(n)/L, reproduciendo la correlación cruzada de Gold publicada de GPS C/A −23,9 dB (un ancla externa) y el recuento de secuencias m φ(2ⁿ−1)/n, además de la inversión entre longitud de código y alcance sin ambigüedad; las garantías de Gold devuelven honestamente None donde no existe un par preferido (n mod 4 = 0), en lugar de informar una cota que no se sostiene. |
Desde 0.31.0, la capa IQ independiente (src/iq/, los comandos kshana iq; diseño en design/GNSS-IQ-PLAN.md) añade una cadena de receptor por software: adquisición por FFT (transformada rápida de Fourier), un banco de seguimiento multicanal DLL/PLL/FLL (lazo de enganche de retardo, de fase y de frecuencia), filtrado de front-end y cuantización de 1 a 14 bits, y transmisión en flujo de conjuntos de datos grabados. Un receptor por software independiente recupera la verdad inyectada de sus escenas, y los códigos GPS L1 C/A y los bits LNAV (mensaje de navegación heredado) coinciden bit a bit con gps-sdr-sim. Sigue faltando: los discriminadores de los lazos suponen el triángulo de correlación BPSK ideal, de modo que no hay resolución de la ambigüedad de seguimiento de BOC; los modelos de canal y de lazo son MODELLED, contrastados con formas cerradas y con la verdad inyectada, no con IQ de campo medido; solo lazos escalares (sin seguimiento vectorial). El diseño del hardware de antena y carga útil de RF (diagramas de radiación, front-end) queda deliberadamente fuera de alcance: es el papel de un socio de carga útil. |
ambigüedad de BOC + validación con IQ de campo de la capa IQ: P2+ |
| Física de sensores PNT cuánticos | parcial | La mayoría de los sensores son coeficientes publicados de Allan / presupuesto de ruido (CSAC, óptico), más un acelerómetro de interferómetro de átomos fríos (CAI) a partir de primeros principios en src/inertial/quantum_imu.rs: la fase de Mach–Zehnder de tres pulsos Φ = k_eff·a·T², el ruido de proyección cuántica (shot) σ_Φ = 1/(C√N), la PSD de paseo aleatorio de velocidad derivada q_va que consume la pila inercial, la caída de contraste, la función de transferencia de vibración |H(ω)| + la varianza de PSD blanca y ahora los sistemáticos de Coriolis/rotación (coriolis_phase, sesgo equivalente 2Ω×v) y de desplazamiento luminoso AC-Stark (AC: corriente alterna) (ac_stark_phase, cancelación simétrica) + un barrido de deriva del tiempo de ciclo (cai_drift_sweep), y un presupuesto de error de navegación por estima cuántico-inercial compuesto (QuantumNavBudget) que integra el paseo aleatorio de velocidad de ruido blanco del CAI junto con el sesgo residual (½·b·t², contrastado con el integrador de Euler AccelModel independiente), el error de factor de escala y una degradación opcional de estabilidad a largo plazo (distinta de la decoherencia por disparo) en una única cifra de deriva de posición durante el holdover, más un holdover inercial hasta el umbral: el gemelo de navegación por estima del holdover del reloj. El nivel cuántico modelado está acotado entre dos valores (no igualado en paridad) frente a los 96 nm/s²/√Hz del gravímetro móvil de Freier et al. 2016 (arXiv:1512,05660): queda por debajo y a unos ~2 órdenes de magnitud de él. Documentado en QUANTUM.md |
Los sistemáticos de frente de onda y de apuntamiento del haz no se modelan; el límite de ambigüedad de franjas de Mach–Zehnder sí se modela (max_unambiguous_accel, dynamic_range_cells en src/inertial/quantum_imu.rs), pero resolver la ambigüedad no; los presupuestos exactos de pruebas en vuelo de CARIOQA-PMP (CARIOQA: Cold Atom Rubidium Interferometer in Orbit for Quantum Accelerometry) / Boeing-AOSense (requieren PSD de plataforma publicadas + SNR (relación señal-ruido) por disparo) y un preajuste de área de pruebas en JS (JavaScript) quedan pendientes |
sistemáticos de frente de onda + reproducción de pruebas en vuelo: P2+ (QUANTUM-MODELS.md) |
| Diseño de constelaciones | parcial | Walker sintético (tanto kepleriano analítico como de elementos medios SGP4, este último propagado con el núcleo validado a 4,12 mm: src/walker.rs) + visibilidad y DOP multiconstelación con TLE reales (GPS+Galileo hasta el 100%), validado frente a una instantánea real de gps-ops de Celestrak (tests/igs_real_data.rs); un barrido de diseño de PDOP (dilución de la precisión de posición) sobre la rejilla {planes × sats × inclination} y cifras de mérito de fracción de cobertura / tiempo de revisita; el tipo de escenario constellation-design ejecutable (patrones Walker delta y star en la convención i: T/P/F, listas explícitas de elementos, diseños multicapa y preajustes publicados, alrededor de la Tierra, la Luna, Marte o cualquier otro cuerpo catalogado) cuya geometría Walker y cuyas posiciones publicadas de GPS, Galileo y GLONASS están VALIDATED frente a las tablas publicadas y cuya dilución de la precisión global de la línea base de GPS está VALIDATED frente al estándar de rendimiento del Servicio de Posicionamiento Estándar de GPS, mientras que los mapas de cobertura de diseños arbitrarios siguen siendo MODELLED; un optimizador de diseño sin gradiente (optimize_walker_design) que busca en la rejilla el mejor diseño según un objetivo elegido (MinSatellitesForCoverage / MaxCoverage / MinWorstPdop), validado para devolver al ganador por fuerza bruta; y geometría analítica de calles de cobertura (coverage_half_angle_rad, street_half_width_rad; formas cerradas de Rider/Beste, verificadas a mano: GPS con una máscara de 5°: λ ≈ 71,2°, semianchura de calle de 4 satélites ≈ 62,8°) |
Existe un dimensionado idealizado de mínimo de satélites por calles de cobertura (walker::StreetsCoverageDesign); no está implementada la corrección exacta de Rider en la costura del límite entre planos contrarrotantes; el área de pruebas dibuja una vista de órbitas en 3-D sin dependencias (web/studio/lib/orbit3d.mjs), y una exportación CZML (Cesium Language), --export czml, carga la geometría en el globo de CesiumJS; el núcleo de DOP está VALIDATED frente a gnss_lib_py (tests/dop_reference.rs), y la canalización completa de visibilidad multiconstelación se contrasta de extremo a extremo con Orekit 12,2 + gnss_lib_py (tests/coverage_dop_full_oracle.rs): los diseños terrestres coinciden en todos los umbrales, pero los diseños de la Luna y de Marte no alcanzan el umbral de DOP con geometría numéricamente singular, por lo que la fila sigue siendo MODELLED; "arriba" geodésico frente a geocéntrico en el marco de DOP |
dimensionado por calles de cobertura + vista de órbitas en 3-D + contraste terrestre de extremo a extremo: hecho; corrección exacta de Rider en la costura + DOP mal condicionado fuera de la Tierra: P2 |
| Verificación y validación | parcial | Comprobaciones con referencia independiente externa en todo el motor (SGP4 frente a 666 vectores AIAA, la familia de Allan frente a Stable32 y allantools, los marcos frente a SOFA/ERFA, el modelo de fuerzas y la determinación de órbita frente a Orekit, ARAIM frente al ejemplo resuelto de WG-C y más; el recuento vigente está en la cabecera generada de VERIFICATION-MATRIX.md); comprobaciones deterministas de Allan; una matriz de verificación comprobada por máquina (src/verification.rs), una referencia cruzada requisito→módulo→prueba→referencia independiente→estado cuyas invariantes de honestidad tienen pruebas unitarias: una fila solo puede etiquetarse como validada si lleva una referencia independiente externa (NIST/AIAA/SOFA/IGS/valor publicado), de modo que una comprobación interna de autoconsistencia no pueda hacerse pasar por una validación; se representa en Markdown/CSV (CSV: valores separados por comas) para una referencia cruzada de verificación ECSS-E-ST-10-02 (ECSS: Cooperación Europea para la Normalización Espacial), y registra como tales las cuatro lagunas de hardware y PA (PA: aseguramiento del producto) que son responsabilidad del socio |
Los conjuntos de calibración cubren por ahora tres comprobaciones de una sola semilla (CALIBRATION-ENSEMBLES.md, preregistrados: el intervalo bootstrap de Monte Carlo cubre en el 96 % de 200 semillas; una tolerancia de percentil es frágil frente a la semilla, NOT MET en 91,5 %); las demás filas siguen calibradas con una sola semilla. La matriz impone la clasificación de las filas, y CI comprueba ahora también que existan todas las pruebas, archivos y elementos internos del crate que cita una fila (tests/verification_rows_name_a_test_that_exists.rs, tests/verification_rows_cite_evidence_that_exists.rs) y que las cifras publicadas sigan reproduciéndose (tests/published_figures_still_reproduce.rs); no califica la referencia independiente en sí, que una persona revisora sigue leyendo |
conjuntos de calibración: P1 |
| LEO-PNT (posicionamiento, navegación y temporización desde órbita terrestre baja) | parcial | Siete tipos de escenario, agnósticos del sistema y con preajustes públicos con nombre: leo-signal (diseños de señal de cualquier banda y estructura: componentes BPSK, BOC, MBOC (BOC multiplexado) o planos de tipo OFDM (multiplexación por división de frecuencias ortogonales), seguimiento de código, adquisición, compatibilidad con GNSS, compromiso de banda), leo-pass (un paso diseñado, de elementos, de TLE o Walker con un presupuesto de enlace por banda: lluvia, centelleo y pérdida de penetración en edificios de ITU-R (Sector de Radiocomunicaciones de la Unión Internacional de Telecomunicaciones), ionosfera, antena, Doppler, frente a los satélites GNSS MEO (órbita terrestre media) a la vista), leo-navmsg (efemérides y reloj de difusión sobre la base kepleriana del ICD (documento de control de interfaz) de Galileo o modelos LEO seleccionables, ajustados y codificados con una comprobación de trama CRC-24Q (comprobación de redundancia cíclica de 24 bits)), leo-pvt (posicionamiento fusionado MEO + LEO por pseudodistancia y Doppler sobre cualesquiera constelaciones), leo-ppp (convergencia de PPP con y sin aumentación LEO, sobre mediciones simuladas), ntn-positioning (cotas de posicionamiento 5G NTN, de red no terrestre, a partir del ancho de banda de la señal) y leo-pnt-chain (un sistema de extremo a extremo, con la salida de cada etapa entregada a la siguiente). Piezas VALIDATED: los términos del enlace de ITU-R frente a las tablas y los ejemplos de validación de las Recomendaciones, el Doppler máximo frente a una tabla publicada, el algoritmo de usuario de Galileo frente a RTKLIB hasta 1 mm, CRC-24Q, los pesos del SISRE (error de alcance de la señal en el espacio) |
Sin datos de campo ni señales grabadas; las cifras de posicionamiento, PPP, NTN y temporización son MODELLED (formas cerradas, consistencia del filtro, comparaciones con tendencias publicadas); los preajustes proceden de fuentes públicas o están derivados, no son datos de un operador | validación con señales grabadas reales: P3 |
| Espectro / entorno de RF | parcial | Tipo de escenario spectrum (src/spectrum.rs): la banda L de GNSS (y diseños multibanda de ultra alta frecuencia (UHF), banda S y banda C) como una única densidad espectral de potencia, con la frecuencia en horizontal y el tiempo hacia abajo, bajo una línea temporal de inhibidores programada (inhibidores de onda continua, de banda estrecha, chirp y de banda ancha igualada), con J/S (relación inhibidor-señal) por banda y C/N₀ efectivo (densidad de portadora a ruido); grabaciones SigMF de entrada y salida y estimaciones espectrales de Welch de muestras complejas. Los espectros de señal en forma cerrada y los coeficientes de separación espectral están VALIDATED; la cascada es MODELLED |
Señales de GLONASS, BeiDou y Galileo E6 no modeladas; sin validación de front-end de receptor ni de IQ (en fase/cuadratura) grabado | comparación con señales grabadas: P3 |
| Confianza en el registro del receptor (buque y general) | parcial | src/receiver_trust/: monitores sobre el propio registro de un receptor (densidad de portadora a ruido, consistencia de posición, velocidad y rumbo, tiempo) con eventos y predicciones declarados antes de la ejecución; en una plataforma de buque, una puntuación de 0-100 con motivos; modo en vivo sobre un flujo con la sentencia $PKSHT y una puerta opcional. MODELLED; orientativo, no un equipo de navegación homologado |
Los umbrales son valores por defecto declarados, no medidos frente a receptores en servicio; un registro puntúa solo ese registro; sin entrada ni salida de radiofrecuencia; no es un equipo de navegación homologado | docs/RECEIVER-TRUST.md, docs/MARITIME-TRUST.md |
| Paquetes de evidencias y telemetría de confianza | parcial | src/evidence/: un paquete firmado y encadenado por hash con una ventana de registro, su configuración y el resultado del motor, verificable sin conexión, con un token de sello de tiempo RFC 3161 opcional. src/telemetry/: el flujo de confianza como métricas de Prometheus, eventos de syslog (CEF o LEEF) y, opcionalmente, OpenTelemetry, con un panel de Grafana de ejemplo |
Un paquete es un registro técnico, no un dictamen jurídico, y no dice qué causó un evento; no se verifica la firma de la autoridad de sellado de tiempo; la telemetría transmite solo telemetría | docs/EVIDENCE-PACKS.md, docs/TRUST-TELEMETRY.md |
| Flujos de formación de tripulaciones y mapas de interferencia | parcial | src/nmea_synth/: NMEA de puente sintético con eventos programados de jamming, arrastre, spoofing de tiempo y reproducción, y un registro del instructor (solo texto). src/interference_map/: mapas agregados de navegación degradada a partir de informes de aeronaves y buques con licencia abierta y la exposición de una ruta, a partir de archivos locales |
Los flujos son datos de formación, nunca para los sistemas de navegación en vivo de un buque; los mapas son agregados, no un pronóstico, y dependen de los informes dados | docs/NMEA-TRAINING.md, docs/INTERFERENCE-MAP.md |
| Exportación para test bench | parcial | src/interop/testbench.rs: el movimiento del vehículo y los eventos de un escenario gnss-ins, jamming o gnss-sim como un CSV de movimiento, NMEA, texto de puntos de ruta y archivos de eventos para un simulador GNSS de laboratorio |
No se escribe ninguna señal; no se afirma ningún rendimiento de simulador ni de receptor; los archivos se comprueban tal como los releen los lectores de movimiento de un simulador de código abierto (gps-sdr-sim), pero la física de la propia trayectoria de verdad del escenario no se comprueba externamente | docs/TEST-BENCH.md |
| Verificación OSNMA de Galileo | parcial | src/osnma/ y kshana osnma verify: lee páginas I/NAV de Galileo o un flujo UBX e informa, por satélite y época, de si los datos de navegación están autenticados (clave firmada con raíz de Merkle, cadena TESLA, MAC), con el motivo por el que falló una comprobación y un tiempo de referencia independiente opcional para la frescura; también osnma_verify en Python y WebAssembly |
Autentica datos frente a claves que suministra el usuario; no afirma rendimiento antispoofing y no es un servicio de integridad de la navegación ni un equipo homologado; comprobado con vectores sintéticos, los vectores de prueba oficiales del ICD son una descarga externa | docs/OSNMA.md |
| Asignación de compliance a marcos públicos | parcial | src/compliance/ y kshana compliance-report: resultados de Kshana asignados a seis marcos y normas públicos de resiliencia, con fuentes y una laguna en cada fila; una ejecución solo cuenta cuando su resultado lleva los campos que escribe su tipo de escenario |
Una asignación es un juicio; el informe indica aquello a favor de lo que aporta evidencias un conjunto de ejecuciones, nunca que un marco se satisfaga ni que un producto esté aprobado; EN 16803 se cita solo a partir del texto del catálogo | docs/compliance/README.md |
| Integraciones marinas | parcial | Un complemento de Signal K, OpenCPN mediante NMEA en modo de puerta sobre TCP y una compilación de referencia para un ordenador pequeño junto al receptor (integrations/, deploy/) |
Probado con salida sintética grabada; el complemento no está publicado en npm; orientativo, no un equipo de navegación homologado | docs/MARINE-INTEGRATIONS.md |
Dominios más amplios de sistemas espaciales (fuera de alcance hoy)#
Varios de estos son none; otros son ahora modelos partial de primer orden (los tipos de escenario de análisis de misión / entorno añadidos en la serie v0.17.0): se enumeran para que el alcance sea inequívoco y no quede implícito por omisión. Kshana es un simulador PNT, no GMAT/STK/Orekit (STK: Systems Tool Kit); estos modelos adyacentes son deliberadamente de primer orden y MODELLED, nunca herramientas de vuelo validadas.
| Capacidad | Estado | Nota / hoja de ruta |
|---|---|---|
| Diseño de misiones / optimización de trayectorias | parcial | src/maneuver.rs: nodos de ΔV impulsivos con propagación de covarianza de 6×6 (marcos de error de ejecución ECI/LVLH (ECI: inercial centrado en la Tierra; LVLH: vertical local, horizontal local)), integración de quemado finito contrastada con la ecuación de Tsiolkovski en forma cerrada hasta < 0,01 %, un solucionador de Lambert de una sola revolución de Izzo-2015 + un propagador de Kepler exacto de variables universales (salidas de Lambert reconvertidas frente a la verdad de dos cuerpos) y un barrido porkchop (lanzamiento × llegada) de C3 / V∞ de llegada emitido como una rejilla de contornos JSON cuyo mínimo se contrasta con el suelo analítico de Hohmann. Sin optimizador de trayectorias; un solucionador de Lambert multirrevolución (maneuver::lambert_multirev, hasta tres revoluciones, ambas ramas) está VALIDATED frente a pykep 3.0.1 (tests/lambert_multirev_oracle.rs); el porkchop se ejecuta sobre el modelo sintético circular coplanario o, con maneuver::porkchop_kernel, sobre un SPK DE440 (VALIDATED frente a estados de SPICE + el Lambert de pykep, tests/porkchop_de440_oracle.rs); maneuver::optimise_transfer_kernel encuentra el óptimo continuo de fecha (C3 mínimo o V∞ de llegada mínimo, tipo I o II) sobre DE440, VALIDATED frente a un optimizador independiente con SPICE + pykep + SciPy (tests/transfer_optimiser_oracle.rs); frente a los mínimos Tierra–Marte de 2026 publicados en NASA/TM-2010-216764 coincide con los valores del tipo II y no alcanza el C3 mínimo del tipo I en −5,18 % (registrado). No se ejecutó GMAT en sí; pykep es la referencia independiente de la biblioteca. Ya existen una interfaz de efemérides planetarias de espacio profundo (src/ephem_provider.rs) y un contraste con DE440 (Development Ephemeris 440) (xval/anise-mars-od, 137 m @ arco de Marte de 1 día); véase la fila de PNT de espacio profundo / interplanetario. La capa de simulación de rendimiento por encima de GMAT/Orekit, no un sustituto. P3 |
| AOCS (sistema de control de actitud y órbita) / GNC (guiado, navegación y control) / actitud | parcial | Tipo de escenario attitude-budget (src/attitude_budget.rs): par de gradiente de gravedad del peor caso 1.5·(μ/R³)·ΔI + presupuesto de error de apuntamiento RSS (raíz de la suma de cuadrados) sobre términos de 1σ por contribuyente: un presupuesto escalar MODELLED de apuntamiento y perturbaciones previo al hardware. La dinámica de actitud de sólido rígido sin par con estado de cuaternión (src/attitude_dynamics.rs: ecuaciones de Euler + cinemática de cuaternión, RK4) está VALIDATED frente al concentrador de nave de Basilisk 2.9.1 (tests/attitude_dynamics_basilisk_oracle.rs, cuaternión dentro de 1e-9 en 1e4 s), y el pico del par de gradiente de gravedad frente al GravityGradientEffector de Basilisk (tests/attitude_gg_torque_basilisk_oracle.rs); la determinación de actitud de Wahba está en src/wahba.rs. Tipo de escenario aocs (src/aocs.rs, src/aocs_kind.rs, AOCS.md): un giro de apuntamiento inercial con ruedas de reacción equilibradas bajo realimentación MRP, pares de rueda de norma mínima con límites de motor; el lazo cerrado está VALIDATED frente a Basilisk 2.9.1 en tres casos preregistrados hasta el error de redondeo. Un MEKF a partir de un giroscopio y un seguidor estelar (src/aocs_mekf.rs) puede cerrar el lazo sobre su estimación (MODELLED, consistencia del filtro). Sin guiado de seguimiento, realimentación integral, gestión de momento, magnetopares, propulsores, fricción de rueda ni límites de velocidad; sin entorno de pares externos en la dinámica de actitud; no es un controlador de vuelo. P3 |
| Marcos de referencia → fijos a la Tierra | full | Hecho: TEME→ECEF/ITRF, el movimiento polar y la cadena GCRS→ITRS basada en CIO están implementados y VALIDATED (bit a bit frente a SOFA/ERFA; 4 mm de extremo a extremo frente a Vallado). Véase la fila de marcos de referencia más arriba |
| Comunicaciones y presupuestos de enlace | parcial | src/linkbudget.rs: un presupuesto de enlace de Friis de espacio profundo (potencia de transmisión · ganancias de antena · ruido → C/N₀ · Eb/N₀ · margen) que alimenta la ruta radiométrica/GSE (GSE: equipo de apoyo en tierra), además de los enlaces ópticos y de RF de transferencia de tiempo (src/timetransfer*.rs), y el tipo de escenario link-budget ejecutable: la ecuación de enlace unidireccional CCSDS-401/DSN-810-005 (DSN: Red de Espacio Profundo) C/N₀ = EIRP − FSPL − L_other + G/T − k con entradas de EIRP (potencia isotrópica radiada equivalente) / G-T y selección de banda S/X/Ka (presupuesto de enlace de ingeniería MODELLED, no la hoja de datos de un terminal calibrado). Sin programación de accesos, sin codificación adaptativa. P2 |
| Segmento terreno y operaciones | parcial | Tipo de escenario passes (src/passes.rs): predicción de pasos de salida y puesta de una estación terrestre: AOS/TCA/LOS (AOS: adquisición de señal; TCA: instante de máximo acercamiento; LOS: pérdida de señal), elevación máxima, duración por paso y acceso total en un horizonte, a partir de un conjunto de elementos SGP4 sobre el marco fijo a la Tierra IAU 2006/2000A con refracción ITU-R P.834-9 y tiempo de luz: VALIDATED frente a Orekit 13.1.8 en estaciones a nivel del mar (60 casos / 1210 pasos, tests/pass_predictor_on_path_orekit_oracle.rs); el passes::predict_passes geométrico está VALIDATED frente al detector de elevación de Orekit 12,2 (22 escenarios / 129 pasos, tests/ground_station_pass_prediction_reference.rs); sin optimizador de programación ni resolución de conflictos. P3 |
| Telemetría / TT&C / CCSDS | parcial | TOML de entrada y JSON de salida a medida; exportación e importación de CCSDS OEM (Orbit Ephemeris Message) (502.0-B KVN (notación clave-valor), GMAT/Orekit/STK) mediante el tipo de escenario oem-interop ejecutable (src/oem.rs parse_oem, puente de ida y vuelta; el intercambio de un solo objeto, ajustado a la norma, está VALIDATED frente al analizador independiente oem 0.4.5); análisis y emisión de Tracking-Data-Message CCSDS-TDM (503) (src/ccsds_tdm.rs, el formato de intercambio radiométrico de espacio profundo); y el tipo de escenario space-packet (src/space_packet.rs): codificación y decodificación de la cabecera primaria de Space Packet CCSDS 133.0-B con ida y vuelta exacta bit a bit. Un escritor de CCSDS OMM (Orbit Mean-Elements Message, 502.0-B-2, parte de la familia ODM) (src/omm.rs) publica elementos medios de SGP4 en KVN, y un lector de kernels NAIF SPICE en Rust puro (src/naif_kernel.rs: contenedor DAF, SPK tipo 2, PCK binario tipo 2) respalda ephem_provider::KernelEphemeris. Otros tipos de mensaje CCSDS (OPM, OCM, AEM (AEM: Attitude Ephemeris Message)) y la escritura de SPICE siguen siendo un elemento de la hoja de ruta (P2) |
| Interoperabilidad y estándares (RINEX/SP3/SPICE/CCSDS) | parcial | NAV multi-GNSS de RINEX 3: GPS, Galileo, QZSS, BeiDou MEO/IGSO (IS-GPS-200) y GLONASS (RK4 de vector de estado PZ-90 (PZ: Parametry Zemli, el datum geodésico ruso)), ingerido + propagado + ejecutable como una constelación mixta; analizador de OBSERVACIÓN de RINEX 3 (pseudodistancia/portadora/Doppler/SNR por código de observación, con indicadores LLI/SSI (LLI: indicador de pérdida de enganche; SSI: indicador de intensidad de señal); se espera que 4,00 se analice, sin probar); ida y vuelta de lectura ↔ escritura de efemérides precisas SP3-c/d (análisis + exportación para Ginan/RTKLIB/gLAB) y un propagador de Lagrange de orden 10 (11 puntos) (Propagator::Sp3Precise); la exportación SP3 está expuesta en la CLI (kshana <orbit.toml> --export-sp3 out.sp3, o export_sp3 = true) y validada de ida y vuelta con la constelación GPS real hasta <0,5 m en 24 h (tests/sp3_export_roundtrip.rs); el escritor de efemérides CCSDS OEM 2,0, la exportación de estado TEME con velocidad para herramientas de dinámica de vuelo, ahora expuesto en la CLI (kshana <orbit.toml> --export-oem out.oem, o export_oem = true) y comprobado de ida y vuelta frente al estado del propagador (tests/sp3_export_roundtrip.rs). El analizador de observaciones RINEX alimenta ahora una solución de posicionamiento de punto único (pvt, validada con datos reales de IGS; véase la fila de GNSS / PNT). Además, análisis y emisión de mensajes de datos de seguimiento CCSDS-TDM (503) (src/ccsds_tdm.rs). Exportaciones de geometría para visores y herramientas de análisis de misión: CZML, KML (Keyhole Markup Language), GeoJSON y efemérides STK (--export, src/interop/), cada una releída por un validador escrito a partir de la especificación del formato (tests/interop_formats.rs), una importación de rutas GeoJSON (--import-route), grabaciones SigMF (Signal Metadata Format) de entrada y salida para el tipo de escenario spectrum y texto de tipo RINEX-4 / CSV para el mensaje de navegación LEO (INTEROP.md, STANDARDS.md). Sin BeiDou-GEO, sin fijación de ambigüedad entera en PPP ni RTK cinemático (existen PPP flotante estático y RTK de línea base corta con datos reales; véase la fila de GNSS / PNT), sin escritor de SPICE y todavía sin OPM/AEM (el lector de OEM existe mediante el tipo de escenario oem-interop, el escritor de OMM en src/omm.rs y un lector de SPK/PCK de SPICE en src/naif_kernel.rs): P2 "anexar dominios adyacentes mediante formatos estándar" |
| Clima espacial / entorno (iono/atmósfera/radiación) | parcial | Tipo de escenario space-weather (src/space_weather.rs): índices solares/geomagnéticos (tabla de 28 pasos Kp↔ap de IAGA (Asociación Internacional de Geomagnetismo y Aeronomía), Ap diario, F10.7a centrado de 81 días), temperatura exosférica de Jacchia-71 y un acoplamiento de densidad termosférica impulsado por la actividad sobre una atmósfera estática: MODELLED de primer orden, NO un modelo de densidad absoluta NRLMSISE. Ionosfera: el modelo de difusión de Klobuchar (VALIDATED frente a RTKLIB) y un lector de mapas TEC (contenido total de electrones) IONEX (formato de intercambio de mapas de ionosfera) (src/ionex.rs, con pruebas unitarias). Un mapa ionosférico global real de CODE (CODG1330.18I) es la referencia independiente medida de la fila de TEC oblicuo libre de geometría (tests/geometry_free_tec_gim_oracle.rs), pero esa prueba evalúa el mapa en su propio generador de datos de prueba, de modo que el propio lector src/ionex.rs todavía no se ha contrastado con un producto real; sin modelo ionosférico de base física ni impulsado por clima espacial; P2+ |
| Navegación por mapas de gravedad / alt-PNT | parcial | src/gravimeter.rs: un modelo de medición de gravímetro de átomos fríos cuyo nivel de ruido blanco se deriva de la ASD del acelerómetro CAI (σ = ASD/√τ), un campo de anomalías de gravedad en armónicos esféricos completamente normalizados de bajo grado (validado frente a las funciones de Legendre en forma cerrada y a una anomalía de un solo término derivada a mano) más mascons sintéticos, y un filtro de partículas de correlación con mapas de gravedad (que compone mapmatch + particle_filter) que recupera una trayectoria sin GPS a partir de la secuencia de anomalías que atraviesa. El benchmark de 60 minutos sin GPS (run_gps_denied_gravity_nav, scenarios/gps-denied-gravity-nav.toml) recorre una interrupción de ~700 km / una hora en la que la solución inercial deriva hasta ≈ 70 km, y un correlador jerárquico de grueso a fino con el ruido blanco determinista con semilla del gravímetro la recupera hasta ≈ 145 m (< 500 m), estable entre realizaciones de ruido y demostrablemente limitado por el refinamiento (una sola rejilla gruesa se estanca en ~2 km). Además, un modelo completo del campo principal geomagnético IGRF-14 (IGRF: Campo Geomagnético Internacional de Referencia) (src/igrf.rs: el campo de armónicos esféricos normalizados de Schmidt de IAGA hasta grado y orden 13, 2025,0 + variación secular, con coeficientes generados por máquina a partir del igrf14coeffs.txt oficial; validado frente al dipolo inclinado en forma cerrada, una diferencia finita del potencial escalar y el polo/intensidad geomagnéticos conocidos): el campo magnético con el que una plataforma puede hacer correlación de mapas para navegación por anomalías magnéticas. Además, navegación referenciada al terreno (TERCOM/SITAN (TERCOM: correlación de contornos del terreno; SITAN: Sandia Inertial Terrain-Aided Navigation)) y el navegador combinado de gravedad + magnetismo + terreno (src/altpnt/terrain.rs): un analizador artesanal de .hgt de SRTM (Shuttle Radar Topography Mission) para modelos digitales de elevación (DEM) (16 bits con signo, big-endian, orden por filas, primera fila al norte, vacío -32768; validado frente a la especificación del controlador SRTMHGT de GDAL (Geospatial Data Abstraction Library) (formato de archivo de alturas de la Shuttle Radar Topography Mission) y a una referencia independiente de punto medio bilineal en forma cerrada), un modelo de altímetro radar/barométrico y un correlador run_terrain_nav que recupera una trayectoria sin GPS a partir del perfil de elevación del terreno frente al DEM, y run_combined_altpnt, que fusiona tres canales de campo escalares por punto de ruta (Δg mGal · |B| nT anomalía cortical · elevación m) de modo que la distribución posterior conjunta es más nítida (CRLB (cota inferior de Cramér–Rao) más baja) que la de cualquier campo individual: acotada < 500 m durante la interrupción de 60 min y, en esperanza, no peor que el mejor canal individual. Además, navegación secuencial (recursiva) referenciada al terreno: SITAN como filtro en ejecución (src/altpnt/sequential.rs, run_sequential_trn): el mismo modelo de medición altímetro frente a DEM ejecutado época a época mediante el motor SIR (remuestreo por importancia de muestreo) de particle_filter (predicción con el incremento del INS + ruido de proceso → repesado con la correlación con el terreno → remuestreo ante degeneración), de modo que una deriva variable en el tiempo del INS se sigue a lo largo de la trayectoria, mientras que el correlador por lotes solo recupera un único desfase constante: la estimación recursiva permanece acotada y reconverge (final ≈ 70 m) mientras que la solución sin ayuda diverge sin cota hasta ≈ 5 km, con el error por época siguiendo lo distintivo del terreno y un monitor de salud del tamaño efectivo de muestra. Alcance honesto: el mapa es conocido y fijo, es decir, localización recursiva frente a un DEM almacenado (la mitad de localización del SLAM de terreno (localización y mapeo simultáneos)); la estimación conjunta del mapa es el RBPF aparte que se describe más abajo. Los cuatro están ahora conectados al motor de escenarios mediante kind= (gravity-map, terrain-nav, combined-altpnt, terrain-slam) con un gráfico SVG de deriva (scenarios/terrain-nav.toml, scenarios/combined-altpnt.toml, scenarios/terrain-slam.toml). 0,36 (WP-10): el navegador gravity-map admite un campo de referencia real opcional ([reference]: EGM2008 incluido hasta grado 70, o un archivo .gfc de ICGEM), cuya síntesis de anomalías coincide con el ICGEM Calculation Service hasta unos 1e-8 mGal (VALIDATED, xval/icgem-egm2008/); con ese campo de grado 70 el benchmark de 60 min termina en 3106 m, de modo que el umbral de < 500 m es NOT MET (preregistrado y previsto: el grado 70 es demasiado suave). Un Monte Carlo opcional de error de mapa ([map_error_mc], scenarios/gravity-map-error-mc.toml) muestra que la corrección sintética de 144 m supone un mapa exacto (1 de 20 realizaciones dentro de 500 m con un error correlacionado de 2 mGal; exploratorio). combined-altpnt admite una rejilla magnética cortical EMAG2v3 opcional ([magnetic_grid]; EMAG2 se descarga, no se incorpora al repositorio, y no se afirma ningún resultado de navegación con ella). terrain-nav sigue siendo solo de DEM por diseño: es el correlador TERCOM/SITAN de un solo canal, y la correlación magnética está en combined-altpnt, que fusiona el terreno con los canales magnético y de gravedad; un canal magnético en terrain-nav lo duplicaría, de modo que el punto de auditoría "EMAG2 en terrain-nav" queda cubierto por la conexión de combined-altpnt (RM-16). Las comprobaciones con SRTM real se ejecutan en CI sobre dos recortes completos de resolución completa confirmados en el repositorio (nodo por nodo iguales a GDAL 3.8.4, xval/srtm-ungate/). Existe la estimación conjunta del mapa (run_sequential_trn_on_map, un RBPF de estilo FastSLAM): en una sola pasada gana un 1,5 % sobre SITAN con mapa conocido en un mapa erróneo, sin alcanzar su umbral preregistrado del 10 % (xval/terrain-slam-rbpf/). Sigue faltando: un modelo de gravedad de alto grado en una ejecución de navegación (requiere un nuevo preregistro), un resultado de navegación magnética con rejilla real y un caso de SLAM con revisita (cierre de bucle). P3 |
| Reentrada / EDL (entrada, descenso y aterrizaje), análisis de lanzamiento, EO/carga útil (EO: observación de la Tierra) | parcial | Geometría MODELLED de primer orden mediante tres tipos de escenario ejecutables: reentry (src/reentry.rs, corredor balístico de Allen-Eggers: deceleración máxima, velocidades de pico de g y de pico de calentamiento, altitud de pico de g), launch-window (src/launch.rs, azimut de lanzamiento de dos cuerpos sin Az = cos i/cos lat, Δv de cambio de plano, bonificación por rotación del emplazamiento, oportunidades diarias) y eo-coverage (src/eo_payload.rs, geometría de franja / GSD (distancia de muestreo sobre el terreno) / acceso / revisita de EO con triángulo espacial de SMAD (Space Mission Analysis and Design)). Sin simulación EDL/aerotérmica de 6 DoF, sin optimizador de trayectorias, sin radiometría de sensores/MTF (MTF: función de transferencia de modulación). P3 |
| PNT lunar / cislunar (LunaNet) | parcial | src/lunar.rs: un motor de ARAIM lunar que reutiliza el núcleo MHSS del lado terrestre con parámetros LNIS (LunaNet Interoperability Specification) de LunaNet (σ_URE ≈ 30 m, P_sat ≈ 1e-4), la reducción de marco cislunar MCI↔MCMF (MCI: inercial centrado en la Luna; MCMF: centrado en la Luna y fijo a ella) (mci_to_mcmf / mcmf_to_mci, un modelo simplificado de rotación media a la velocidad sidérea) y lat/lon/alt selenográficas (mcmf_to_selenographic), y un paso de nivel de protección en el polo sur (south_pole_hpl_pass) que cuantifica la brecha de integridad: con un alcance de 30 m el HPL es finito pero supera un límite de alerta de operaciones en superficie de 50 m. src/cr3bp.rs añade el CR3BP (problema restringido circular de tres cuerpos) Tierra–Luna (dinámica en marco rotante + propagador RK4 + constante de Jacobi + los cinco puntos de Lagrange, validado frente a los valores publicados de L1/L2/L3 y los exactos de L4/L5): el núcleo de tres cuerpos que necesita una NRHO (órbita halo casi rectilínea) real, y un corrector diferencial de matriz de transición de estado + disparo simple (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) que produce órbitas halo/NRHO de L2 genuinamente periódicas: la STM está validada frente a diferencias finitas, los halos corregidos se cierran sobre sí mismos con precisión de máquina (conservando Jacobi), y al sembrar el estado de apoluna publicado se reproduce la NRHO austral 9:2 de L2 (la órbita de Gateway) con periodo ≈ 6,57 d y perilunio ≈ 3.250 km, coherente con los ≈ 6,56 d / ≈ 3.370 km publicados | Las CI (condiciones iniciales) de la NRHO corregida diferencialmente están ahora conectadas, pero la transformación selenocéntrica (MCI/MCMF) desnormalizada de la órbita corregida y la continuación de familias siguen siendo trabajos posteriores; la orientación lunar de ejes principales de DE440 con libración física real existe (src/lunar_orientation.rs, a partir del PCK moon_pa_de440, contrastada con SPICE pxform en tests/lunar_pa_orientation_spice_oracle.rs), pero la ruta lunar::mci_to_mcmf más antigua sigue usando la rotación media sin libración ni polo con precesión; la NRHO es una solución de CR3BP (circular, sin Sol), no está validada frente a una efeméride real de LANS/Gateway (LANS: Servicio Lunar de Navegación Aumentada); un tipo de escenario lunar-integrity ejecutable (scenarios/lunanet-araim.toml) expone desde la CLI el paso por el polo sur | transformación selenocéntrica + continuación de familias + interfaz SPICE/LunaNet: P3 |
| PNT de espacio profundo / interplanetario (Marte, radiométrico) | parcial | Entregado en v0.17.0. Un motor de navegación radiométrica: tiempo de luz iterativo + retardo de Shapiro, Doppler y distancia de dos, uno y tres sentidos (dos tramos de Moyer), retorno coherente del transpondedor, medición de distancia regenerativa/PN (PN: pseudoruido) (CCSDS 414), Δ-DOR (CCSDS 506), medios de plasma solar/tropo/iono (src/radiometric.rs); análisis y emisión de CCSDS-TDM (503) (src/ccsds_tdm.rs); un SRIF de dinámica reducida (filtro de información de raíz cuadrada) con aceleraciones empíricas RTN (radial, transversal, normal) + un reloj de a bordo de 3 estados + resistencia atmosférica de Marte (src/deepspace_od.rs, clock_state.rs, mars_atmos.rs) que logra una OD en LMO (LMO: órbita baja de Marte) de ≈ 0,2 m en un lazo cerrado sintético; fusión de unidireccional y bidireccional; un núcleo de dinámica multicuerpo (src/body.rs, GMM-3 de Marte (GMM: Goddard Mars Model), marco de Marte de IAU src/mars_frame.rs, una interfaz EphemerisProvider src/ephem_provider.rs, JD en dos partes + TT↔TDB (TDB: Tiempo Dinámico Baricéntrico)); y el escenario de PNT por relé mars-pnt (constelación areoestacionaria MARCONI, src/mars_pnt.rs) + un simulador de rendimiento de GSE de extremo a extremo (src/gse_sim.rs). Validado por simulación (cifra de mérito de covarianza/lazo cerrado); dinámica heliocéntrica contrastada con JPL (Jet Propulsion Laboratory) DE440 (137 m @ arco de 1 día, xval/anise-mars-od). Falta: validación con datos de seguimiento reales de DSN/ESTRACK (ESTRACK: Red Europea de Seguimiento Espacial); la gravedad de Marte en su marco nativo (el campo GMM-3 de d/o 120 se carga desde la tabla SHADR de PDS, from_shadr, VALIDATED frente a pyshtools, y se conecta mediante Body::with_gravity_field, pero se evalúa en el marco de IAU y no en el suyo propio, Konopliv-2006); efemérides de grado DE en el núcleo (restringidas a kernels en xval). P3 |
| Sistema solar y PNT alrededor de cualquier cuerpo | parcial | Tipo de escenario solar-system: posiciones, velocidades y constantes físicas del Sol, los planetas, Plutón, la Luna y siete lunas principales en una época, con el tiempo de luz entre cuerpos; las posiciones de los planetas (elementos de Standish de JPL) y el tiempo de luz están VALIDATED frente a JPL Horizons (tests/solar_system_horizons_reference.rs), las lunas, Plutón y la tabla de planetas exteriores siguen siendo MODELLED. Tipo de escenario body-pnt: un orbitador o módulo de aterrizaje alrededor de cualquier cuerpo catalogado (Marte, la Luna, Europa, Ganímedes, Titán y el resto) que navega con pseudodistancias unidireccionales de una constelación Walker local más una distancia bidireccional opcional desde la Tierra: MODELLED. Sin kernel de efemérides planetarias en el núcleo (elementos analíticos), las órbitas de relé de body-pnt usan solo J2 (los campos completos GMM-3 de Marte de d/o 120 y GRAIL GL0660B de la Luna de d/o 660 se cargan desde tablas SHADR de PDS y se asocian a un Body para el propagador, src/gravity_pds.rs). P3 |
| Campañas / composición de misiones | parcial | Tipo de escenario campaign (src/campaign.rs): tipos de escenario existentes encadenados en una línea temporal compartida (por ejemplo jamming, luego spoofing, luego holdover con un INS avanzando por inercia, luego una alarma de integridad, luego recuperación), barridos de parámetros y conjuntos de Monte Carlo con semilla sobre cualquier tipo de escenario, y varios escenarios bajo condiciones compartidas con un resumen combinado; cada número se lee de una ejecución real del tipo de escenario miembro. Las identidades de composición se prueban (tests/campaign_composition_reference.rs: una campaña de una sola fase reproduce la ejecución independiente byte a byte); MODELLED. Una sección [optimize] (rejilla o Nelder–Mead acotado sobre una a tres claves, una métrica, minimizar, maximizar o alcanzar un objetivo) alcanza sus umbrales preregistrados de forma cerrada y de fuerza bruta (tests/campaign_optimize_reference.rs); MODELLED, una búsqueda local sin afirmación de óptimo global, y sin método de gradiente ni bayesiano. P3 |
| Informes, animación y salidas | parcial | Cada ejecución escribe result.json, un gráfico y un informe (report.html, report.json) cuyas etiquetas se leen de la matriz de verificación y cuyo comando registrado reproduce el resultado byte a byte (tests/advanced_report_cli.rs); --animate (svg, html o fotogramas) representa una serie temporal como animación (src/animation.rs, ANIMATION.md); --export escribe los formatos de intercambio de la fila de interoperabilidad. Son representaciones de la ejecución, no evidencia sobre la física. |
Ecosistema y preparación (se sigue con honestidad, no es una capacidad del código)#
| Área | Estado | Nota |
|---|---|---|
| Enlaces de lenguaje y empaquetado | parcial | Rust + Python (abi3) + WASM en tres registros. Superficies tipadas (0,36, CAP-34): RunOutput de Python con accesores de NumPy (array, columns, series) y ScenarioKind / ErrorKind / KindMeta con tipos en stubs; run_typed de JavaScript (un objeto RunOutput tipado) y scenario_kinds, con el mismo vocabulario en las declaraciones de TypeScript. Los documentos de resultados siguen siendo JSON por tipo de escenario, tipados solo por su sobre compartido (units, versiones) |
| Educación / UX (experiencia de usuario) de incorporación | parcial | Área de pruebas del navegador con modo guiado entregado: controles deslizantes guiados adaptados al escenario (web/studio/lib/guided.mjs, hasta seis mandos por escenario) y una visita guiada interactiva (web/studio/lib/tour.mjs, repetible desde el área de pruebas). Cada ejecución obtiene además una frase de significado en lenguaje llano y sus cifras clave, leídas del documento de resultados (web/studio/lib/meaning.mjs, con plantillas por tipo de escenario en meaning-kinds.mjs; un tipo de escenario sin plantilla obtiene su primera cifra destacada expresada en lenguaje llano). Falta: explicaciones guiadas por cifra más allá de esa frase (el GLOSSARY.md en lenguaje llano las cubre) |
| Comunidad / gobernanza | parcial | Andamiaje de gobernanza presente: GOVERNANCE.md (modelo de mantenedor benevolente + umbral técnico + frontera abierto/cerrado), CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md, plantillas de incidencias/PR (PR: pull request), FUNDING.yml, dependabot. Fundador único; una comunidad externa activa (colaboradores, citas) depende de las personas y del tiempo y sigue formándose (difusión pendiente de revisión) |
| Preparación para financiación y contratación | ninguna | TRL ~3; todavía sin citas ni contratos de agencias (véanse las notas de estrategia) |
Actualizado el 2026-10-29 para el motor 0.40.0 (92 tipos de escenario, de kshana kinds --json; nuevos en 0.40.0: mission-thread, lunar-orbit-rendezvous, lunar-descent, lunar-surface y lunar-ascent). 2026-10-22: motor 0.39.0, 87 tipos, ningún tipo nuevo. 2026-10-19: motor 0.38.0, 87 tipos (nuevos en 0.38.0: holdover-test, gnss-ssv y lunar-infrastructure). 2026-10-18: 84 tipos (nuevo en 0,37: optical-atmosphere). 2026-10-16: 83 tipos (nuevos en 0,36: acm-link, aocs, ascent-losses, contact-schedule, entry-heating, eo-radiometry, lunar-station-coverage y time-transfer-budget). 2026-10-10: motor 0.35.0, 75 tipos, ningún tipo nuevo. 2026-10-09 y 2026-10-08: revisiones anteriores. 2026-10-04: la fila de señal de navegación anota la capa IQ de 0.31.0. 2026-09-29: se añaden las filas de LEO-PNT, espectro, PNT del sistema solar / de cualquier cuerpo, campañas y salidas. Antes: alineado con la matriz de 27 filas de capacidades de la gran auditoría del 2026-06-02; fila de PNT de espacio profundo / Marte añadida en v0.17.0. Las incorporaciones de PNT cuántico (holdover de reloj sin GNSS src/holdover.rs, presupuesto compuesto de navegación a estima cuántico-inercial QuantumNavBudget, compromiso de diseño de códigos de medición de distancia CodeFamily, matriz de verificación verificada por máquina src/verification.rs) se integraron en las filas de Temporización, Sensores de PNT cuántico, Señal de navegación y V&V, cada una etiquetada como validada o modelada según su referencia independiente real.
Adiciones del demostrador FutureNAV (modeladas, contrastadas internamente, no validadas externamente): (1) Banco de pruebas de evaluación de detección de deterioros de RF mediante aprendizaje automático src/impairment_eval.rs: un corpus de deterioros sintético etiquetado (basado en parámetros, no en IQ) + un arnés de ROC/AUC/confusión/Pfa-Pmd independiente del detector (ROC: característica operativa del receptor; AUC: área bajo la curva) con protección contra fugas de datos y partición estratificada; los detectores incluidos son líneas base transparentes de métodos publicados, no SOTA (estado del arte), y un AUC alto aquí demuestra la canalización, no el rendimiento en campo. (2) Motor de compromiso PNT cuántico frente a clásico src/quantum_trade.rs: ingesta de ADEV medido (ajuste NNLS (mínimos cuadrados no negativos) de σ_y²(τ)=q_wf/τ + q_rw·τ/3 + q_drift·τ³/20, comprobado de ida y vuelta frente a q_from_allan), una tabla de beneficio de holdover de temporización/inercial que lleva en el propio artefacto la advertencia sobre la hipótesis de nivel mínimo, y una envolvente de resiliencia frente al tiempo sin GNSS; cuantifica el beneficio cuántico de un socio, nunca valida el dispositivo. Ambos fueron revisados de forma adversarial (se detectaron y corrigieron un error de base de deriva τ²→τ³ y una afirmación falsa de resiliencia "acotada indefinidamente"). 911 pruebas de la biblioteca en el momento de esa adición, fmt+clippy limpios.
Adición de intercambio / formato estándar (src/interchange.rs): el Kshana Interchange Format (KIF), un Envelope neutro, versionado y autodescriptivo que envuelve cualquier artefacto (escenario, resultado, estudio de compromiso) con una etiqueta format reconocible, la SCHEMA_VERSION de fuente única de verdad (la versión del esquema, antes copiada como literal en 15 lugares, ahora pertenece a una única constante a la que hace referencia todo el crate), el engine_version productor y un contrato de compatibilidad explícito y probado (compatibility(): la misma versión mayor y una menor igual o anterior se pueden leer bajo la disciplina de campos aditivos; una versión menor más nueva o una versión mayor distinta se rechaza en la frontera mediante Envelope::parse en lugar de analizarse mal en silencio). Con ida y vuelta (wrap→to_json→parse→payload_as::<T>()) para cualquier carga útil Deserialize; deliberadamente sin marcas de tiempo para preservar la reproducibilidad bit a bit de Kshana. Documentado en SCHEMA.md para que el formato sea citable, y no solo emitido: el posicionamiento de "estándar en espera" del núcleo abierto. 923 pruebas de la biblioteca en el momento de esa adición, fmt+clippy limpios.
Adiciones de la fase de dominancia de FutureNAV (modeladas, contrastadas internamente, no validadas externamente): (1) Capa frugal de coste por cobertura / ROI (retorno de la inversión) src/frugal.rs: una capa de planteamiento de beneficios sobre el motor de dimensionado de constelaciones (walker) que informa del coste por punto porcentual de cobertura y del ROI de cobertura por euro frente a una línea base; el coste por satélite es un intervalo bajo/nominal/alto suministrado por quien llama y con fuente (sin precios puntuales inventados), de modo que las salidas son rangos y no puntos espurios; un planteamiento económico modelado de una cifra de cobertura modelada, no un presupuesto. (2) Asignación de impacto en la integridad de detecciones perdidas src/integrity_impact.rs: asigna un sesgo de posición no detectado, inducido por spoofing o jamming, a su error efectivo → región de Stanford (disponible / sistema no disponible / engañoso / peligrosamente engañoso) frente a límites de alerta específicos del contexto (cielo abierto frente a urbano, HAL frente a VAL), componiendo el classify_stanford de RAIM anclado externamente; el puente entre detección perdida y límite de alerta es modelado, no una asignación de integridad certificada. Ambas se asignan a la matriz de verificación comprobada por máquina (src/verification.rs, invariante Validated⇒ExternalDataset intacto; el recuento vigente de filas está en la cabecera generada de VERIFICATION-MATRIX.md). La validación cruzada / protección contra fugas / partición estratificada por parámetros para el arnés de evaluación de IA ya se entregó en src/impairment_eval.rs (stratified_split, Split::has_leakage). 951 pruebas de la biblioteca en el momento de esa adición, fmt+clippy limpios.
Adiciones del estudio de la brecha de optimismo de FutureNAV (modeladas, contrastadas internamente con formas cerradas, no validadas externamente, no una afirmación de simulación a campo): un estudio sintético controlado de la brecha de optimismo del AUC entre dentro y fuera de la distribución para detectores de deterioros de RF. (1) Detectores aprendidos src/impairment_ml.rs: un mapa de características fijo + un estandarizador ajustado al entrenamiento, una línea base de regresión logística (descenso de gradiente determinista por lotes completos) y un MLP (perceptrón multicapa; retropropagación SGD (descenso de gradiente estocástico) con semilla) de una capa oculta tras el mismo rasgo ImpairmentDetector que usan las líneas base de métodos publicados. (2) Estadísticas derivadas a mano src/eval_stats.rs: intervalos de confianza (IC) por bootstrap de percentiles, varianza/IC del AUC de DeLong, ρ de Spearman y regresión ridge, cada una contrastada con una forma cerrada (AUC binormal Φ(d′/√2), una varianza de DeLong calculada a mano, un ρ de manual con rangos empatados, recuperación exacta de OLS (mínimos cuadrados ordinarios)). (3) El estudio src/impairment_study.rs: AUC por clase, la tendencia de ley de escala por (detector,class) (brecha frente a 1−gravedad) y un predictor ridge de la brecha solo con datos dentro de la distribución que estima la brecha de optimismo únicamente a partir de diagnósticos dentro de la distribución, puntuado dejando fuera un detector y dejando fuera una clase frente a una línea base que predice la media. Artefacto de un solo comando mediante cargo run --release --example optimism_study. Cada número es un AUC sobre etiquetas derivadas de un modelo en un corpus sintético basado en parámetros; la brecha es un desplazamiento de gravedad de sintético a sintético, nunca un resultado de detección en campo. Asignado a la matriz de verificación comprobada por máquina (src/verification.rs, invariante Validated⇒ExternalDataset intacto).