Kshana · क्षण · l'instant précis
Un simulateur open source pour la résilience PNT (positionnement, navigation et synchronisation temporelle).
État de l'intégration continue sur main
Couverture de lignes proche de 95 % de src/, mesurée dans docs/COVERAGE.md et contrôlée à 85 % en intégration continue
176 capacités sur 401 VALIDATED par rapport à une référence externe indépendante, d'après la matrice de vérification
État du contrôle qualité SonarQube Cloud
Version v0.40.0
Licence : AGPL-3.0-only
DOI 10.5281/zenodo.20528627, l'enregistrement conceptuel Zenodo de chaque version
Une licence commerciale est disponible auprès d'Ashforde® OÜ, voir Éditions
kshana sur crates.io, la version publiée actuelle
kshana sur PyPI, la version publiée actuelle
kshana sur npm, la version publiée actuelle
Ouvrir Kshana Studio · Installer · Capacités · Preuves · Recherche · Documentation · Citer
Sommaire
- Répétez la minute où le GNSS s'éteint
- Nouveautés de la version 0,40, Nouveautés de la version 0,39, Nouveautés de la version 0,38 et 0,38 en détail : notation jammertest, les indicateurs propres du récepteur, entrées machine, synchronisation temporelle et holdover, paquets de normes, LunaNet AFS, l'aller-retour de laboratoire, kshana-bench, l'observatoire, exportateurs, optique, navigation de l'utilisateur spatial et infrastructure lunaire
- Kshana Studio et chaque page du Studio
- Capacités : le tableau des domaines, chaque type de scénario par famille, chaque commande, chaque surface
- Comment se déroule une exécution, Missions
- Preuves : le registre, domaines de capacités
- Installer, Architecture (et les diagrammes), assistant d'IA
- Éditions, Recherche, Citer, Licence
- Référence : utilisation, format de scénario, sortie, organisation du dépôt, FAQ, dépannage, gestion des versions, feuille de route, contribuer, documentation
Répétez la minute où le GNSS s'éteint#
Kshana rejoue le brouillage, le leurrage et le holdover d'horloge lorsque les signaux GNSS (système mondial de navigation par satellite) défaillent, et vous dit combien de temps un système garde l'heure et la position dans son budget, et quelle horloge ou quel capteur apporte le plus de marge. C'est un seul moteur Rust. Il s'exécute dans un terminal, un notebook, un IDE (environnement de développement intégré), un assistant d'IA (intelligence artificielle), ou dans votre navigateur.
Chaque exécution est reproductible bit à bit à partir du scénario, de la graine et de la version du moteur. Chaque capacité porte l'une de trois étiquettes dans un registre vérifié par machine : VALIDATED (une référence externe indépendante concorde), MODELLED (cohérent en interne, et dit à haute voix) ou PARTNER (un partenaire matériel en est responsable).
État : v0.40.0. Un substrat de simulation validé et reproductible pour la résilience PNT. La synchronisation temporelle et le holdover viennent en premier, parce que ce domaine est le mieux validé. Kshana est un instrument d'étude et d'arbitrage : pas un matériel générateur de signaux radiofréquence (RF) (il ne pilote aucune radio et n'émet rien ; sa sortie au niveau du signal est constituée de fichiers d'échantillons IQ en bande de base pour des récepteurs logiciels), pas un récepteur GNSS matériel ou certifié (son récepteur logiciel est un outil d'analyse) et pas un produit de vol. Nouveau dans le domaine ? Commencez par l'introduction en langage clair et le glossaire.
Nouveautés de la version 0,40#
0,40 ajoute un budget d'erreur au niveau de la mission, étiquette chaque figure et chaque tableau avec son niveau de preuve, lit des journaux d'horloge mesurés, vérifie les soumissions de partenaires de données, estime où peut se trouver un émetteur d'interférence, et parle dix-sept langues en plus de l'anglais. Le registre compte désormais 401 lignes : 176 VALIDATED, 221 MODELLED, 4 PARTNER. Aucune ligne n'a été promue à VALIDATED, et chaque échec ci-dessous est épinglé par un test.
- Fil de mission. Le type
mission-threadenchaîne des phases du lancement à l'entrée (launch-ascent,leo-rendezvous,tli-and-cruise,entryet quatre types lunaires) avec des règles de transfert déclarées, une marge par rapport à des exigences déclarées et le maillon le plus faible ; un exemple de bout en bout de classe Artemis sur 11 phases (segments terrestre et lunaire), 92 types de scénario au total. Chaque nombre est MODELLED. La propagation cislunaire par rapport à la trajectoire publique d'Artemis I n'atteint pas son seuil préenregistré (45,3 km et 0,25 m/s contre 5 km et 0,05 m/s ; la cause est de petites manœuvres que le modèle n'inclut pas), et le propagateur lunaire par rapport à l'orbite de CAPSTONE n'atteint pas le sien (136,8 km contre 25 km à la fin d'une révolution) ; la comparaison avec LRO est atteinte. Les lignes restent MODELLED (Fil de mission, segment lunaire). Dans le Studio, le fil se lit à/studio/mission-thread/. - Étiquettes de preuve. Chaque figure et chaque tableau qu'une exécution écrit porte le niveau et les identifiants de lignes du registre sur lesquels il repose, lus dans la matrice.
- Horloges mesurées. Huit formats de journaux d'horloge sont lus (
docs/CLOCK-LOG-FORMATS.md) et une série ajustée peut piloter le holdover. Par rapport à des seuils préenregistrés, l'ajustement n'atteint pas F1(a) sur cinq enregistrements sur six et F2 sur un ; les deux restent MODELLED (Journal des modifications). - Partenaires de données.
kshana partner checkvérifie le format d'une soumission et ne note rien (docs/PARTNER-DATA.md). - Région de l'émetteur.
kshana interference-map locatedonne une région et une ellipse, jamais un simple point, à partir de rapports ADS-B ou AIS. Comparé une fois avec les sites d'émetteurs de Jammertest 2025, le résultat est NOT ASSESSABLE pour les deux sources (trop peu de sessions programmées dans les données ouvertes), de sorte que la ligne reste MODELLED (Carte d'interférence). - Benchmark. La nouvelle campagne 0,40 atteint A3, D3 (tous deux EXPLORATORY), R3 et R4 ; A2, D1 et R1 restent NOT MET (Bench).
- Langues. nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja et zh-Hans, sous forme de traductions automatiques qu'aucun locuteur natif n'a relues ; l'anglais fait foi, et les exécutions non anglaises prennent environ deux fois plus de temps (
docs/i18n.md).
Nouveautés de la version 0,39#
La version 0,39 n'ajoute aucune fonctionnalité et ne change aucun résultat ; la sortie du moteur est celle de la version 0,38. Elle corrige un point en ligne de commande, met à jour des dépendances de l'outillage de validation croisée, et énonce en entier les verdicts du benchmark.
- Ligne de commande.
kshana kinds | head(toute sortie standard fermée) ne provoque plus de panique : le programme se termine silencieusement avec le code 141, comme d'autres outils pour un tube fermé. Les autres erreurs d'écriture se signalent toujours. - Dependencies.
memmap20.9.11 dans les deux verrous de recoupement ANISE etpillow13.0.0 etcertifi2026.10.19 dans les versions figées de l'environnement de référence, le tout sousxval/: rien de ce qui est livré n'a changé. - kshana-bench, tous les verdicts. Par rapport aux seuils préenregistrés, trois sont NOT MET, chacun figé par un test : A2 (
agc_k_sigmaAUC 0,766 face à au moins 0,80), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée, non réexécutée). Aucun seuil n'a été assoupli (Bench).
Nouveautés de la version 0,38#
La version 0,38 rend l'arbitre neutre mesurable : elle note des journaux de récepteur par rapport à un calendrier de test publié, lit davantage de récepteurs et de capteurs, teste des systèmes de synchronisation temporelle, et livre un benchmark et un observatoire des interférences. Elle reste indicative : rien ici n'est certifié, aucun résultat n'est une homologation, et rien n'émet. Chaque ligne énonce ce que détient le registre pour elle (comment une étiquette est obtenue) ; un état ne nomme que ce qui a été vérifié, et la ligne du registre et la page liée disent ce qui ne l'a pas été.
| Nouveau dans la version 0,38 | Ce que cela fait, et pourquoi | État dans le registre | Lu |
|---|---|---|---|
| Notation jammertest | kshana jammertest import lit le catalogue de tests et le plan d'émission publiés de la NPRA comme vérité planifiée ; jammertest score note un journal de récepteur test par test (latence de détection, alarmes manquées, fausses alarmes, temps de récupération), sous forme de paquet de preuves signé si vous fournissez une clé |
MODELLED : une ligne du registre. Les seuils ont été préenregistrés avant toute exécution notée ; sur les données JammerTest 2024, la règle de données minimales a échoué dans les deux exécutions (4 et 7 fenêtres notables contre 10 requises), de sorte qu'aucun seuil n'est évaluable et que rien n'est affirmé | Jammertest |
| Les indicateurs propres du récepteur | UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG et NovAtel RXSTATUS lus dans un self_report par époque et comparés aux alarmes de Kshana (les deux, récepteur seul, Kshana seul, aucun) ; un lecteur Septentrio SBF et une entrée --serial en lecture seule |
MODELLED ; l'accord entre le détecteur d'un récepteur et celui de Kshana n'est pas une validation | Confiance du récepteur |
| Davantage de récepteurs et de capteurs | RTKLIB .pos, NovAtel OEM7, C/N0 RTCM 3 MSM4/MSM7 (tiré des tables pyrtcm sous licence BSD, non du texte RTCM), flux de moniteur GNSS-SDR, un journal d'IMU comme second capteur, un paquet ROS 2, un pont gnss_lib_py, et imu-fit pour les paramètres de capteur hybride |
MODELLED : six lignes du registre ; jeux d'essai écrits par nous seulement, aucune capture d'un récepteur réel, d'une IMU, d'une exécution GNSS-SDR ou d'un graphe ROS n'a été lue | Entrées machine |
| Tests de synchronisation temporelle et de holdover | le type de scénario holdover-test note un test de holdover (GNSS retiré par l'opérateur, holdover, récupération) à partir d'un relevé d'erreur de temps mesuré par rapport à des masques ITU-T, « mesuré par rapport au masque » ; lecteurs de journaux linuxptp et chrony ; les étapes matérielles et le champ lab-attestation |
MODELLED : deux lignes du registre ; les heures sont la déclaration de l'opérateur, non vérifiées | HIL de synchronisation temporelle, Sécurité du matériel |
| Paquets de normes, LunaNet AFS, aller-retour de laboratoire | paquets notés pour DHS RPCF, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F par rapport à des seuils énoncés avant l'exécution, « apporte des éléments de preuve en faveur de » ; une table de correspondance NIST IR 8323r1 ; un générateur et vérificateur de codes LunaNet AFS ; un paquet signé qui relie le scénario d'une exécution de laboratoire, les conditions de test, le journal du récepteur et la note | MODELLED pour les paquets et l'aller-retour ; la vérification des codes AFS est VALIDATED par rapport à ses colonnes de contrôle imprimées (voir les lignes du registre) | Normes, LunaNet AFS |
| kshana-bench et l'observatoire | tâches, partitions et métriques fixes pour la détection d'interférences, la détection IQ, la prédiction de holdover et l'écart d'optimisme, avec un jeu réservé scellé et un classement statique ; un produit quotidien d'interférences reproductible avec un délai de 24 h, des cellules grossières et aucune attribution | pas de ligne de registre propre : il note des soumissions, et ses références de base sont étiquetées MODELLED dans les fichiers de résultats ; par rapport aux seuils préenregistrés, le scoreur, C1 à C3 et D2 sont atteints et trois seuils sont NOT MET (figés par des tests) : A2 (agc_k_sigma AUC 0,766 face à au moins 0,80 sur la partition de test), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée, non réexécutée) ; voir xval/bench/RESULTS-v2.md |
Bench, Observatoire |
| Exportateurs | la télémétrie de confiance sous forme de messages de découverte et d'état MQTT pour Home Assistant (publication seulement, sans identifiants) à côté de Prometheus, CEF, LEEF et OTLP | MODELLED : une ligne du registre | Télémétrie de confiance |
| Marge de liaison optique en fonction du temps | le type de scénario optical-atmosphere peut écrire une réalisation à graine fixe de la météo d'un site sous forme de série de marges de liaison |
MODELLED : une ligne du registre ; un tirage du modèle, non le climat | Atmosphère optique |
Points forts de la version 0,37 : journal des modifications. La liste complète de la version 0,38 figure dans le journal des modifications.
La version 0,38 en détail#
Chaque capacité du tableau ci-dessus, en quelques lignes : ce qu'elle fait, une commande pour l'exécuter, une image tracée à partir d'une exécution réelle du moteur, et ce que le registre détient pour elle. Les images sont écrites par tools/gen_figures_038.py dans docs/figures/0.38/ (jamais dessinées à la main) : python3 tools/gen_figures_038.py les réécrit à partir d'un moteur compilé, et --check échoue si l'une est périmée ou si sa légende ici diffère. Lorsqu'une entrée est un journal, il s'agit d'un journal fictif que le script écrit, parce que les vrais journaux de tiers ne sont jamais intégrés au dépôt, et la légende le dit. Tout ce qui suit est indicatif : non certifié, non une homologation, et rien n'émet. Un état nomme ce qui a été vérifié et rien de plus ; comment une étiquette est obtenue.
Notation jammertest#
kshana jammertest import transforme le catalogue de tests et le plan d'émission publiés de la NPRA en vérité planifiée, et kshana jammertest score note un journal de récepteur par rapport à elle : pour chaque test planifié, s'il a été détecté, avec quel retard, et combien de temps le récepteur a mis à récupérer, ainsi que les fausses alarmes en dehors de chaque créneau. Le catalogue est téléchargé, jamais intégré au dépôt.
xval/jammertest-plan/fetch.sh ../jammertest-plan
kshana jammertest score session.toml --catalog ../jammertest-plan/testcatalog2025.json \
--plan ../jammertest-plan/plan-tuesday-2025-09-16.json --location 1 --json
État dans le registre : MODELLED. Les seuils ont été fixés avant toute exécution notée ; sur les données JammerTest 2024, la règle de données minimales a échoué dans les deux exécutions, de sorte qu'aucun seuil n'est évaluable et que rien n'est affirmé. Jammertest.
Les indicateurs propres du récepteur#
UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG et NovAtel RXSTATUS sont lus dans un self_report par époque et placés à côté des alarmes de Kshana : les deux, récepteur seul, Kshana seul, ou aucun. Un lecteur Septentrio SBF et une entrée --serial en lecture seule alimentent la même comparaison. Aucun des deux côtés n'est la vérité terrain.
kshana receiver-trust session.toml # [log] format = "ubx", path = "receiver.ubx"
État dans le registre : MODELLED. L'accord entre le détecteur d'un récepteur et celui de Kshana n'est pas une validation. Confiance du récepteur.
Davantage de récepteurs et de capteurs#
RTKLIB .pos, NovAtel OEM7, C/N0 RTCM 3 MSM4/MSM7, flux de moniteur GNSS-SDR, un journal d'IMU comme second capteur, un paquet ROS 2 et un pont gnss_lib_py aboutissent tous à la même chronologie receiver-trust. imu-fit lit les paramètres de capteur dont les scénarios hybrides et de fusion ont besoin dans un journal d'IMU stationnaire, de sorte qu'un scénario peut être exécuté avec le capteur que vous avez réellement.
kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu
État dans le registre : MODELLED. Jeux d'essai écrits par nous seulement ; aucune capture d'un récepteur réel, d'une IMU, d'une exécution GNSS-SDR ou d'un graphe ROS n'a été lue. Entrées machine.
Tests de synchronisation temporelle et de holdover#
Le type de scénario holdover-test note un test de holdover (GNSS retiré par l'opérateur, holdover, récupération) à partir d'un relevé d'erreur de temps mesuré par rapport à des masques ITU-T, et le dit dans ces mots : mesuré par rapport au masque. Des lecteurs de journaux linuxptp et chrony l'alimentent ; les étapes matérielles et le champ lab-attestation disent qui a déclaré quoi.
kshana scenarios/holdover-test-example.toml
État dans le registre : MODELLED. Les heures auxquelles le GNSS a été retiré et rétabli sont la déclaration de l'opérateur, non vérifiées. HIL de synchronisation temporelle, Sécurité du matériel.
Paquets de normes#
Paquets notés pour les profils de test PNT résilient du DHS, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F, plus une table de correspondance NIST IR 8323r1 dans compliance-report. Chaque test exécute un scénario fourni et compare un champ de résultat à un seuil énoncé avant l'exécution ; un test qui exige un journal de récepteur est indiqué comme nécessitant une entrée, et non noté. La formulation est « apporte des éléments de preuve en faveur de ».
kshana standards-pack list
kshana standards-pack run imo-circ-1575
État dans le registre : MODELLED. Un seuil atteint dit qu'un scénario modélisé a atteint un seuil énoncé, rien au sujet d'un produit ; chaque échec est conservé et figé par un test. Normes.
LunaNet AFS#
Le générateur de codes du signal direct augmenté LunaNet (codes de Gold, de Weil et tertiaires, la trame du message et son codage d'erreur) et un vérificateur pour un flux de symboles enregistré ou généré, figé sur une édition de la spécification.
kshana lunanet-afs-check spec
kshana lunanet-afs-check generate --frames 2 --out afs.sym
kshana lunanet-afs-check symbols afs.sym
État dans le registre : VALIDATED pour les vérifications des codes et de la synchronisation, par rapport aux valeurs que la spécification imprime (qu'elle marque TBC) ; une vérification est NOT MET, conservée et figée (une colonne imprimée du code tertiaire diffère : le document imprime la même valeur pour deux PRN). Les mots LDPC et CRC des sous-trames 2 à 4 ne sont pas vérifiés. Les lignes du registre disent exactement lesquels. LunaNet AFS.
Aller-retour de laboratoire#
kshana.test-conditions/1 est une description publiée de ce qu'un laboratoire a fait (événements, heures, puissances). kshana evidence round-trip relie le condensat du scénario, le condensat des conditions, le condensat du journal du récepteur et la note en un seul paquet signé, et refuse un paquet dont les conditions et le scénario de notation ne s'accordent pas sur les événements. Kshana ne produit ni ne rejoue jamais de signal : la façon dont un scénario est parvenu à un récepteur relève de la responsabilité de l'opérateur.
kshana evidence --help
L'image est la disposition d'un paquet. État dans le registre : MODELLED. Conditions de test, Test bench.
kshana-bench#
Tâches, partitions et métriques fixes pour la détection d'interférences, la détection IQ, la prédiction de holdover et l'écart d'optimisme, avec un jeu réservé scellé et un classement statique. Il note des soumissions ; ce n'est pas un classement de récepteurs.
kshana bench baseline --task d --split test --out results/
État dans le registre : pas de ligne de registre propre ; les références de base sont étiquetées MODELLED dans les fichiers de résultats. Par rapport aux seuils préenregistrés, le scoreur, C1 à C3 et D2 sont atteints et trois seuils sont NOT MET, chacun figé par un test : A2 (agc_k_sigma AUC 0,766 face à au moins 0,80 sur la partition de test), D1 (plus grand écart 0,0301) et la tâche (b) R1 (reportée de la campagne précédente, non réexécutée). Les chiffres figurent dans xval/bench/RESULTS-v2.md. Bench.
Observatoire des interférences#
Un produit par jour UTC et par région à partir d'une archive ouverte de positions d'aéronefs, sur une grille grossière fixe : chaque cellule est dégradée, non dégradée, ou non observée (ce qui ne veut pas dire « dégagée »). Publié au plus tôt 24 h après la fin du jour, avec les petites cellules supprimées et sans attribution de cause.
kshana interference-map daily /path/to/extracted/2026-09-15 \
--dataset adsb-lol --day 2026-09-15 --bbox 53.5,9.0,66.0,31.0 --out products/
L'image représente les jours d'échantillon enregistrés, non un produit de l'observatoire. État dans le registre : MODELLED : pas de référence externe, pas de vérité terrain et pas d'attribution de cause ; une cellule non observée n'a pas été évaluée, ce qui n'est pas la même chose que dégagée. Méthode de l'observatoire.
Exportateurs#
Télémétrie de confiance sous forme de texte Prometheus, CEF, LEEF, OTLP et de messages de découverte et d'état MQTT pour Home Assistant. La commande ne publie que vers une destination que vous lui donnez et ne détient aucun identifiant.
kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format cef
État dans le registre : MODELLED. Télémétrie de confiance.
Marge de liaison optique en fonction du temps#
Le type de scénario optical-atmosphere peut écrire une réalisation à graine fixe de la météo d'un site sous forme de série de marges de liaison : épisodes nuageux, une colonne d'eau liquide pour chacun, un échantillon de scintillation par pas. La page Optical PNT du Studio ouvre les scénarios optical-atmosphere.
kshana scenarios/optical-atmosphere-network.toml
État dans le registre : MODELLED. Un tirage du modèle, non le climat. Atmosphère optique.
Nouvelles vues du Studio#
kshana.dev/studio gagne un Bridge replay (deux exécutions côte à côte sur une même horloge de mission, à /studio/replay/), une page Optical PNT (/studio/optical/), une page de test de holdover (/studio/holdover/) et une visionneuse de l'observatoire (/studio/observatory/). Elles exécutent le même moteur dans le navigateur, rien n'est téléversé, et elles portent le même avertissement indicatif. Les images ci-dessus sont tracées par un script à partir de la sortie propre du moteur ; ce ne sont pas des captures d'écran de ces pages.
Navigation de l'utilisateur spatial (gnss-ssv)#
Pour un engin spatial au-dessus, autour ou bien au-delà des orbites GNSS : combien de signaux GNSS il peut utiliser, quelle est leur puissance, quelle est la qualité de la géométrie, et ce qu'un filtre embarqué peut en faire. Un seul type de scénario, quatre modes, choisis par les tables du scénario : une coquille d'utilisateurs (la part du temps avec un et quatre signaux, par constellation), une trajectoire (signaux, C/N0, dilution de précision et le milieu du rayon rasant le long d'une orbite), une exécution de navigation (un filtre à neuf états sur des pseudodistances, jusqu'à la Lune) et une formation (navigation relative de satellites adjoints autour d'un chef). La source publique pour la comparaison de disponibilité est le livret interopérable Space Service Volume du GNSS (UN OOSA ST/SPACE/75, du Comité international sur les GNSS), qui est lui-même une simulation ; il est téléchargé, jamais intégré au dépôt. Page complète : docs/SSV.md.
kshana scenarios/gnss-ssv-shell.toml # shell: the upper space service volume, reduced size
kshana scenarios/gnss-ssv-heo.toml # trajectory: a high Earth orbit, limb medium
kshana scenarios/gnss-ssv-nav-lunar.toml # navigation: an onboard filter toward the Moon
kshana scenarios/gnss-ssv-formation-heo.toml # formation: relative navigation
État dans le registre : MODELLED, et la comparaison avec le livret échoue pour l'essentiel. Les seuils ont été fixés avant l'exécution. Sur huit, seuls S0 (le bilan de liaison inverse, 13 valeurs sur 13) et S6 (la mission lunaire) sont atteints. S1 à S5 et S7 sont NOT MET : la géométrie du volume de service supérieur et inférieur (43 cellules sur 52 et 48 sur 52), le volume de service supérieur à 15/20/25 dB-Hz, les six missions GEO, la mission HEO, et le diagramme paramétrique de lobes secondaires par rapport aux diagrammes de panneaux GPS mesurés. Presque chaque échec de S1 à S5 concerne GLONASS, et le livret imprime deux angles de référence différents pour lui ; une variante de diagnostic qui utilise l'autre paire amène S1, S2 et S4 à toutes les cellules, mais elle ne remplace pas l'exécution de référence et aucune ligne n'est VALIDATED. Le filtre absolu de l'exécution en formation est aussi trop confiant (erreur normalisée au carré moyenne bien supérieure à la valeur d'environ 3 que donne un filtre cohérent).
Navigation de l'utilisateur spatial, ce que montre la comparaison.
Infrastructure lunaire (lunar-infrastructure)#
L'orbite et la surface de la Lune comme infrastructure de navigation et géodésique, en cinq études choisies par study : od-consistency (une détermination d'orbite embarquée par GNSS terrestre sur une orbite en halo, face à une détermination indépendante au sol), carrier-phase (fixation de l'ambiguïté entière entre des stations de surface et un orbiteur), frame-coestimation (le datum lunaire à partir de la télémétrie de stations terrestres avec et sans liaisons d'orbiteur), space-tie (écarts laser, VLBI et GNSS sur un seul engin spatial face à l'erreur de liaison locale) et geodesy-sensitivity (quelle famille d'observables voit les nombres de Love h2, k2 et l2). Le modèle est un modèle restreint à trois corps avec des simplifications indiquées et des entrées illustratives. Page complète : docs/LUNAR-INFRASTRUCTURE.md.
kshana scenarios/lunar-infrastructure-od-consistency.toml
kshana scenarios/lunar-infrastructure-carrier-phase.toml # quick; the scored run takes about eight minutes
kshana scenarios/lunar-infrastructure-frame-coestimation.toml
kshana scenarios/lunar-infrastructure-space-tie.toml
kshana scenarios/lunar-infrastructure-geodesy-sensitivity.toml
État dans le registre : MODELLED, et trois seuils sont NOT MET. La numérique est vérifiée par rapport à des programmes numpy et scipy indépendants ; rien n'est comparé à une mesure d'une grandeur lunaire, et rien n'est VALIDATED. Atteints : les deux solutions d'orbite sont cohérentes (q moyen 5,81 contre 6 attendu), et les liaisons d'orbiteur augmentent la plus petite valeur propre du datum d'environ 111 fois, en supposant une orbite connue. Non atteints : l'erreur de modèle injectée de 3e-10 m/s2 n'est pas détectée (C3 : la solution embarquée est connue à environ 350 m près, de sorte qu'environ dix mètres se cachent dans sa covariance) ; la fixation entière n'est pas obtenue (1 à 3 % de réussite à 25 dBi, et à 12 dBi enregistrés le problème ne peut pas être formé) ; et la moitié « trace » de G3 pour l'ajout d'une famille d'observables (la trace a augmenté dans 12 ajouts sur 28, chaque fois parce que la famille a augmenté le rang). Chaque échec est figé par un test. Infrastructure lunaire.
Kshana Studio#
Ouvrez kshana.dev/studio et tout le moteur s'exécute dans votre navigateur, compilé en WebAssembly. Rien à installer, et rien n'est téléversé. Le Studio offre deux vues du même moteur, et un commutateur dans l'en-tête permet de passer de l'une à l'autre en conservant le scénario, la vue et tous les réglages que vous avez modifiés.
La vue Simple est celle où le Studio s'ouvre. Elle part de questions (combien de satellites puis-je voir, puis-je me fier à ma position, combien de temps une horloge peut-elle garder l'heure, que fait un brouilleur à mon récepteur) et d'une carte de tout ce que le moteur peut faire, chaque domaine avec sa part de méthodes validées. Ouvrez un scénario et la réponse vient en premier : une phrase simple, écrite pour ce que ce scénario mesure, puis ses chiffres clés et un graphique. Cinq réglages au plus sont affichés, ceux qui changent le plus la réponse ; les autres attendent sous Réglages avancés. Comment cela est calculé explique la méthode, et Pour les chercheurs donne les chiffres propres du moteur, le fichier de scénario, le code pour l'exécuter depuis Python et la citation.

La vue Avancée est le tableau de bord complet : la bibliothèque de scénarios, cinq étapes numérotées (Choisir, Régler, Exécuter, Lire les résultats, Partager ou exporter), les chiffres clés avec des pastilles PASS et FAIL lorsque l'exécution énonce un seuil, et chaque panneau : vue d'ensemble, graphiques, cartes, relecture, le rapport du moteur et les exportations. Une seule zone de recherche atteint les scénarios, les domaines et les champs qu'ils contiennent, et vous pouvez épingler jusqu'à quatre exécutions et les comparer côte à côte.
L'écran d'ouverture de la vue Simple, et la vue Avancée après une exécution


Le code source du Studio et ses notes de compilation sont dans web/README.md.
Le site#
Le reste de kshana.dev est construit à partir des propres fichiers de ce dépôt et d'exécutions du moteur : missions, capacités, le registre de preuves, la recherche publiée et les éditions.

Capacités#
Un seul moteur couvre toute la chaîne de défaillance, du premier satellite brouillé à la dernière nanoseconde de holdover d'horloge. Le moteur compte 92 types de scénario ; kshana kinds les liste et docs/SCENARIOS.md documente chaque champ.
| Capacité | À quoi il répond |
|---|---|
| Spectre | comment un brouilleur prend la bande L du GNSS, bande par bande, seconde par seconde |
| Horloges et synchronisation temporelle | combien de temps chaque horloge garde l'heure après la perte du GNSS |
| Constellations autour de n'importe quel corps | couverture, dilution de précision et disponibilité autour de la Terre, de la Lune ou de Mars |
| Système solaire | où se trouve chaque planète, et le temps de propagation de la lumière de toute liaison |
| Navigation en orbite basse | un passage, une liaison, un message de navigation et une position fusionnée, étape par étape |
| Campagnes | une mission enchaînée, un balayage ou un ensemble Monte Carlo dans un seul scénario |
| Animation | la série temporelle d'une exécution sous forme de dessin animé, de lecteur ou d'images |
| Rapports | chaque chiffre avec son unité et son étiquette, en HTML (HyperText Markup Language) et JSON (JavaScript Object Notation) |
| Exports d'interopérabilité | orbites et géométrie pour d'autres outils : SP3, CCSDS OMM et OEM, CZML, KML, GeoJSON, STK et SigMF |
| Confiance maritime | la passerelle peut-elle se fier à cette position : un score de 0 à 100 et des motifs pour le NMEA d'un navire, en direct ou depuis un journal (à titre consultatif, pas un équipement de navigation homologué) |
| Flux NMEA de formation | NMEA de passerelle synthétique avec brouillage et leurrage scénarisés et un journal d'instructeur, pour la formation des équipages (texte seulement ; jamais pour les systèmes de navigation en service d'un navire ; à titre consultatif, pas un équipement de navigation homologué) |
| Carte des interférences | où des aéronefs et des navires ont signalé des données de navigation dégradées, et dans quelle mesure un itinéraire est touché |
| Région de l'émetteur | où peut se trouver, sous des hypothèses déclarées, une source de rapports de position dégradés : des régions à un niveau de confiance déclaré, un centroïde avec son ellipse, jamais un point (MODELLED ; kshana interference-map locate) |
| Paquets de preuves | un enregistrement technique signé, vérifiable hors ligne, de la fenêtre de journal d'un navire et de ce que le moteur en a calculé, pour un rapport d'incident (à titre consultatif, pas un équipement de navigation homologué) |
| Télémétrie de confiance | le flux de confiance sous forme de métriques Prometheus, d'événements SIEM et, en option, d'OpenTelemetry, avec un tableau de bord Grafana d'exemple (deploy/grafana/kshana-gnss-trust.json) |
| Signal K et OpenCPN | le score de confiance sur le serveur Signal K d'un bateau et dans OpenCPN, avec une version de référence pour un petit ordinateur placé à côté du récepteur (à titre consultatif, pas un équipement de navigation homologué) |
| Export pour banc d'essai | kshana bench-export : le mouvement du véhicule et les événements d'un scénario pour un simulateur GNSS de laboratoire (aucun signal n'est écrit), et comment noter ensuite le journal du récepteur |
| Cartographie de compliance et rapport | kshana compliance-report : quelles lignes de cadres publics de résilience un ensemble d'exécutions apporte des éléments de preuve en faveur de, et l'écart qui reste |
| Notebooks | tutoriels exécutables : flux de confiance et de formation pour un navire, exposition d'un itinéraire à une carte d'interférences, cartographie de compliance et le test bench, GDOP quantique contre classique |
| Vérificateur Galileo OSNMA | les données de navigation de quels satellites un récepteur peut authentifier par cryptographie, et pourquoi une vérification échoue ; Kshana n'accorde aucun droit au titre des droits de propriété intellectuelle de l'ICD OSNMA de l'UE (voir le NOTICE dans la page) |
Les formats d'exportation en toutes lettres : SP3 est le Standard Product 3 ; CCSDS OMM et OEM sont les Orbit Mean-elements Messages et Orbit Ephemeris Messages du Consultative Committee for Space Data Systems ; CZML et KML sont les Cesium et Keyhole Markup Languages ; STK est Systems Tool Kit ; SigMF est le Signal Metadata Format.
Chaque capacité, tracée à partir d'une exécution réelle : la cascade de la bande L, la carte de couverture, le système solaire et un passage en orbite basse
Exécutez n'importe lequel avec kshana example <scenario> > s.toml && kshana s.toml : les scénarios sont l-band-waterfall-jamming, constellation-multi-gnss-coverage, solar-system-tour et leo-pass-iridium.
Les capacités maritimes et d'interférence, tracées à partir d'entrées synthétiques enregistrées : un score de confiance, une carte d'interférences avec exposition d'itinéraire, un flux de formation et un paquet de preuves
Les quatre sont des données fictives et à titre consultatif : elles montrent le format et le comportement du logiciel, non la façon dont un récepteur ou un système se comporte face aux interférences. Exécutez le premier avec kshana receiver-trust examples/maritime-trust/session.toml, le deuxième avec kshana route-exposure sur les échantillons de examples/interference-map/, le troisième avec kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea (à des fins de formation seulement : ne l'envoyez jamais à un équipement de navigation en service), et le quatrième comme dans docs/EVIDENCE-PACKS.md.
Le tableau complet des capacités, domaine par domaine
Le détail complet, domaine par domaine, suit ; pour un registre de maturité par capacité, voir docs/CAPABILITY.md et docs/VALIDATION.md.
| Domaine | Capacité |
|---|---|
| Orbite et géométrie | Propagation SGP4/SDP4 (validée à 4,12 mm près par rapport aux 666 vecteurs AIAA 2006-6753) ; vrais éléments à deux lignes (un instantané Celestrak gps-ops enregistré et daté) ou constellations Walker-delta synthétiques dont les éléments moyens réalisent la formule i:T/P/F à moins de 1 km sur une propagation de 24 h ; visibilité multi-constellation, dilution de précision — géométrique, de position, horizontale, verticale et temporelle (GDOP/PDOP/HDOP/VDOP/TDOP), validée à 1e-6 près par rapport à gnss_lib_py 1.0.4, Stanford NAV Lab (Navigation and Autonomous Vehicles Laboratory), et disponibilité GNSS ; un optimiseur de conception de constellation sans gradient, un dimensionnement du nombre minimal de satellites par bandes de couverture (streets of coverage), un outil de comparaison multi-constellation, et un balayage de conception Walker qui tabule couverture / PDOP / temps de revisite sur une grille plans × satellites et rapporte les conceptions optimales au sens de Pareto. |
| Propagateur numérique | Un propagateur numérique Cowell (src/propagator.rs) complétant la voie analytique SGP4/SDP4, avec un modèle de forces hiérarchique à sept perturbations (src/forces.rs) : deux corps + le champ zonal J2–J6 complet (les coefficients harmoniques zonaux d'aplatissement de la Terre J2 à J6 ; le gradient analytique exact de son potentiel perturbateur), un géopotentiel harmonique sphérique tesséral EGM2008 jusqu'au degré/ordre 70 facultatif (Earth Gravitational Model 2008 ; src/gravity_sh.rs ; vrais coefficients de la NGA — la National Geospatial-Intelligence Agency des États-Unis —, récurrence de Legendre normalisée de Holmes–Featherstone, recoupée avec les fonctions de Legendre sous forme fermée et l'identité analytique ∇V), la gravité de troisième corps Soleil et Lune pilotée par l'époque (une éphéméride intégrée de faible précision, sans noyau DE/SPK — Development Ephemeris / SPICE Spacecraft and Planet Kernel), la pression de radiation solaire (modèle boulet de canon avec ombre conique ombre+pénombre), la traînée atmosphérique (densité exponentielle par morceaux de Vallado, atmosphère en corotation), la correction relativiste post-newtonienne de Schwarzschild, et le terme d'entraînement des référentiels de Lense–Thirring (IERS — International Earth Rotation and Reference Systems Service — Conventions 2010 §10, linéaire en le moment cinétique de la Terre, de ~1 à 2 ordres en dessous de Schwarzschild) — piloté par un choix de deux intégrateurs adaptatifs (RK4 — Runge–Kutta d'ordre quatre — à doublement de pas ou la paire emboîtée Dormand–Prince RK5(4)). Validé par rapport à Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 — 278 époques en LEO (orbite terrestre basse) + GTO (orbite de transfert géostationnaire), les niveaux de forces conservatives concordant à un pire cas de |Δr| 0,08 m sur 24 h (tests/numerical_cowell_propagator_reference.rs) ; le niveau de traînée atmosphérique est caractérisé séparément (≈ 333 m / 24 h) et les entrées absolues d'éphéméride du Soleil et de la Lune et de densité restent honnêtement modélisées. Éléments internes supplémentaires (non une validation externe) : l'orbite non perturbée est vérifiée par rapport à la solution de Kepler exacte en variables universelles à moins d'un mètre sur 24 h, l'énergie et le moment cinétique se conservent à ~1e-9, et chaque perturbation correspond à une signature en forme fermée dérivée à la main. |
| Manœuvres et conception de trajectoire | Nœuds de ΔV impulsionnels avec propagation de covariance 6×6 (repères d'erreur d'exécution ECI — inertiel centré sur la Terre — / LVLH — verticale locale, horizontale locale), intégration de poussée finie vérifiée par rapport à l'équation de fusée de Tsiolkovsky sous forme fermée à < 0,01 %, un solveur Lambert à une révolution d'Izzo-2015, un propagateur Kepler exact en variables universelles, et un balayage porkchop (lancement × arrivée) de C3 (énergie de lancement) / V∞ à l'arrivée émis sous forme de grille de contours JSON — la couche de simulation de performance au-dessus de GMAT/Orekit, chaque sortie de Lambert étant vérifiée en aller-retour par rapport à la vérité à deux corps et le minimum du porkchop par rapport au plancher analytique de Hohmann. |
| Systèmes de temps et référentiels | Échelles UTC / TAI / TT / UT1 avec secondes intercalaires de l'IERS (temps universel coordonné, temps atomique international, temps terrestre, et le temps de rotation de la Terre Universal Time 1), une API (interface de programmation) de date julienne, l'angle de rotation de la Terre (ERA) de l'IAU-2000 (Union astronomique internationale), TEME ↔ ECEF fondé sur le GMST (temps sidéral moyen de Greenwich) (vrai équateur, équinoxe moyen ↔ centré sur la Terre, fixe par rapport à la Terre) avec référentiels géodésiques WGS-84 (World Geodetic System 1984), précession IAU 2006 (Fukushima–Williams), nutation IAU 2000A/2000B complète, mouvement du pôle de l'IERS, et la réduction GCRS↔ITRS IAU 2006/2000A fondée sur le CIO sans équinoxe (CIO = Celestial Intermediate Origin) — le tout validé bit à bit par rapport aux vecteurs SOFA/ERFA, et recoupé indépendamment avec ANISE (la réimplémentation NAIF/SPICE en Rust pur ; NAIF = Navigation and Ancillary Information Facility de la NASA, l'administration nationale de l'aéronautique et de l'espace des États-Unis) : le GCRS→ITRS de kshana par rapport à l'ITRF93 d'ANISE (International Terrestrial Reference Frame 1993) à partir de earth_latest_high_prec.bpc du JPL, les mêmes paramètres d'orientation de la Terre de l'IERS étant fournis aux deux, concordent à ≤ 0,86 m au sol / ≤ 3,6 m en orbite GNSS (max 0,028″) sur huit époques 2020–2023. |
| Inertiel | INS à composantes liées (strapdown) à trois axes — attitude par quaternion, mécanisation NED (nord-est-bas) WGS-84, compensation du coning/sculling, et un modèle déterministe d'erreur d'IMU (facteur d'échelle, désalignement, sensibilité à g, quantification, dérive) ; un accéléromètre à interféromètre à atomes froids de premiers principes (phase de Mach–Zehnder, bruit de projection quantique, décroissance du contraste, couplage aux vibrations) qui dérive le coefficient de marche aléatoire de vitesse ; et un filtre particulaire à rééchantillonnage d'importance séquentiel pour la navigation assistée par carte (référencée au terrain ou à la gravité) en l'absence de GPS. |
| Alt-PNT (sans GPS) | Un modèle de mesure de gravimètre à atomes froids dont le plancher de bruit blanc (σ = ASD/√τ, ASD = densité spectrale d'amplitude) est dérivé de la physique de l'accéléromètre CAI ; un champ d'anomalie de gravité en harmoniques sphériques de bas degré, pleinement normalisé (vérifié par rapport aux fonctions de Legendre sous forme fermée et à une anomalie à un seul terme dérivée à la main) plus des mascons synthétiques ; le noyau de synthèse des fonctionnelles de gravité (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — le « lecteur de carte » auquel un navigateur assisté par la gravité se compare — est validé par rapport à la norme de gravité normale GRS80 (Geodetic Reference System 1980), reproduisant la gravité normale de Somigliana sous forme fermée et les γ_e / γ_p publiés à 3.5e-12 et produisant une carte de perturbation physiquement bornée à partir du vrai champ EGM2008 de l'ICGEM (International Centre for Global Earth Models) (RMS — valeur efficace — ≈ 26 mGal, max ≈ 89 mGal à d/o 70 ; tests/icgem_gravity_reference.rs) ; et un filtre particulaire d'appariement de carte de gravité qui retrouve une trajectoire sans GPS à partir de la séquence d'anomalies qu'elle traverse. Il s'étend à la navigation référencée au terrain (TERCOM/SITAN — appariement de contours de terrain / Sandia Inertial Terrain-Aided Navigation — par rapport à un MNT (modèle numérique d'élévation) .hgt SRTM (Shuttle Radar Topography Mission), src/altpnt/terrain.rs), à un champ principal géomagnétique IGRF-14 (14e génération de l'International Geomagnetic Reference Field) jusqu'au degré/ordre 13 (src/igrf.rs, vérifié par rapport à la forme fermée du dipôle incliné et à des différences finies de ∇V), et à un navigateur combiné gravité + magnétisme + terrain qui fusionne les trois canaux scalaires dans un seul filtre particulaire (l'information est additive — aucun canal ne dégrade la position). Un benchmark de 60 minutes sans GPS (une interruption d'environ 700 km / une heure où la solution inertielle dérive jusqu'à environ 70 km) est récupéré à ~145 m (< 500 m) par un apparieur hiérarchique du grossier au fin — la cible Quantum Wayfarer du NAVISP (Navigation Innovation and Support Programme) de l'ESA. |
| Fusion | EKF (filtre de Kalman étendu) à 15 états en erreur, GNSS/INS faiblement couplé, avec rétroaction en boucle fermée (le paquet gnss-ins) ; une mise à jour de pseudodistance fortement couplée qui continue de corriger avec moins de quatre satellites ; un filtre couplé horloge + position ; un estimateur général de filtre de Kalman sans parfum (à points sigma) pour des mesures fortement non linéaires ; un navigateur UKF GNSS/INS fortement couplé (pseudodistance + Doppler) dont la marche libre orbitale avec modèle de forces est vérifiée en autocohérence à 0,77 m RMS sur un passage LEO courbe de 30 minutes qui comprend une interruption GNSS de 120 secondes (un chiffre de cohérence du filtre, non une validation par référence externe — ce navigateur reste MODELLED) ; et un UKF GNSS/INS fortement couplé à 17 états complet (position, vitesse, erreur d'attitude, biais d'accéléromètre et de gyroscope, biais et dérive d'horloge) dont la navigation à l'estime quantique CAI traverse une interruption de 120 secondes grâce à la marche aléatoire de vitesse dérivée de l'accéléromètre à atomes froids. |
| Détermination d'orbite | Récupération d'un état orbital [r, v] à partir du suivi en distance par station au sol, combinant le modèle de forces à deux corps + J2 et l'intégrateur RK4 avec un correcteur par lot de Gauss–Newton (determine_orbit_batch, inframétrique / mm·s⁻¹ à partir de distances sans bruit, ~2 m à un plancher de bruit de 5 m) et une variante séquentielle à filtre de Kalman sans parfum (determine_orbit_sequential). |
| Observabilité et théorie de l'estimation | Une couche générale et réutilisable d'information de Fisher / Cramér–Rao (src/fim.rs) : la matrice d'information M = HᵀWH, la borne inférieure de Cramér–Rao, le rang d'observabilité et l'espace nul du défaut de datum (pseudo-inverse de Moore–Penrose), et des scalaires de conception d'expérience D/A/E/T-optimaux issus d'un solveur propre de Jacobi symétrique. Validé — valeurs propres par rapport à numpy.linalg.eigh, covariance CRLB par rapport à σ²(XᵀX)⁻¹ via numpy.linalg.inv, et DOP GNSS à partir de la matrice d'information, le tout concordant à 1e-9 près (tests/fim_observability_reference.rs), et recoupé en outre avec les bornes en forme fermée de Kay (1993) avec atteinte de la CRLB par Monte-Carlo. Il sous-tend le moteur DOP, la CRLB de géolocalisation passive et le théorème d'observabilité des stations absolues lunaires (ci-dessous). |
| Lunaire et cislunaire | Un propagateur du problème restreint circulaire à trois corps (CR3BP) Terre–Lune dans le référentiel tournant — constante de Jacobi conservée et les cinq points de Lagrange (src/cr3bp.rs) — avec désormais une matrice de transition d'état 6×6 (STM) et un correcteur différentiel à tir simple (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) qui produit des orbites halo / NRHO (orbite en halo quasi rectiligne) réellement périodiques : la STM est validée par rapport à des différences finies, les orbites corrigées se referment à la précision machine, et l'amorçage avec l'état d'apolune publié reproduit la NRHO australe L2 9:2 (L2 = le deuxième point de Lagrange Terre–Lune ; l'orbite de Gateway) à une période ≈ 6,57 j / périlune ≈ 3 250 km, cohérente avec les ≈ 6,56 j / ≈ 3 370 km publiés (une solution CR3BP — circulaire, sans Soleil —, non validée par rapport à une véritable éphéméride LANS (Lunar Augmented Navigation Service)/Gateway ; la transformation sélénocentrique MCI/MCMF (inertiel centré sur la Lune / centré sur la Lune et fixe par rapport à elle) de l'orbite corrigée est une suite à venir) ; plus la géométrie PNT cislunaire LunaNet / LNIS (LunaNet Interoperability Specification) (réduction MCI↔MCMF, coordonnées sélénographiques) avec un passage ARAIM au pôle sud lunaire qui fait honnêtement apparaître l'écart d'intégrité : un σ_URE (erreur de distance de l'utilisateur) d'environ 30 m pousse le niveau de protection bien au-dessus d'une limite d'alerte de 50 m (src/lunar.rs, scenarios/lunanet-araim.toml) ; et une augmentation DOP par balises de surface (src/lunar_beacon.rs) montrant comment quelques balises de télémétrie de surface relevées fournissent les lignes de visée à faible élévation et grand azimut qui manquent à un ensemble orbital entièrement au zénith — effondrant le GDOP polaire sud mal conditionné et, via un budget d'erreur en somme quadratique, la précision de position réalisée en mètres (réutilisant le noyau DOP validé par gnss_lib_py et la forme fermée de visibilité à horizon sans atmosphère ; l'analyse de la dilution de précision est rédigée dans arXiv:2607,06212). |
| Suite PNT lunaire | Une suite de navigation lunaire/cislunaire superposée au cœur CR3BP, chacune un kind exécutable : temps-coordonnée lunaire (lunar-time-offset, src/lunar_time.rs — le taux séculaire LTC/TCL − TT (LTC = Lunar Coordinate Time ; TCL = sa forme française, Temps-Coordonnée Lunaire) à partir de la différence de potentiel propre + terme cinétique, rapporté avec la bande publiée de 56–59 µs/jour) ; une observable de délai VLBI lunaire (interférométrie à très longue base) géodésique (lunar-vlbi, src/lunar_vlbi.rs — un délai + taux de différence de deux distances en champ proche à base terrestre, recoupé avec le Δ-DOR (delta differential one-way ranging) en onde plane de la même base de code dans la limite du champ lointain, dérivées partielles vérifiées par différences finies) ; un estimateur par lot d'OD + horloge multi-technique conjointe (lunar-joint-od-clock, src/lunar_combination.rs — un ajustement de Gauss–Newton fusionnant VLBI + distances locales lunaires + distances inter-satellites) portant un résultat d'observabilité par information de Fisher : la télémétrie interne seule laisse un défaut de datum de corps rigide à six degrés de liberté, de sorte que la position absolue d'une station de surface est inobservable tant qu'un lien avec le référentiel terrestre n'est pas ajouté — un délai VLBI à base terrestre rétablit l'observabilité pour une constellation clairsemée et affine la borne de Cramér–Rao pour une constellation riche, le datum absolu se refermant à trois stations terrestres non colinéaires (le résultat d'observabilité rédigé dans arXiv:2607,02566) ; la réalisation de référentiel (lunar-frame-realisation, src/lunar_frame_realise.rs — un ajustement de datum de Helmert à 7 paramètres + lien d'orientation WGCCRE de l'IAU 2015 — WGCCRE = le groupe de travail de l'IAU sur les coordonnées cartographiques et les éléments de rotation) ; une analyse de volume de service de classe Moonlight/LCNS (LCNS = Lunar Communications and Navigation Services ; moonlight-service-volume, src/lunar_service.rs — DOP / couverture / disponibilité + une enveloppe HPL/VPL (niveau de protection horizontal/vertical) ARAIM lunaire généralisée, réutilisant le noyau DOP validé par gnss_lib_py et la machinerie σ_URE≈30 m de LunaNet) ; le PNT différentiel lunaire (lunar-differential-pnt, src/lunar_dpnt.rs — un analogue lunaire du GNSS différentiel / système d'augmentation par satellites (SBAS) : annulation exacte de l'horloge en mode commun + décorrélation spatiale au premier ordre en fonction de la ligne de base, réutilisant le niveau de protection SBAS DO-229E — DO-229E étant la norme de performance opérationnelle minimale de la RTCA (anciennement Radio Technical Commission for Aeronautics) pour les récepteurs SBAS) ; et une exportation d'interopérabilité alignée sur LunaNet/IOAG (IOAG = Interagency Operations Advisory Group ; lunar-interop-export, src/lunar_interop.rs — CCSDS-OEM (Orbit Ephemeris Message) + aller-retour d'échelle de temps lunaire dans le référentiel de corps lunaire de l'IAU 2015, enveloppé dans l'enveloppe KIF). Les niveaux de preuve par élément figurent dans la matrice de vérification : le temps-coordonnée lunaire, l'estimateur OD + horloge conjoint, la réalisation de référentiel et la géométrie du volume de service sont VALIDATED (chacun par rapport à la référence indépendante que nomme sa ligne, de même que le chemin du noyau du délai VLBI) ; l'observable VLBI, le résultat d'observabilité du défaut de datum, le PNT différentiel et l'exportation d'interopérabilité sont MODELLED. Les paramètres sont des valeurs illustratives issues de sources publiques — non validées par rapport à un véritable suivi VLBI/Gateway, non affiliées à une agence ni approuvées par elle, aucune affirmation de TRL (niveau de maturité technologique) / d'héritage. |
| PNT en espace lointain et martien | Un moteur de navigation radiométrique ouvert : temps de lumière itératif + retard relativiste de Shapiro, Doppler et distance à deux, un et trois sens (deux trajets de Moyer), rapports de cohérence du transpondeur, télémétrie régénérative/PN (pseudo-bruit) (CCSDS 414, la norme de télémétrie à pseudo-bruit), et Δ-DOR dans le plan du ciel (CCSDS 506, la norme Delta-DOR), avec des milieux plasma solaire/tropo/iono ; analyse + émission de messages de données de suivi CCSDS-TDM (503) ; un filtre d'information en racine carrée à dynamique réduite (accélérations empiriques RTN — radiale, transverse, normale — + une horloge embarquée à 3 états + traînée atmosphérique martienne) qui réalise la détermination d'orbite en LMO martienne à ≈ 0,2 m en boucle fermée synthétique ; un estimateur conjoint de fusion d'un sens + deux sens ; un cœur de dynamique multicorps (Body{μ, re, zonals, gravity, IAU-pole}, gravité Mars GMM-3 (Goddard Mars Model 3), un référentiel martien fixe par rapport au corps de l'IAU, une jonction EphemerisProvider enfichable, dates juliennes en deux parties + TT↔TDB (temps dynamique barycentrique)) ; et le scénario de PNT par relais mars-pnt (une constellation de relais aréostationnaires MARCONI) avec un simulateur de performance GSE de bout en bout (GSE = équipement de soutien au sol) (géométrie → bilan de liaison → observables → SRIF → covariance). Validé par simulation (chiffres de mérite de covariance / de boucle fermée) ; la dynamique martienne centrée sur le Soleil est recoupée avec le DE440 du JPL (137 m @ arc de 1 jour, xval/anise-mars-od). La validation par de vraies données de suivi DSN/ESTRACK figure dans la feuille de route. |
| Système solaire et PNT autour de n'importe quel corps | Une éphéméride de tout le système solaire sans noyau (src/ephem.rs, src/ephem_provider.rs) : chaque planète d'après les éléments képlériens de Standish du JPL (Table 1, 1800–2050 apr. J.-C. ; Tables 2a/2b, 3000 av. J.-C.–3000 apr. J.-C.) avec l'erreur nominale publiée de chaque planète, la Terre et la Lune séparées par la série lunaire, et Phobos, Deimos, Io, Europe, Ganymède, Callisto et Titan d'après les éléments moyens du JPL et le modèle de rotation de l'IAU (Union astronomique internationale) ; n'importe quel corps relativement à n'importe quel autre dans l'ICRF (International Celestial Reference Frame). Body porte désormais le GM (paramètre gravitationnel), les rayons, J2 (le deuxième harmonique zonal) lorsqu'il est publié et le pôle et le méridien origine de l'IAU pour dix-huit corps. Le type de scénario solar-system rapporte positions, vitesses, constantes, temps de lumière et distance à un ou deux sens entre deux corps quelconques (le solveur radiométrique de temps de lumière existant, avec le retard de Shapiro solaire) et une trace orbitale par corps — de quoi tracer un système solaire interactif ; le type de scénario body-pnt positionne un orbiteur ou un atterrisseur autour de n'importe quel corps (scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml) avec une constellation Walker locale, la machinerie de dilution de précision et de Gauss–Newton, et une distance en espace lointain depuis la Terre. Validé par rapport à JPL Horizons (DE441, JPL Development Ephemeris 441) : Mercure–Saturne et la Terre d'après la Table 1 à moins de deux fois l'erreur nominale (pire cas 1,87×), les huit planètes d'après les Tables 2a/2b (pire cas 1,71×), et le temps de lumière Terre–Mars/Jupiter. Modélisé : Uranus et Neptune d'après la Table 1 (2,0× et 5,2× l'erreur indiquée par rapport à DE441), Pluton, les lunes, et les résultats de navigation body-pnt. |
| PNT fusionné MEO + LEO | src/leo_fusion/ : positionnement, navigation et synchronisation temporelle LEO indépendants du système, sur n'importe quelle constellation (coquilles Walker, jeux d'éléments, préréglages GNSS) et n'importe quel signal (porteuse, cadence des chips, enveloppe de C/N0, erreur de distance du signal dans l'espace), avec des préréglages facultatifs en un seul fichier portant leurs sources (Xona Pulsar X1/X5, Iridium STL, signaux d'opportunité Starlink, CentiSpace, un système représentatif en bande C, le modèle d'éphéméride à horloge nulle ATOMIC). leo-pvt : positionnement Doppler par lot à partir de la vitesse de distance (un ou plusieurs satellites, états de dérive d'horloge et de vitesse, géométrie à passage unique le long de la trace et transversale, et la solution miroir), moindres carrés pondérés conjoints GNSS + LEO avec des biais inter-systèmes par système et des sigmas par signal fournis par l'appelant, le DOP en fonction du nombre de satellites LEO, couverture polaire et arctique, et transfert de temps LEO vers l'UTC en fonction du C/N0 et de l'oscillateur. leo-ppp : un EKF (filtre de Kalman étendu) PPP (positionnement ponctuel précis) à nombres flottants avec GNSS seul et avec LEO, son temps de convergence et un test de cohérence NEES par khi-deux. ntn-positioning : positionnement par réseau 5G non terrestre à partir de la borne de Cramér-Rao de la bande passante. Validé : l'enveloppe Doppler LEO par rapport aux chiffres publiés d'Iridium et de Xona. Modélisé : le reste, avec la tendance PPP comparée à Li et al. (2019) — voir docs/LEO-PNT-FUSION.md. |
| Intégrité | RAIM — surveillance autonome de l'intégrité par le récepteur — instantané et à séparation de solutions (de type ARAIM), avec niveaux de protection horizontal/vertical (HPL/VPL), détection et exclusion de pannes, et diagrammes d'intégrité de Stanford ; un niveau de protection explicite à budget de risque d'intégrité par séparation de solutions à hypothèses multiples (MHSS), y compris le mode de panne à l'échelle de la constellation, bi-/multi-constellation (ARAIM de l'UE (Union européenne) / DO-316, la norme de performance de la RTCA pour les équipements aéroportés GPS avec augmentation embarquée), exercé sur un véritable instantané GPS + Galileo (scenarios/araim-gps-galileo.toml). Le niveau de protection applique la projection unilatérale du biais nominal b_k = Σ_i|s_i|·b_nom par mode de panne et le sigma d'intégrité σ_URA (précision de distance de l'utilisateur ; distinct du σ_URE de précision, erreur de distance de l'utilisateur) tiré du message de soutien d'intégrité — voir docs/ARAIM_REFERENCE.md. Le noyau de détection (les seuils χ²/χ² non central/normal et les multiplicateurs K) est validé en externe par rapport à SciPy sur 171 cas (tests/raim_reference.rs) ; la géométrie réutilise le noyau DOP validé par gnss_lib_py. L'allocation du budget de risque d'intégrité ARAIM MHSS elle-même n'a pas de référence numérique publiée et reste honnêtement modélisée. |
| Augmentation (SBAS) | Niveaux de protection SBAS / WAAS (WAAS = le Wide Area Augmentation System) sous la forme des moindres carrés pondérés DO-229E (facteurs K d'approche de précision et en route) et la combinaison bifréquence L1/L5 sans ionosphère (L1 et L5 étant deux bandes de signaux civils GPS ; IS-GPS-705, la spécification d'interface GPS du signal L5, γ₁₅ ≈ 1,793) qui sous-tend le DO-316 — src/sbas.rs. L'algorithme de niveau de protection est validé en externe par rapport au fork SBAS-PL de RTKLIB (RTKLIB = la bibliothèque ouverte de positionnement cinématique en temps réel ; PL = niveau de protection) (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, DO-229D — la révision précédente du DO-229 — App. J) exécuté sur de vraies données EGNOS (European Geostationary Navigation Overlay Service), reproduisant son HPL à < 2e-3 m (tests/sbas_reference.rs) ; gLAB (la suite d'outils GNSS Laboratory) v6.0.0 a confirmé la même convention. |
| Horloge et synchronisation temporelle | Holdover de Kalman à deux états (covariance sous forme de Joseph, santé de cohérence NIS/NEES — carré normalisé de l'innovation / carré normalisé de l'erreur d'estimation) ; stabilité de la famille d'Allan (ADEV / MDEV / TDEV / HDEV / MTIE — écart d'Allan, d'Allan modifié, de temps et d'Hadamard, et erreur maximale d'intervalle de temps) avec des intervalles de confiance propres à chaque type de bruit et un ajustement en loi de puissance à cinq coefficients IEEE-1139 complet (IEEE Std 1139, les définitions de métrologie fréquence-temps de l'Institute of Electrical and Electronics Engineers) — les estimateurs sont validés sur du matériel réel par rapport à Stable32 : un vrai étalon primaire au césium 5071A contre un maser à hydrogène (556 990 échantillons de phase, 16 facteurs de moyennage, OADEV/OHDEV — écart d'Allan/d'Hadamard à recouvrement — à 1e-3 près ; tests/cs5071a_reference.rs) et la série de régression canonique PHASE.DAT de Stable32 (139 facteurs de moyennage, OADEV/MDEV/TDEV à 1e-3 près ; tests/phasedat_reference.rs) ; les estimateurs ADEV/MDEV/TDEV et la métrique de dérive télécom MTIE sont en outre recoupés avec la bibliothèque indépendante allantools 2024,06 à < 1e-9 sur la série NIST SP 1065 (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs) ; corrections géométriques (Sagnac, vue commune GNSS) ; et les méthodes de transfert opérationnelles — TWSTFT (transfert bidirectionnel de temps et de fréquence par satellite) avec la forme fermée de Sagnac du BIPM (Bureau international des poids et mesures), vue commune GNSS, transfert de temps PPP (positionnement ponctuel précis) sans ionosphère, une liaison optique en espace libre avec scintillation de turbulence, et une échelle de temps d'ensemble d'horloges (papier) à variance inverse inférieure à la meilleure horloge contributrice. Un calculateur de holdover d'horloge sans GNSS (src/holdover.rs) expose la croissance de l'erreur de marche libre de van Loan sous forme fermée comme une inversion holdover jusqu'au seuil — combien de temps une horloge fonctionne librement avant que son erreur de synchronisation temporelle dépasse le budget — pour des classes représentatives d'horloges classiques et quantiques ; modélisé (recoupé avec la récurrence de covariance multipas clock_state), et honnête sur le fait que, pour une horloge très stable, le holdover jusqu'à un seuil serré est fixé par le plancher de bruit à long tau supposé, non par l'ADEV cité. Un niveau de protection temporel conditionnel (src/tpl.rs) étend le holdover au leurrage : une borne de l'erreur de temps non détectée, étant donné un recoupement indépendant, qui compose un plancher de moniteur à k sigmas, la variance de marche libre de van Loan sur la latence de détection, et un temps jusqu'à l'alarme CUSUM (somme cumulée). Étalonné sur un vrai leurrage enregistré (JammerTest 2024) et reproductible via cargo run --example tpl_jammertest ; composition MODELLED (pas de budget de risque d'intégrité par heure), conditionnelle à la détection — il n'existe pas de borne inconditionnelle finie. |
| Domaine de mesure GNSS | Synthèse avant de pseudodistance / Doppler avec ionosphère Klobuchar (diffusée) et IONEX / grille TEC (format d'échange de cartes de l'IONosphère / contenu électronique total ; mesurée) — y compris un analyseur de fichier IONEX, l'interpolation temporelle entre cartes, et la projection d'obliquité oblique en couche mince —, troposphère Saastamoinen + Niell, et RAIM instantané (HPL/VPL). |
| Résilience | Brouillage par bilan de liaison (J/S → C/N₀ effectif → perte d'accrochage — rapport brouilleur sur signal, rapport densité porteuse sur bruit — avec le facteur de séparation spectrale anti-brouillage Q désormais dérivé des véritables spectres de puissance du signal et du brouilleur via src/navsignal.rs — Q = 1/(R_c·κ), recoupé en CI avec l'ancienne constante représentative) ; un détecteur stochastique de leurrage temporel (test d'énergie de Neyman–Pearson / χ²₁ avec P_fa/P_md sous forme fermée et par Monte-Carlo et un chiffre de mérite (FoM) de sécurité de 1 − P_md) ; et un détecteur de leurrage multicouche fusionnant un test de parité de cohérence RAIM (avec l'angle mort de mode commun modélisé honnêtement), un moniteur de puissance AGC RF (commande automatique de gain), et un moniteur de qualité de signal (SQM — surveillance de la qualité du signal, avance moins retard) ; et un budget d'erreur de navigation inertielle quantique à l'estime (QuantumNavBudget, src/inertial/quantum_imu.rs) composant la marche aléatoire de vitesse à bruit blanc de l'interféromètre à atomes froids avec le biais résiduel (recoupé avec l'intégrateur AccelModel indépendant) et l'erreur de facteur d'échelle en un chiffre de dérive de position pendant le holdover — le jumeau inertiel du holdover d'horloge. Un moteur de notation de résilience aligné sur un cadre (src/resilience/) fait correspondre le comportement simulé d'une architecture à des sous-scores par dimension sur les sept catégories de résilience propres à Kshana (non les termes du DHS), alignées sur le US Department of Homeland Security Resilient PNT Conformance Framework, puis étudie la stabilité de décision de tout score composite unique ou niveau de maturité sous un simplexe de pondération de Dirichlet et un ensemble de cinq menaces — instabilité de rang par tau de Kendall, taux de basculement du gagnant de rang 1, et effondrement de la diversité en mode commun (Hill-N2), avec un rapport d'assurance à condensat d'intégrité (35 tests de référence dérivés à la main). Reproductible via cargo run --example resilience_report ; architectures synthétiques MODELLED, une auto-évaluation alignée sur RPCF v2.0, non une certification. Voir docs/RESILIENCE-CROSSWALK.md. |
| Géolocalisation RF passive | Géolocalisation d'émetteur TDOA/FDOA (différence de temps / de fréquence d'arrivée ; src/geolocation.rs) — localiser un brouilleur ou un leurreur (ou une source d'opportunité pour du PNT inverse) à partir d'hyperboloïdes de différence de temps d'arrivée sur un réseau de récepteurs, résolu par moindres carrés de Gauss–Newton ; l'ajout de la différence de fréquence d'arrivée avec des récepteurs mobiles retrouve conjointement la position et la vitesse de l'émetteur, avec la borne de Cramér–Rao sur la covariance de position dérivée de la géométrie du réseau. MODELLED (références de cohérence interne : allers-retours direct→inverse, l'identité J·CRLB = I, la monotonie du GDOP, et l'estimateur atteignant sa propre CRLB sous Monte-Carlo) — un modèle de source ponctuelle en visibilité directe, sans termes de trajets multiples / NLOS (hors visibilité directe), de biais d'horloge du récepteur ou de réfraction. |
| Signal de navigation et poursuite de code | Le niveau signal entre le bilan de liaison et le domaine de mesure (src/navsignal.rs) : densités spectrales de puissance (PSD) d'aire unitaire pour BPSK-R(n) (modulation par déplacement de phase binaire à chips rectangulaires) et sine-BOC(m,n) (porteuse à décalage binaire) ; le coefficient de séparation spectrale (SSC) κ = ∫ G_s·G_i df, qui dérive le facteur Q anti-brouillage utilisé par le modèle de brouillage (Q = 1/(R_c·κ)) à partir des véritables spectres du signal et du brouilleur au lieu d'une constante représentative ; la largeur de bande RMS (de Gabor) (BOC > BPSK — la mesure d'information de télémétrie / de Cramér–Rao) ; la gigue de bruit thermique de poursuite de code DLL cohérente avance-retard (DLL = boucle à verrouillage de délai ; Kaplan & Hegarty ; ~inframétrique pour le C/A — le code grossier/d'acquisition GPS — à 45 dB-Hz) ; et l'enveloppe d'erreur de trajets multiples (EML cohérent, avance moins retard — suppression par corrélateur étroit). Validé par rapport à des ancres en forme fermée (auto-SSC BPSK = 2/(3·R_c), PSD d'aire unitaire, gigue C/A inframétrique). Il s'agit d'une analyse de performance du signal, non d'une conception matérielle d'antenne / de charge utile RF (le rôle d'un partenaire de charge utile). |
| Interopérabilité | Ingestion d'éphémérides diffusées multi-GNSS RINEX-3 (GPS, Galileo, QZSS — le Quasi-Zenith Satellite System du Japon —, BeiDou MEO/IGSO — orbite terrestre moyenne / orbite géosynchrone inclinée — via IS-GPS-200, la spécification d'interface GPS ; GLONASS, le Global Navigation Satellite System de la Russie, via PZ-90 — le datum russe Parametry Zemli 1990 — RK4 sur vecteur d'état) utilisable comme source de constellation (RINEX en entrée, géométrie PNT en sortie) ; un analyseur d'observations RINEX-3 (pseudodistance, phase de la porteuse, Doppler, intensité du signal ; la disposition d'observation 4,00 devrait être analysée mais n'est pas testée, et les fichiers de navigation RINEX 4 sont refusés par leur nom plutôt que mal décodés) qui alimente désormais un solveur de positionnement ponctuel (SPP) (pvt) — de vraies observations de code en entrée, une vraie position du récepteur en sortie, validée sur des données IGS ; un lecteur/écrivain d'éphémérides précises SP3-c/d avec interpolation de Lagrange d'ordre 9 ; et un export CCSDS OEM 2,0 + OMM (Orbit Mean-elements Message) pour les outils de dynamique du vol (GMAT, Orekit, STK — Systems Tool Kit) ; et l'analyse + l'émission de messages de données de suivi CCSDS-TDM (503) pour le suivi radiométrique de l'espace lointain. |
| Analyse de mission (ingénierie des systèmes) | Des budgets de conception de mission au premier ordre, chacun un type de scénario exécutable : géométrie de lancement et d'ascension à deux corps (launch-window — azimut de lancement sin Az = cos i/cos lat, inclinaison minimale, bonus de rotation de la Terre, Δv de changement de plan en dogleg, opportunités quotidiennes ; src/launch.rs) ; un couloir de rentrée balistique d'Allen–Eggers (reentry — décélération maximale, vitesse/altitude au g maximal, vitesse au chauffage maximal ; src/reentry.rs) ; une géométrie de couverture d'observation de la Terre (eo-coverage — fauchée / GSD (distance d'échantillonnage au sol) au nadir / accès hors nadir / revisite via le triangle spatial du SMAD (Space Mission Analysis and Design) ; src/eo_payload.rs) ; un budget d'erreur d'attitude et de pointage à 3 degrés de liberté (trois degrés de liberté ; attitude-budget — couple de gradient de gravité au pire cas + budget de pointage RSS (somme quadratique) ; src/attitude_budget.rs) ; une prédiction de passage de station au sol (passes — AOS/TCA/LOS, acquisition du signal / instant d'approche maximale / perte du signal, élévation maximale, durée d'accès ; src/passes.rs) ; et un bilan de liaison à sens unique sur l'équation de liaison CCSDS 401 / DSN 810-005 (la norme de radiofréquence et de modulation du CCSDS / le manuel de conception de liaison du Deep Space Network ; link-budget — FSPL (affaiblissement en espace libre), C/N₀, Eb/N₀ (rapport énergie par bit sur densité de bruit), marge, fermeture ; src/linkbudget.rs). Budgets analytiques au premier ordre MODELLED — la couche pré-matériel en dessous de STK/GMAT/Basilisk, non un remplacement à 6 degrés de liberté ou radiométrique. |
| Analyse de décision et arbitrage (MCDA) | Une suite complète d'analyse de décision multicritère (MCDA) (src/mcda/) couvrant les quatre familles de méthodes — agrégation de valeurs (WSM, WPM, WASPAS — modèle de somme pondérée, modèle de produit pondéré, évaluation agrégée de somme-produit pondérée), distance à l'idéal (TOPSIS, Technique for Order of Preference by Similarity to Ideal Solution), programmation de compromis (VIKOR, du serbe pour optimisation multicritère et solution de compromis), et surclassement (PROMETHEE II, Preference Ranking Organization Method for Enrichment of Evaluations ; ELECTRE I, du français pour élimination et choix traduisant la réalité), plus MOORA à système de rapports (Multi-Objective Optimization on the basis of Ratio Analysis) et COPRAS proportionnel (Complex Proportional Assessment) — avec pondération de priorité par comparaison par paires AHP (Analytic Hierarchy Process) (rapport de cohérence), un front non dominé de Pareto, une analyse de sensibilité aux poids, et une notation d'utilité multi-attributs. Les neuf agrégateurs reproduisent les bibliothèques tierces indépendantes pymcdm (WSM / WPM / WASPAS / MOORA / TOPSIS / VIKOR / PROMETHEE II) et pyDecision (ELECTRE I, COPRAS) à < 1e-9, et le vecteur de priorité AHP + le rapport de cohérence concordent avec la table des indices aléatoires de Saaty et le solveur propre principal SciPy/LAPACK à < 1e-9 (tests/mcda_*_reference.rs). VALIDATED — la couche de décision sous le moteur d'étude d'arbitrage. |
| Environnement spatial | Un modèle d'environnement de météorologie spatiale (space-weather, src/space_weather.rs) : indices d'activité solaire (F10.7 / F10.7a centré sur 81 jours — le flux radio solaire de 10,7 cm) et géomagnétique (Kp, l'indice K planétaire, avec la table définitionnelle Kp↔ap — ap étant son amplitude planétaire linéaire), la température exosphérique de Jacchia-1971 qu'ils pilotent (validée par rapport aux minimum/moyenne/maximum solaires publiés), et la densité neutre thermosphérique corrigée de l'activité par rapport à la statique à l'altitude — la dépendance de la densité au cycle solaire que l'atmosphère statique USSA76 (US Standard Atmosphere 1976) omet. MODELLED : un couplage de hauteur d'échelle au premier ordre étalonné, non une atmosphère (NRLMSISE — le modèle d'exosphère à spectromètre de masse et radar à diffusion incohérente du US Naval Research Laboratory) validée par les données. |
| Évaluation et étude comparative d'apprentissage automatique | Un banc d'évaluation de détection de dégradations RF (impairment-eval, src/impairment_eval.rs) : un corpus synthétique étiqueté, ancré sur des paramètres (nominal / brouillage / leurrage temporel / leurrage de position / trajets multiples), un harnais ROC/AUC (caractéristique de fonctionnement du récepteur / aire sous la courbe) indépendant du détecteur notant n'importe quel détecteur (énergie | agc | sqm | parité | fusionné) avec le Pd (probabilité de détection) par classe à une Pfa (probabilité de fausse alarme) cible, et l'écart d'optimisme dans la distribution contre hors distribution (mode de décalage de distribution). Plus un arbitrage PNT quantique contre classique (quantum-trade, src/quantum_trade.rs) quantifiant le bénéfice de holdover temporel/inertiel d'une horloge candidate à partir d'une courbe d'ADEV mesurée contre une référence de base classique, avec la réserve du plancher à long τ portée sur l'artefact et une enveloppe de résilience en fonction du temps sans GNSS. Les métriques d'évaluation (AUC / confusion / Pd-Pmd, Pmd étant la probabilité de non-détection) sont validées par concordance exacte avec scikit-learn 1.9.0 — y compris sur de la vraie télémétrie ESA OPS-SAT (le jeu de données de détection d'anomalies OPSSAT-AD, Ruszczak et al. 2025, CC BY 4,0 — Creative Commons Attribution 4,0), où l'AUC ROC de Mann–Whitney de Kshana reproduit le roc_auc_score de scikit-learn à < 1e-9 sur la partition de test réservée et un détecteur transparent par comptage de pics sépare les anomalies étiquetées à une AUC ≈ 0,85 (tests/opssat_ad_reference.rs) — et les noyaux numériques du moteur d'arbitrage (ajustement NNLS — moindres carrés non négatifs — de l'ADEV, bandes de cohérence χ², Q d'horloge de van Loan) par rapport à scipy 1.17.1 ; les chiffres de bénéfice des dispositifs construits par-dessus restent des caractéristiques de fonctionnement MODELLED — jamais des données de terrain/IQ (échantillons en phase/en quadrature), aucun verdict bon/mauvais. En s'appuyant sur le banc, une étude plus profonde de l'écart d'optimisme (src/impairment_study.rs, impairment_ml.rs, eval_stats.rs) note un panel de 13 détecteurs (énergie/AGC/SQM/parité plus des détecteurs de régression logistique à graine fixe et de MLP — perceptron multicouche — à une couche cachée), ajuste des lois d'échelle dans la distribution contre hors distribution avec une hypothèse nulle par permutation, et apprend un prédicteur par laisser-un-de-côté de la dégradation hors distribution à partir des statistiques dans la distribution (cargo run --example optimism_study). Un étage d'entrée de récepteur défini par logiciel (src/sdr.rs — IQ/IF brut (fréquence intermédiaire) → prises avance/ponctuel/retard du corrélateur → SQM) et des adaptateurs d'ingestion de données réelles (src/realdata/ — RINEX, u-blox UBX (le protocole binaire u-blox), GnssLogger, JammerTest, Yunnan, SatGrid) permettent de faire tourner les mêmes détecteurs sur des enregistrements fournis localement (aucun jeu de données n'est versé au dépôt). La carte de croisement de résilience quantique contre classique sous incertitude de paramètres (src/crossover.rs ; cargo run --bin crossover_study) régénère les études de croisement inertiel et d'horloge derrière les figures des Résultats. |
| Démonstrateur de PNT à technologie quantique | Trois domaines d'application exécutables, MODELLED, derrière le moteur ouvert, chacun émettant un TradeEvidence honnête + un enregistrement de représentativité / d'écarts jusqu'au vol (src/representativeness.rs) : le transfert de temps quantique de confiance (quantum-time-transfer, src/timetransfer_chain.rs — un budget de bout en bout horloge à réseau optique + liaison photonique contre CSAC (horloge atomique à puce) + RF bidirectionnel, avec un niveau de protection temporel réutilisé, un chiffre de mérite de sécurité contre les attaques par retard/rejeu (1 − P_md), et une détection d'anomalies d'horloge + latence CUSUM) ; la navigation quantique sans GNSS (quantum-gnss-free-nav, src/quantum_nav_od.rs — une marche libre inertielle à interféromètre à atomes froids contre un INS de qualité navigation pendant une interruption du GNSS, honnête sur le fait que, sans position externe, le biais de l'accéléromètre est inobservable et que l'erreur continue donc de croître) ; et la détection de pannes/anomalies de système quantique (quantum-anomaly-detect, src/quantum_faults.rs — un catalogue de pannes étiquetées avec une AUC ROC à IC (intervalle de confiance) par bootstrap issue du eval_stats validé en externe et une panne minimale détectable à un taux de fausse alarme fixe). Une bibliothèque partagée de modèles d'erreur de dispositifs quantiques (src/quantum_devices.rs) et un harnais d'arbitrage quantique contre classique unifié (src/qtrade.rs) les sous-tendent. Les noyaux validés qu'ils utilisent (métriques d'évaluation par rapport à scikit-learn, noyaux d'arbitrage par rapport à scipy) sont réutilisés ; les chiffres de bénéfice des dispositifs construits par-dessus restent MODELLED — paramètres de dispositifs/liaisons illustratifs issus de sources publiques, modélisent la classe, pas de TRL / d'héritage de vol / de certification, pas de soutien d'une agence. |
| Ingénierie frugale et impact sur l'intégrité | Une optique de ROI du coût par couverture (retour sur investissement) (src/frugal.rs) — coût par unité de couverture fournie pour un arbitrage d'architecture — et une correspondance non-détection → impact sur l'intégrité (src/integrity_impact.rs) qui transforme le taux de non-détection d'un moniteur en sa contribution au risque d'intégrité. Budgets d'aide à la décision MODELLED, additifs. |
| Échange d'artefacts | Le Kshana Interchange Format (KIF) (src/interchange.rs) — une enveloppe versionnée et autodescriptive encapsulant un résultat de scénario avec son type, la version de son schéma et ses étiquettes MODELLED/VALIDATED, de sorte qu'un artefact stocké reste autodocumenté et que les anciennes enveloppes restent lisibles avec compatibilité ascendante. |
Chaque capacité est accessible sous forme d'API Rust, d'un kind de scénario exécutable, ou des deux. La maturité par capacité — validée, exécutable ou bibliothèque — est suivie dans docs/CAPABILITY.md. Une matrice de vérification vérifiée par machine (src/verification.rs) restitue le renvoi exigence → module → test → référence → état, avec des invariants d'honnêteté testés unitairement qui n'autorisent une étiquette validée que lorsqu'une référence externe indépendante l'étaye — et qui consignent les capacités matérielles/PA (assurance produit) que Kshana ne fournit délibérément pas.
Les quatre paquets de capteurs, tels que publiés initialement (résultats)
Résultats#
Chaque scénario compare un capteur quantique à son équivalent classique durant une interruption du GNSS d'environ 1,8 h. Les chiffres sont reproductibles (scenario + seed + version).
Ce que les capteurs quantiques apportent quand le GNSS a disparu — clock-holdover · graine 42 · tracé avec le moteur 0.40.0, et chaque figure ci-dessus revérifiée par rapport au moteur actuel à chaque compilation par tests/published_figures_still_reproduce.rs · SVG
L'avantage dépend de la durée de l'interruption et des vibrations, avec un seuil de rentabilité explicite où le classique l'emporte — montré honnêtement sur toute l'échelle de maturité technologique (les chiffres des horloges optiques sont des cibles de démonstrateur au sol ; aucune horloge optique au strontium n'a volé) :
Croisement de résilience quantique contre classique — échelle TRL du holdover d'horloge (haut) · carte de l'avantage inertiel avec contour de seuil de rentabilité (bas). Régénérable via cargo run --release --bin crossover_study.
Erreur de position en navigation à l'estime pendant une interruption du GNSS : le capteur quantique (bleu) reste plat près de la spécification ; le capteur classique (rouge) diverge jusqu'à des dizaines de kilomètres. Généré par Kshana à partir de scenarios/imu-deadreckoning.toml.
| Paquet | Scénario | Quantique | Classique |
|---|---|---|---|
| 1 — Holdover d'horloge | clock-holdover.toml (spécification de 20 ns) |
l'horloge optique tient toute l'interruption | le CSAC dépasse la spécification au milieu de l'interruption |
| 2 — Navigation inertielle à l'estime | imu-deadreckoning.toml (spécification de 100 m) |
atomes froids : ~41 m, tient toute l'interruption | qualité navigation : dépasse en ~350 s → des dizaines de km |
| 3 — Transfert de temps (liaison optique inter-satellites) | timetransfer.toml |
optique : télémétrie à ~0,3 mm | RF (TWSTFT) : télémétrie à ~150 mm |
| 4 — Fusion hybride (couronnement) | hybrid-pnt.toml |
position + synchronisation temporelle complètes pendant toute l'interruption | limité en position à ~350 s |
Le couronnement montre la thèse de la fusion : le transfert de temps optique inter-satellites maintient verrouillée même une horloge classique, isolant le capteur inertiel comme maillon faible de la suite classique — c'est-à-dire l'inertie quantique et la synchronisation optique ensemble.
Holdover d'horloge pendant une interruption du GNSS : l'horloge optique (bleu) reste dans la spécification de 20 ns pendant toute la marche libre ; l'horloge à puce (rouge) la dépasse en cours de route. Généré par Kshana à partir de scenarios/clock-holdover.toml.
Un autre scénario, orbit-gnss-challenged.toml, tire la disponibilité du GNSS de la géométrie orbitale plutôt que de fenêtres écrites à la main : un engin spatial à l'intérieur de la coquille GNSS est propagé face à une constellation Walker de type GPS, et le nombre de satellites visibles (visibilité directe, occultation par la Terre, masque d'élévation) fixe l'état de la position à chaque pas. Sur une journée, l'utilisateur n'est en position que ~59 % du temps ; l'horloge quantique tient une solution de synchronisation temporelle de 5 ns à travers chaque interruption (disponibilité 1.0), l'horloge à puce seulement ~0.83.
Erreur de synchronisation temporelle sur une journée avec une disponibilité du GNSS tirée de la géométrie orbitale : le nombre de satellites visibles (visibilité directe, occultation par la Terre, masque d'élévation) fixe l'état de la position à chaque pas, de sorte que l'horloge doit traverser chaque interruption en marche libre — l'horloge optique tient la spécification de 5 ns tandis que l'horloge à puce la dépasse. Généré par Kshana à partir de scenarios/orbit-gnss-challenged.toml.
La constellation peut aussi être donnée sous forme de véritables jeux d'éléments à deux lignes (TLE). Un TLE complet (ligne 1 + ligne 2) est propagé avec le modèle SGP4/SDP4 complet — y compris la traînée atmosphérique et les termes lunisolaires d'espace lointain et de résonance de 12 h / 24 h qui comptent pour des orbites GNSS de ~12 h — validé par rapport aux vecteurs officiels AIAA 2006-6753 à un pire cas ≈ 4 mm. scenarios/orbit-sgp4-gps.toml livre un véritable instantané Celestrak gps-ops de la constellation GPS opérationnelle (2021-07-28, 30 satellites) et exige des sommes de contrôle TLE valides — les jeux d'éléments à deux lignes sont des données ouvertes du catalogue de la Force spatiale des États-Unis / du 18e Escadron de défense spatiale, redistribuées par Celestrak (Dr T. S. Kelso, celestrak.org) ; actualisez avec scripts/fetch_tles.sh. Un bloc à ligne 2 seule conserve la propagation analytique à deux corps (scenarios/orbit-real-tle.toml) ; les deux formes peuvent être mélangées dans une même constellation. Une constellation peut tout aussi bien être construite à partir d'un bloc d'enregistrements d'éphémérides diffusées GPS RINEX-3 — le format qu'un récepteur décode — propagés par l'algorithme utilisateur IS-GPS-200 et passés dans la même géométrie (scenarios/orbit-rinex.toml).
Ce que c'est et ce que ce n'est pas, en détail
Ce que c'est et ce que ce n'est pas#
C'est : un moteur déterministe, léger en dépendances, qui couvre toute la pile PNT — géométrie orbitale, navigation inertielle, fusion GNSS/INS, intégrité, horloges et synchronisation temporelle. Il exécute un scénario (souvent une interruption du GNSS), fait évoluer des modèles d'erreur de capteurs étalonnés à travers l'estimateur approprié, et note le résultat par rapport aux chiffres de mérite opérationnels — en émettant un résultat JSON (JavaScript Object Notation) reproductible et un graphique SVG, depuis une bibliothèque Rust, une interface en ligne de commande (CLI), une extension Python, un module WebAssembly dans le navigateur, un serveur Model Context Protocol (MCP) pour agents d'IA, ou un module d'extension d'IDE JetBrains (environnement de développement intégré).
Ce n'est pas : du matériel de vol, une conception de charge utile quantique, un récepteur complet de signaux GNSS, un simulateur de signaux radiofréquence (RF) ou un banc matériel en boucle, ou un produit d'avionique certifié — et il ne remplace pas MATLAB/Simulink, STK (Systems Tool Kit) ni Orekit ; il se place à côté d'eux et échange des fichiers avec eux. La fidélité du matériel quantique vient de modèles d'erreur publiés, non de cet outil. La maturité détaillée de chaque capacité est documentée dans docs/CAPABILITY.md.
Ce n'est pas (encore) : un moteur de physique d'interférométrie atomique complet (la plupart des capteurs quantiques consomment des coefficients d'Allan/de budget de bruit publiés ; l'accéléromètre CAI (interféromètre à atomes froids) a une couche de premiers principes — phase de Mach–Zehnder, bruit de projection, décroissance du contraste et couplage aux vibrations, plus les systématiques de Coriolis et de déplacement lumineux — mais les systématiques de front d'onde et la résolution d'ambiguïté de frange restent une couche de feuille de route P2 (phase 2 de la feuille de route, la couche de physique quantique), voir ROADMAP.md et docs/QUANTUM-MODELS.md) ; un récepteur GNSS certifié ou matériel (il résout une position PVT (position, vitesse et temps) à point unique à partir de vraies observations de code RINEX (Receiver Independent Exchange Format) — validée sur de vraies données de l'IGS (International GNSS Service) — et sa couche IQ (kshana iq, depuis 0.31.0) acquiert et poursuit des échantillons en bande de base enregistrés ou générés dans le logiciel, comme récepteur d'analyse : il ne pilote pas de matériel radio et n'émet pas, n'est pas un récepteur certifié, et ne fait aucun positionnement par phase de la porteuse (RTK ou PPP)) ; ou une suite complète de conception de mission (il offre des blocs de construction Lambert / porkchop / manœuvre / détermination d'orbite, mais c'est la couche de simulation de performance au-dessus de GMAT (General Mission Analysis Tool)/Orekit, non un remplacement). Assumer ce périmètre est délibéré. Si vous avez besoin de budgets d'erreur d'interféromètre à atomes froids de premiers principes (par exemple de qualité CARIOQA-PMP — Cold Atom Rubidium Interferometry in Orbit for Quantum Accelerometry, Pathfinder Mission Preparation — ou de validation de type X-37B), consultez la feuille de route P2 et prenez contact pour collaborer.
Navigation en orbite basse#
Les satellites en orbite terrestre basse (LEO) passent vite et fort. Le type de scénario leo-pnt-chain suit un système à travers chaque étape : le signal, le passage et sa liaison, le message de navigation, et la position, vitesse et temps (PVT) fusionnés ainsi que le positionnement ponctuel précis (PPP). Chaque étape transmet ses chiffres à la suivante. Voir docs/LEO-PNT.md.
Chaque type de scénario par famille#
Les types de scénario du moteur, classés par familles. Chaque famille a une page avec une entrée par type (la description et les champs du moteur, une commande d'exemple, des chiffres clés d'une exécution, les lignes de la matrice de vérification qui le nomment, et le graphique que le moteur écrit lui-même) et une planche-contact de ces graphiques ; docs/KINDS.md les indexe tous. Le tableau est écrit par tools/gen_readme_blocks.py et les pages par tools/gen_kinds_index.py, et les deux échouent si le moteur gagne un type qu'aucune famille ne nomme.
| Famille | À quoi il répond | Types | En exécuter un |
|---|---|---|---|
| Horloges, synchronisation temporelle et holdover | combien de temps une horloge garde l'heure sans GNSS, et comment un système de synchronisation temporelle tient face à ses masques | clock, sweep, sweep-nd, telecom-timing, slot-timing, timetransfer, time-transfer-budget, holdover-test, quantum-time-transfer |
kshana scenarios/clock-holdover.toml |
| Inertiel, fusion et capteurs quantiques | navigation à l'estime et fusion de capteurs pendant une interruption du GNSS, avec des capteurs classiques et quantiques | inertial, hybrid, fusion, hybrid-ukf, gnss-ins, ins-trn-coast, quantum-gnss-free-nav, quantum-anomaly-detect, quantum-trade |
kshana scenarios/gnss-ins.toml |
| PNT alternatif sans GPS | naviguer à partir de la gravité, du terrain et d'autres champs lorsque le GNSS a disparu | gravity-map, terrain-nav, terrain-slam, combined-altpnt, conflict-resilience |
kshana scenarios/combined-altpnt.toml |
| Constellations, couverture et géométrie | où sont les satellites, qui les voit et quelle est la qualité de la géométrie, autour de la Terre, de la Lune ou de Mars | orbit, ephemeris, constellation-design, solar-system, body-pnt, mars-pnt, passes |
kshana scenarios/orbit-gnss-challenged.toml |
| Mesures GNSS, positionnement et intégrité | pseudodistances, positions calculées, niveaux de protection et environnement spatial | integrity, gnss-sim, pvt, araim-reference-check, space-weather, realtime-frame-eop |
kshana scenarios/integrity-raim.toml |
| Brouillage, leurrage et spectre | comment une interférence atteint un récepteur et si elle est détectée | jamming, spoof, spoof-detect, tracking-loop, spectrum, impairment-eval |
kshana scenarios/jamming-demo.toml |
| Navigation en orbite basse | un passage, une liaison, un message de navigation et une position fusionnée, étape par étape | leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
kshana scenarios/leo-pnt-end-to-end.toml |
| Lunaire et cislunaire | navigation, temps, référentiels et géodésie sur la Lune | lunar-integrity, lunar-time-offset, lunar-time-budget, lunar-ascent, lunar-surface, lunar-descent, lunar-orbit-rendezvous, lunar-vlbi, lunar-vlbi-fim, lunar-joint-od-clock, lunar-frame-realisation, lunar-frame-campaign, lunar-llr-datum, moonlight-service-volume, lunar-differential-pnt, lunar-station-coverage, lunar-beacon, lunar-interop-export, cislunar-observability, cislunar-arc-recovery, lunar-attack-surface, lunar-jamming, earth-gnss-lunar, lunar-infrastructure |
kshana scenarios/lunar-infrastructure-od-consistency.toml |
| Navigation de l'utilisateur spatial | signaux GNSS pour des engins spatiaux au-dessus, autour et au-delà des orbites GNSS | gnss-ssv |
kshana scenarios/gnss-ssv-shell.toml |
| PNT optique | liaisons optiques à travers l'atmosphère et chiffres de mérite optiques plus RF | optical-atmosphere, hybrid-optical-rf |
kshana scenarios/optical-atmosphere-network.toml |
| Analyse de mission, liaisons et opérations spatiales | lancement, ascension, rentrée, attitude, liaisons, planification des contacts et formats de fichier | launch-window, ascent-losses, reentry, entry-heating, eo-coverage, eo-radiometry, attitude-budget, aocs, link-budget, acm-link, contact-schedule, aperture-duty-cycle, space-packet, oem-interop |
kshana scenarios/launch-window.toml |
| Fils de mission | le budget d'erreur de navigation et de synchronisation d'une chaîne de phases du lancement à l'entrée | mission-thread |
kshana scenarios/mission-thread-artemis-class.toml |
| Campagnes | missions enchaînées, balayages et ensembles construits à partir des autres types | campaign |
kshana scenarios/campaign-jam-spoof-holdover-integrity.toml |
Chaque commande#
kshana <scenario.toml> exécute un scénario ; toute autre commande est une sous-commande, et kshana --help affiche l'usage de toutes. Les commandes sont --study, --validate, kinds, example, receiver-trust (avec live et evidence), evidence (keygen, verify, attach-timestamp, round-trip), jammertest (import, score), trust-telemetry, imu-fit, nmea-scenario, interference-map (adsb, ais, daily, sensitivity, fetch-land), route-exposure, bench (spec, truth, cases, score, baseline, seal, reveal-check, manifest, verify-manifest, validate, leaderboard), bench-export, compliance-report, lunanet-afs-check, standards-pack, partner (check), osnma, iq (scene, acquire, track, sweep, labfit, campaign, conditions, frontend, monitor, inventory, info, extract, convert, decimate), sky et skyline. docs/COMMANDS.md donne pour chacune son objectif, un exemple vérifié et sa page de documentation.
Chaque surface#
Un seul moteur, les mêmes résultats partout : la ligne de commande, la bibliothèque Rust, Python, JavaScript et WebAssembly, le serveur MCP avec ses commandes de module d'extension et ses compétences, Kshana Studio (chaque page s'exécute dans le navigateur, sans installation, rien n'est téléversé), les intégrations ROS 2, Signal K, OpenCPN, GNSS-SDR et gnss_lib_py, les kits de déploiement systemd, Docker et Grafana, et le module d'extension JetBrains. docs/ALL-SURFACES.md les liste avec la façon d'obtenir chacun et les noms de toutes les commandes de module d'extension, compétences et pages du Studio ; docs/SURFACES.md dit, pour chaque commande et chaque type de scénario, quelle surface le porte et lesquelles ne le portent pas, avec la raison.
Comment se déroule une exécution#
Un scénario est un fichier TOML (Tom's Obvious, Minimal Language) : un type de scénario, une graine et les paramètres. Le moteur l'exécute et écrit à côté le résultat, un graphique et un rapport, ainsi que les exportations que vous demandez.
Ce scénario fourni dure 2 h : 10 min de GNSS, puis environ 1,8 h avec le GNSS refusé. Il demande combien de temps une horloge optique à réseau de strontium et une horloge atomique à puce (CSAC) tiennent chacune l'heure à 20 ns près.
kshana example clock-holdover > clock-holdover.toml
kshana clock-holdover.toml
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote clock-holdover.result.json, clock-holdover.chart.svg, clock-holdover.report.html, and clock-holdover.report.json
L'horloge optique tient le budget de 20 ns pendant toute l'interruption de 6600 s ; la CSAC le tient pendant 2610 s, et reste dans le budget pendant 95,6 % de l'exécution contre 100 % pour l'horloge optique. kshana example liste chaque scénario fourni.
Missions#
Dix secteurs posent dix questions différentes au même moteur. Chacun a des scénarios fournis pour démarrer.
| Secteur | Commencer par |
|---|---|
| Défense et sécurité | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espace, orbite terrestre | orbit-gnss-challenged, leo-pnt-end-to-end |
| Lune, Mars et espace lointain | lunar-relay-constellation, mars-orbit-pnt |
| Aviation et drones | small-uas-jammed-nav, araim-gps-galileo |
| Maritime | maritime-strait-jamming, maritime-port-approach-coast |
| Route | automotive-urban-canyon |
| Rail | rail-tunnel-coast |
| Infrastructures critiques et synchronisation temporelle | clock-holdover, clock-ensemble |
| Télécoms et 5G (la cinquième génération de réseaux mobiles) | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Science et recherche | sweep-clock-stability, quantum-pnt-demonstrator.suite |
La question que pose chaque secteur
| Secteur | La question qu'il pose | Commencer par |
|---|---|---|
| Défense et sécurité | Combien de temps notre navigation et notre synchronisation temporelle restent-elles dignes de confiance face au brouillage et au leurrage, et quelles couches nous maintiennent dans la spécification ? | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espace : orbite terrestre | Mon engin spatial voit-il assez de satellites de navigation, combien de temps son horloge garde-t-elle l'heure entre deux positions, et qu'apporterait une couche de navigation en orbite basse ? | orbit-gnss-challenged, leo-pnt-end-to-end |
| Lune et espace lointain | Un atterrisseur, un rover ou un orbiteur sur la Lune, sur Mars ou plus loin obtiendra-t-il une position et une heure dignes de confiance ? | lunar-relay-constellation, mars-orbit-pnt |
| Aviation et drones | Après qu'un brouilleur a coupé le GNSS, combien de temps mon système d'aéronef sans équipage (UAS) reste-t-il dans son budget de position, et l'intégrité est-elle disponible sur mon itinéraire ? | small-uas-jammed-nav, araim-gps-galileo |
| Maritime | Jusqu'où sur l'eau un brouilleur porte-t-il, un décalage de position serait-il détecté, et combien de temps un navire peut-il poursuivre sa route à l'estime jusqu'au port ? | maritime-strait-jamming, maritime-spoof-position-push, maritime-port-approach-coast |
| Route et automobile | De combien une voiture dérive-t-elle sous un viaduc ou près d'un brouilleur en bord de route ? | automotive-urban-canyon |
| Rail | Combien de secondes après l'entrée dans un tunnel un train peut-il encore dire sur quelle voie il se trouve ? | rail-tunnel-coast |
| Infrastructures critiques et synchronisation temporelle | Si l'heure GNSS est perdue ou leurrée, combien de temps un réseau électrique, une plateforme de négociation ou un centre de données conservent-ils une heure traçable ? | clock-holdover, clock-ensemble |
| Télécoms et 5G | Si la référence de temps GNSS est perdue, l'horloge de mon réseau reste-t-elle dans les masques ITU-T, et pendant combien de temps ? | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Science et recherche | Puis-je reproduire, étendre et citer un résultat PNT, jusqu'à la graine ? | sweep-clock-stability, quantum-pnt-demonstrator.suite |
Preuves#
176 sur 401 capacités vérifiées par rapport à des références externes indépendantes ; 221 honnêtement étiquetées comme modélisées. Chaque ligne de la matrice de vérification nomme une capacité, la référence par rapport à laquelle elle est vérifiée, le test qui exécute la vérification et l'étiquette qui en découle. L'intégration continue (CI) rend impossible d'appeler une capacité VALIDATED sans référence externe indépendante.
| Étiquette | Lignes | Signification |
|---|---|---|
| VALIDATED | 176 | une référence externe indépendante concorde : données réelles, implémentation indépendante ou vecteurs de référence publiés |
| MODELLED | 221 | vérifié par rapport à une vérité analytique ou à l'autocohérence d'une simulation, et dit à haute voix |
| PARTNER | 4 | détenu par un partenaire matériel ; Kshana ne détient aucune référence pour cela |
Quelques-unes des vérifications : les 666 vecteurs AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 SGP4 (Simplified General Perturbations 4) à 4,12 mm ; le modèle de forces de Cowell à 0,08 m par rapport à Orekit 12,2 ; Galileo à 0,61 m et Swarm-A à 0,10 m par rapport à de vraies éphémérides précises de l'Agence spatiale européenne (ESA). Les tests tiennent près de 95 % de couverture de lignes de src/, contrôlée à 85 % en CI. Le registre est docs/VERIFICATION-MATRIX.md, généré à partir de src/verification.rs : la matrice complète de 401 lignes, et pourquoi chaque ligne modélisée n'a pas de référence externe dans docs/MODELLED-RATIONALE.md.
Comment fonctionne la validation, le tableau des points forts choisis et les figures de preuve
Validation, reproductibilité et honnêteté#
- Chaque terme de bruit est étalonné sur un chiffre publié et cité et validé par rapport à la relation standard (écart d'Allan pour les horloges ; croissance de l'erreur de navigation à l'estime de Groves pour l'inertie ; la conversion synchronisation temporelle→télémétrie pour le transfert de temps). L'état par terme est suivi dans
docs/VALIDATION.mdcommevalidatedounot modeled— rien n'est présenté comme validé qui ne le soit pas. - Reproductible par construction :
scenario + seed + engine version → identical bits.scripts/check-reproducible.shl'impose ; les exécutions quantiques et classiques utilisent des graines indépendantes afin que leur bruit soit non corrélé. - La maturité est énoncée honnêtement : les chiffres des horloges optiques et des liaisons optiques sont des résultats de cibles / démonstrateurs au sol, non volés.
L'étiquette de preuve sur chaque figure#
Chaque figure et chaque tableau qu'une exécution écrit indique dans quelle mesure on peut s'y fier, et sur quelles lignes du registre cela repose. Le JSON de résultat a une clé evidence, le SVG du graphique une ligne sous le tracé (et un élément <metadata id="kshana-evidence">), et le tableau CSV des lignes de commentaire # evidence: en tête (lues avec comment='#'). Elle nomme un niveau, VALIDATED, MODELLED ou PARTNER, et les identifiants (VM- et huit chiffres hexadécimaux) des lignes de la matrice de vérification que l'exécution a mises en jeu. Le niveau est le plus faible de ces lignes, de sorte qu'une exécution qui s'appuie sur une ligne modélisée est étiquetée MODELLED quel que soit le nombre de lignes vérifiées à côté ; l'étiquette ne peut jamais prétendre à plus que le registre. Les lignes, les statuts et les identifiants sont lus dans la matrice, et non saisis à la main (docs/VERIFICATION-MATRIX.md, docs/SCHEMA.md), et tests/evidence_labels_doc_sync.rs échoue si une figure n'a pas d'étiquette ou si une étiquette est en désaccord avec la matrice.
La validation en un coup d'œil#
Chaque ligne est imposée par un test nommé en CI. Ce tableau est un choix de points forts ; la matrice complète vérifiée par machine compte 401 lignes — 176 VALIDATED, 221 MODELLED, 4 PARTNER (src/verification.rs), avec les preuves complètes (et ce qui n'est honnêtement pas encore vérifié) dans docs/VALIDATION.md et l'artefact kshana-validation-summary.html de chaque version (généré par cargo run --bin validation_report, attesté SLSA — Supply-chain Levels for Software Artifacts).
La colonne État indique la nature de la preuve, conformément à l'échelle de validation ci-dessus : VALIDATED = vérifié par rapport à une référence externe indépendante (données réelles, bibliothèque indépendante ou vecteurs de référence publiés) ; MODELLED = vérifié par rapport à une vérité analytique ou à l'autocohérence d'une simulation (pas de jeu de données externe indépendant). VALIDATED décrit la méthode de vérification, non une réussite/un échec — un écart honnête par rapport à une vraie référence externe reste VALIDATED, tandis qu'une comparaison qu'aucune ligne de la matrice ne nomme comme référence (l'ajustement LRO — Lunar Reconnaissance Orbiter — ci-dessus) est montrée comme MODELLED. Les lignes CI sont des garde-fous de processus, non des chiffres de mérite. Quelques îlots de données réelles (l'horloge au césium mesurée, Stable32 PHASE.DAT, et les vérifications OPS-SAT/ICGEM où les entrées brutes ne portent aucune licence de redistribution) sont conditionnés aux données : le test imprime un avis d'omission et reste vert lorsque l'entrée est absente, et les chiffres de référence publics sont versés au dépôt sous tests/fixtures/. Reproduisez les entrées brutes avec le scripts/fetch_*.sh correspondant.
| État | Capacité | Concordance | Référence / référence indépendante |
|---|---|---|---|
| VALIDATED | Propagation SGP4/SDP4 | 666/666 vecteurs, pire cas 4,12 mm | AIAA 2006-6753 (Vallado tcppver.out) + comparaison directe avec la crate sgp4 indépendante |
| VALIDATED | Référentiels — nutation IAU 2000A/B, chaîne CIO IAU 2006/2000A, ERA | bit à bit (X,Y à 1e-14, s à 1e-18, ERA à 1e-12) | ERFA/SOFA eraXys06a · eraC2ixys · eraEra00 · eraNut00a/b |
| MODELLED | GCRS→ITRS par rapport à un moteur SPICE indépendant | max 0.028″ → ≤ 0,86 m au sol, ≤ 3,6 m en orbite GNSS | ANISE (NAIF/SPICE en Rust pur), mêmes EOP IERS finals2000A, 8 époques 2020–2023 (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| MODELLED | Géopotentiel EGM2008 (degré/ordre 70) | accélération = ∇V à < 1e-6 ; effondrement zonal vers J2 validé | Coefficients NGA EGM2008 + identité analytique ∇V |
| VALIDATED | Synthèse des fonctionnelles de gravité (carte de navigation assistée par la gravité / sans GNSS) | Somigliana GRS80 + γ_e/γ_p à 3.5e-12 ; carte de perturbation EGM2008 réelle physique (RMS ≈ 26 mGal, d/o 70) | Gravité normale de Somigliana GRS80 (Moritz 1980, IAG — Association internationale de géodésie) + vraie EGM2008 de l'ICGEM (tests/icgem_gravity_reference.rs) |
| VALIDATED | Estimateurs d'Allan (ADEV/MDEV/TDEV/HDEV) + bandes de confiance | reproduisent les écarts de référence ; les bandes χ² concordent | NIST SP 1065 (Riley), tableau 31/32 de 1000 points |
| VALIDATED | Estimateurs d'Allan sur une vraie horloge au césium mesurée | OADEV/OHDEV à 1e-3 (observé ≤ 3e-5), 16 facteurs de moyennage | Stable32 sur un vrai 5071A Cs contre maser à H, 556 990 pts (tests/cs5071a_reference.rs, conditionné aux données) |
| VALIDATED | Estimateurs d'Allan sur le PHASE.DAT canonique de Stable32 | OADEV/MDEV/TDEV à 1e-3 (observé ≤ 5e-5), 139 facteurs de moyennage | Écarts de référence Stable32 pour PHASE.DAT (tests/phasedat_reference.rs, conditionné aux données) |
| MODELLED | Modèle d'erreur d'IMU — ARW / VRW / instabilité de biais | retrouvé à < 5 % (instabilité de biais < 15 %) | Fiche technique Analog Devices ADIS16465 ; profil de référence NaveGo |
| VALIDATED | Propagateur numérique de Cowell + modèle de forces (niveaux conservatifs) | pire erreur de position 0,08 m sur 24 h, 278 époques (LEO + GTO) | Orekit 12,2 NumericalPropagator/DormandPrince853 (CS GROUP), tests/numerical_cowell_propagator_reference.rs |
| MODELLED | Niveau de traînée de Cowell + entrées absolues d'éphéméride du Soleil et de la Lune et de densité | niveau de traînée caractérisé ≈ 333 m / 24 h ; le non perturbé concorde avec Kepler en variables universelles à moins d'un mètre, énergie/moment ~1e-9 | éphéméride intégrée de faible précision + Kepler analytique |
| MODELLED | Lambert · Tsiolkovsky · porkchop | aller-retour vers la vérité à deux corps ; ΔV < 0.01 % | Izzo 2015 · équation de fusée · plancher analytique de Hohmann |
| MODELLED | Détermination d'orbite (par lot de Gauss–Newton) | inframétrique / mm·s⁻¹ sans bruit ; ~2 m à un plancher de bruit de 5 m | deux corps + J2 sur un arc RK4 |
| MODELLED | Ajustement du modèle de forces par rapport à l'éphéméride précise de Galileo (arc complet) | 0,61 m RMS 3D, 24 h, d/o-70, forces seules | Orbite finale ESA0MGNFIN de l'ESA/ESOC (E11), vraies EOP finals2000A (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| MODELLED | Ajustement du modèle de forces par rapport à l'éphéméride précise de Swarm-A (à dynamique réduite) | 0,10 m RMS 3D (borne du niveau empirique, non une mesure) | Orbite précise SW_OPER_SP3ACOM_2_ de l'ESA (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| MODELLED | Ajustement du modèle de forces par rapport à LRO lunaire (échec honnête) | 6,67 m à dynamique réduite, au-dessus de la cible de 5 m | JPL Horizons LRO (NAIF −85) + GRAIL (Gravity Recovery and Interior Laboratory) GRGM660PRIM (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| MODELLED | OD martienne en espace lointain (SRIF à dynamique réduite) | ≈ 0,2 m Mars-LMO (FoM de simulation, non de mission réelle) | OD synthétique en boucle fermée — validation de la machinerie d'estimation |
| MODELLED | Dynamique martienne centrée sur le Soleil par rapport au DE440 du JPL | 137 m @ arc de 1 jour (croît avec l'arc = n-corps non modélisé) | JPL DE440 via ANISE (xval/anise-mars-od, conditionné au noyau) (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| VALIDATED | Positionnement à point unique par rapport à une coordonnée IGS relevée (observations réelles) | 5,7 m RMS 3D / 1,1 m à l'horizontale, SPP par code bifréquence sans ionosphère | Relevé de la station IGS ABMF + éphémérides diffusées GPS, 2018-05-13 (tests/pvt_abmf.rs) |
| MODELLED | UKF GNSS/INS fortement couplé | 0,77 m RMS sur un passage LEO de 30 min dont une interruption de 120 s | marche libre avec modèle de forces, dérivé à la main |
| MODELLED | Navigation par carte de gravité sans GPS | dérive INS de ~70 km → ~145 m récupérés | Cible Quantum Wayfarer du NAVISP de l'ESA |
| MODELLED | Navigation référencée au terrain (TERCOM/SITAN) | dérive de 70 km → < 500 m (plancher de résolution de grille ~140 m) | MNT SRTM .hgt ; dérive injectée à la main (vérification non circulaire) |
| MODELLED | Champ principal IGRF-14 (degré/ordre 13) | pôle ~80,7°N, dipôle ~29,7 µT, bande physique de 22–67 µT | IAGA (Association internationale de géomagnétisme et d'aéronomie) igrf14coeffs.txt (semi-normalisé de Schmidt) |
| MODELLED | Modulation du signal de navigation et poursuite de code | auto-SSC BPSK = 2/(3·R_c) ; PSD d'aire unitaire ; gigue DLL C/A inframétrique à 45 dB-Hz | Ancres SSC/PSD en forme fermée + formule de bruit thermique DLL de Kaplan & Hegarty |
| MODELLED | Correcteur différentiel CR3BP halo/NRHO | STM = différences finies ; l'orbite se referme à la précision machine ; NRHO L2 9:2 ≈ 6,57 j / périlune ≈ 3 250 km | vérification de la STM par différences finies + NRHO australe L2 9:2 publiée (≈ 6,56 j / ≈ 3 370 km) — CR3BP, non une véritable éphéméride de Gateway |
| MODELLED | Intégrité ARAIM bi-constellation | mode de panne à l'échelle de la constellation sur de vrais GPS + Galileo | Rapport technique (TR) ARAIM de l'UE / DO-316 ; Celestrak gps-ops 2021-07-28 (comparé à cette référence ; aucune ligne de la matrice de vérification ne la nomme comme référence externe, il n'est donc pas étiqueté VALIDATED) |
| VALIDATED | Géométrie GNSS / DOP (GDOP/PDOP/HDOP/VDOP/TDOP) | concordance à 1e-6 en relatif sur 8 géométries (bien conditionnée → quasi singulière) | gnss_lib_py 1.0.4 (Stanford NAV Lab) — bibliothèque indépendante (tests/dop_reference.rs) |
| VALIDATED | Métriques d'évaluation de détecteurs d'apprentissage automatique (AUC/ROC/confusion/Pd-Pmd/précision/F1) | comptes exacts + < 1e-9 sur 5 jeux de données × 24 seuils | scikit-learn 1.9.0 (Pedregosa et al., JMLR — Journal of Machine Learning Research — 2011) — bibliothèque indépendante (tests/eval_metrics_reference.rs) |
| VALIDATED | AUC ROC de détection d'anomalies sur de la vraie télémétrie ESA OPS-SAT | l'AUC reproduit scikit-learn à < 1e-9 ; AUC du détecteur par comptage de pics ≈ 0.85 sur la partition de test étiquetée | roc_auc_score de scikit-learn sur la partition de test OPSSAT-AD (Ruszczak et al. 2025, CC BY 4,0) — vraie télémétrie OPS-SAT (tests/opssat_ad_reference.rs) |
| VALIDATED | Noyaux numériques de l'arbitrage quantique (ajustement NNLS de l'ADEV · bandes de cohérence χ² · Q d'horloge de van Loan) | NNLS + Q exacts ; χ² < 5e-4 à ddl de fonctionnement ≥ 48 | scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm (tests/scipy_reference.rs) |
| VALIDATED | Métriques de dérive télécom MTIE / MDEV / TDEV (ITU-T G.810/G.823/G.8261/G.811 — les recommandations du Secteur de la normalisation des télécommunications de l'Union internationale des télécommunications) | MTIE (9 facteurs de moyennage, exacte au bit près) et MDEV + TDEV (8 facteurs, < 1e-9 en relatif) sur la série LCG (générateur congruentiel linéaire) NIST SP 1065 | allantools 2024,06 mtie / mdev / tdev — bibliothèque indépendante (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs) |
| VALIDATED | Méthodes d'étude d'arbitrage MCDA — les quatre familles de décision, neuf agrégateurs validés en externe (WSM · WPM · WASPAS · MOORA · COPRAS · TOPSIS · VIKOR · PROMETHEE II · ELECTRE I) plus pondération de priorité par comparaison par paires AHP | scores / classements / matrices de concordance reproduits à < 1e-9 | pymcdm + pyDecision (bibliothèques MCDA tierces indépendantes) + RI (indice aléatoire) de Saaty / valeurs propres SciPy-LAPACK (tests/mcda_*_reference.rs) |
| VALIDATED | Enveloppe Doppler LEO à partir de l'orbite et de la porteuse | Maximum d'Iridium à 5 % près du ±36 kHz publié ; Xona Pulsar X1 dans le 32–34 kHz publié | Résultats de test PNT LEO du RNTF ; Leclère, Marathe & Reid, arXiv:2509,19551 (tests/leo_doppler_reference.rs) |
| MODELLED | Convergence PPP avec augmentation LEO | 7,4 → 4,8 / 3,2 / 2,7 / 2,3 min avec 60 / 96 / 192 / 288 satellites LEO, monotone ; NEES du filtre dans la bande χ² | tendance comparée à Li et al., J. Geod. 93:749 (2019) (9,6 → 7,0 / 3,2 / 2,1 / 1,3 min) ; constellations et bruit non reproduits |
| MODELLED | Niveau de protection temporel conditionnel (erreur de temps non détectée limitée par le holdover sous leurrage) | la composition reproduit la récurrence de covariance multipas clock_state ; étalonnée sur un vrai leurrage enregistré |
Scalaires JammerTest 2024 (Zenodo 15911589) + formes fermées de van Loan / CUSUM (examples/tpl_jammertest) |
| MODELLED | Notation de résilience PNT + instabilité de décision | 35 tests de référence dérivés à la main ; artefact d'étude déterministe à l'octet près (graine fixe) | Correspondance DHS RPCF v2.0 + formes fermées de Dirichlet / tau de Kendall / Hill-N2 — architectures synthétiques, non une certification |
| MODELLED | Étude de l'écart d'optimisme des dégradations RF (lois d'échelle + prédicteur par laisser-un-de-côté) | significativité par hypothèse nulle de permutation ; artefact déterministe à l'octet près (5 graines) | corpus synthétique ancré sur des paramètres — les métriques d'évaluation sont VALIDATED par rapport à scikit-learn (ci-dessus) ; l'étude est MODELLED |
| CI | Reproductibilité multiplateforme | entrée identique bit à bit + références de forme (golden) sur 3 OS (systèmes d'exploitation) | Matrice CI Linux / macOS / Windows, références SHA-256 (golden) |
| CI | Couverture de test | ~95 % de lignes sur src/ hors src/*_data.rs et src/main.rs, contrôlé à ≥ 85 % |
cargo-tarpaulin (moteur LLVM) |
Comment une capacité gagne son étiquette — l'invariant imposé par la CI : pas de référence externe ⇒ ne peut pas être validée · SVG
En haut : chaque ligne validée est étayée par un jeu de données externe, par construction. En bas : SGP4 concorde avec la référence officielle dans chaque régime (pire cas 4,12 mm). SVG · SVG
176 vérifiées · 221 modélisées · 4 du partenaire — SVG
Domaines de capacités#
Chaque capacité de la carte publique, par domaine, avec son étiquette de registre. Le tableau des domaines est écrit par tools/gen_readme_blocks.py à partir de web/capabilities.json, le même fichier que lit la carte de tout du Studio.
Le tableau complet, domaine par domaine avec chaque capacité et son étiquette, est docs/CAPABILITY-DOMAINS.md.
Installation#
Une ligne suffit pour obtenir l'outil en ligne de commande : cargo install kshana. Chaque canal livre la v0.40.0 à partir du même commit étiqueté.
| Canal | Installation | Guide |
|---|---|---|
| Essayer dans le navigateur | ouvrez https://kshana.dev | Guide du Studio |
| Ligne de commande (Rust) | cargo install kshana |
Utilisation de la ligne de commande |
| Bibliothèque Rust | cargo add kshana |
Référence de l'API sur docs.rs |
| Python | pip install kshana |
Guide de l'API Python |
| JavaScript et WebAssembly | npm install kshana |
Guide npm et WebAssembly |
| Assistant IA (serveur MCP, cargo) | cargo install kshana-mcp |
Guide du serveur MCP |
| Image Docker | docker run --rm -i ghcr.io/ashfordeou/kshana-mcp |
Guide du serveur MCP : Docker |
| Cursor (un clic) | Ajouter à Cursor (npx) · Ajouter à Cursor (Docker) · npx -y kshana-mcp@0.40.0 |
Tous les extraits d'installation MCP |
| VS Code (un clic) | Installer dans VS Code (npx) · Installer dans VS Code (Docker) · npx -y kshana-mcp@0.40.0 |
Tous les extraits d'installation MCP |
| npx | npx -y kshana-mcp@0.40.0 |
Tous les extraits d'installation MCP |
| uvx / pipx | uvx kshana-mcp==0.40.0 |
Tous les extraits d'installation MCP |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
Tous les extraits d'installation MCP |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket && scoop install kshana-mcp |
Tous les extraits d'installation MCP |
| winget | winget install AshfordeOU.KshanaMcp |
Tous les extraits d'installation MCP |
| Binaire précompilé | téléchargez kshana-mcp-<target> depuis la version publiée et vérifiez-le avec SHA256SUMS | Tous les extraits d'installation MCP |
| Registre MCP officiel | recherchez io.github.ashfordeOU/kshana-mcp | Tous les extraits d'installation MCP |
| Distant (HTTP en flux continu), auto-hébergé | kshana-mcp --http 127.0.0.1:8080 |
Guide d'auto-hébergement |
| Plugin d'IDE JetBrains | Settings → Plugins → Marketplace → recherchez « Kshana » (ID du module d'extension dev.kshana.ide) | Guide du plugin |
| Module d'extension Signal K | npm install signalk-kshana-trust |
Guide du module d'extension Signal K |
| Module d'extension OpenCPN | téléchargez l'archive tar du module d'extension depuis la version publiée | Soumission au catalogue OpenCPN |
| Tableau de bord Grafana | importez kshana-grafana-*.json depuis la version publiée | Source du tableau de bord |
| Image de la version de référence | docker pull ghcr.io/ashfordeou/kshana-reference-build |
Intégrations maritimes |
Kshana sur le JetBrains Marketplace Se compile avec Rust 1,88 ou plus récent, la rust-version de Cargo.toml
MCP est le Model Context Protocol. Épinglez une version avec cargo install kshana --version 0.40.0, pip install kshana==0.40.0 ou npm install kshana@0.40.0. Pour compiler depuis les sources, voir Installer et compiler sous Référence.
Exécuter un scénario depuis Python et depuis WebAssembly
import json, kshana
toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml))
print(kshana.version(), result["quantum"]["fom"]["holdover_s"], result["classical"]["fom"]["holdover_s"])
# 0.40.0 6600.0 2610.0
Outre run, le module expose run_full (JSON, SVG et le résumé en une ligne à la fois), run_typed, validate_toml, list_kinds / scenario_kinds et error_kind ; voir docs/PYTHON_API.md.
Le paquet npm est le moteur entier compilé en WebAssembly. Dans Node.js, passez le binaire à initSync ; dans un navigateur, await init() le récupère (voir README.npm.md).
import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";
const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) });
const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml));
console.log(version(), result.quantum.fom.holdover_s, result.classical.fom.holdover_s);
// 0.40.0 6600 2610
console.log(summary(toml));
Architecture#
Un moteur ouvert se trouve au centre, et chaque surface l'exécute : la ligne de commande, la bibliothèque Rust, Python, WebAssembly et Kshana Studio, le serveur MCP, l'image Docker et le module d'extension JetBrains. Le même fichier de scénario donne les mêmes octets sur chacune. Kshana Pro se place au-dessus comme une surcouche distincte qui dépend du moteur et ne le fait jamais diverger.
À l'intérieur du moteur : les couches de domaine et le registre de vérification
Un seul moteur, de nombreuses portes d'entrée. Un cœur Rust unique (kshana) exécute chaque scénario, atteint par une CLI, une extension Python, un module WebAssembly dans le navigateur, un serveur MCP pour agents d'IA, et un module d'extension d'IDE JetBrains — tous convergeant vers une seule répartition api::run_toml. À l'intérieur, les paquets de capteurs se branchent sur une interface commune de modèle d'erreur ; à côté se trouvent une couche de référentiels (précession–nutation IAU 2006/2000A et réduction GCRS↔ITRS fondée sur le CIO), une couche d'astrodynamique/numérique (SGP4/SDP4 analytique et un propagateur numérique de Cowell avec son modèle de forces EGM2008/perturbations, la conception de manœuvres et la détermination d'orbite), une couche d'intégrité/GNSS (RAIM/ARAIM, SBAS, le domaine de mesure, le brouillage, le cislunaire), une couche de fusion / PNT alternatif (les estimateurs GNSS/INS et les appariements de cartes de gravité/terrain/magnétisme), une couche d'espace lointain et lunaire (PNT martien radiométrique et la suite PNT lunaire, son niveau de preuve par élément dans la matrice — temps LTC, VLBI, OD + horloge conjointes, réalisation de référentiel, volume de service, PNT différentiel, interopérabilité), une couche d'analyse de mission (budgets de lancement / rentrée / couverture / pointage / passage / liaison et l'environnement de météorologie spatiale), et la couche ouverte d'études de résilience et d'apprentissage automatique (notation de résilience RPCF, l'écart d'optimisme des dégradations RF, et le démonstrateur de PNT à technologie quantique) dont les artefacts reproductibles s'appuient sur les noyaux validés.
Deux crates autonomes, exclues de l'espace de travail, se trouvent à côté du cœur — mcp/kshana-mcp (le serveur MCP, construit sur le SDK rmcp édition 2024) et xval/anise-frames (le recoupement des référentiels ANISE/SPICE, qui tire des dépendances MPL-2.0 (Mozilla Public License 2,0)) — tenues hors du graphe de dépendances de la crate publiée, de Cargo.lock, de la barrière de licences et de la compilation MSRV (version minimale de Rust prise en charge) par la liste exclude du Cargo.toml racine. Le module d'extension JetBrains (ide/jetbrains) est un projet Kotlin distinct. Voir docs/ARCHITECTURE.md pour l'ensemble complet des diagrammes.
Les diagrammes restitués (flux du moteur, carte des modules, distribution) sont dans docs/ARCHITECTURE.md.
Diagrammes#
Les diagrammes sont des sources Mermaid dans docs/diagrams/, restituées en SVG et PNG dans docs/assets/diagrams/ (tools/render-diagram-chromium.sh <name> sous Linux, les deux autres scripts render-diagram ailleurs), et un enregistrement lie chaque PNG au SVG exact dont il provient. Des tests figent les comptes qu'ils énoncent. Les graphiques des sections ci-dessus sont tracés par des outils à partir d'exécutions du moteur ; ceux-ci montrent comment les parties s'assemblent.

Une répartition, un moteur, une sortie reproductible · SVG · source system-overview.mmd

Chaque surface, à partir du même moteur · SVG · source surfaces.mmd

La boucle interne d'une exécution · SVG · source engine-flow.mmd

D'un journal de récepteur à un score de confiance et à ce qui l'utilise · SVG · source trust-flow.mmd

Du scénario au paquet signé ; Kshana ne produit ni ne rejoue jamais de signal · SVG · source lab-round-trip.mmd

Comment le Studio s'exécute, en local · SVG · source studio-flow.mmd

Flux de test et de publication, des barrières locales à une version vérifiée et au chemin réservé au site · SVG · source release-flow.mmd · docs/RELEASING.md

Où se trouve le code · SVG · source module-map.mmd

Ce qui est livré où, et ce qui le vérifie · SVG · source distribution.mmd
Assistant IA#
kshana-mcp est un serveur MCP : votre assistant exécute le vrai moteur et relit son JSON, au lieu de deviner les calculs. Chacun de ses 49 outils est une fine enveloppe autour d'une fonction publique de la bibliothèque kshana, de sorte qu'aucune logique de simulation ne réside dans le serveur.
Installer le serveur MCP#
À titre consultatif, pas un équipement de navigation homologué : l'opérateur reste responsable de la navigation. Le serveur s'exécute sur votre ordinateur ; rien n'est envoyé à Ashforde OÜ.
Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.
| Canal | Commande ou bouton | Nécessite | Forme épinglée |
|---|---|---|---|
| Cursor (un clic) | npx (Node) · Docker | Node, ou Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (un clic) | npx (Node) · Docker · Insiders (npx) | Node, ou Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| npx | npx -y kshana-mcp@0.40.0 |
Node 18+ | kshana-mcp@0.40.0 |
| uvx / pipx | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
Python 3,9+ avec uv ou pipx | kshana-mcp==0.40.0 |
| Docker | docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
Docker | ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
brew | formule pour v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket puis scoop install kshana-mcp |
Scoop (Windows) | manifeste pour v0.40.0 |
| winget | winget install AshfordeOU.KshanaMcp |
winget (Windows) | --version 0.40.0 |
| cargo | cargo install kshana-mcp --version 0.40.0 |
Rust 1,88+ | kshana-mcp 0.40.0 |
| Binaire précompilé | la page de la version : kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], vérifié par SHA256SUMS et gh attestation verify |
aucun | v0.40.0 |
| Registre MCP | io.github.ashfordeOU/kshana-mcp (trouvé par les clients compatibles avec le registre) |
un client compatible avec le registre | 0.40.0 |
| À distance (streamable HTTP) | kshana-mcp --http 127.0.0.1:8080, auto-hébergé : voir docs/deploy/mcp-http.md |
votre propre hôte | v0.40.0 |
kshana-mcp sur Glama, son score de qualité de serveur MCP
Un passage nommant des clients d'IA tiers est omis ici ; il figure dans README.md sur GitHub.
La configuration par client est dans docs/integrations.md. Le serveur est répertorié dans le registre MCP officiel sous le nom io.github.ashfordeOU/kshana-mcp.
Les 49 outils
Scénarios et rapports
| Outil | Ce qu'il fait |
|---|---|
run_scenario |
Exécuter un scénario à partir d'une définition TOML (Tom's Obvious, Minimal Language) |
list_scenario_kinds |
Les 92 types de scénario intégrés, avec leurs descriptions et leurs champs obligatoires et facultatifs — pour que l'agent puisse construire un scénario valide |
validate_scenario |
Contrôle préalable : analyser le TOML et détecter son type, sans l'exécuter |
list_example_scenarios |
Les scénarios de référence fournis, en JSON |
get_example_scenario |
Le texte TOML d'un scénario de référence fourni, octet pour octet le fichier sous scenarios/ |
report_scenario |
Exécuter un scénario et renvoyer son rapport |
animate_scenario |
Exécuter un scénario et renvoyer sa série temporelle sous forme d'animation |
sky_geometry |
Géométrie du ciel sous un horizon dépendant de l'azimut : les satellites visibles et masqués, le DOP, la covariance est-nord-haut et l'ellipse d'erreur horizontale ; ou un préréglage d'horizon avec sa provenance |
Exportation et interopérabilité
| Outil | Ce qu'il fait |
|---|---|
list_export_formats |
Quels formats d'interopérabilité s'appliquent à un scénario (czml, kml, geojson, stk, sigmf), la raison lorsque l'un ne s'applique pas, et la spécification que suit chaque écrivain |
export_interop |
Exporter un scénario en CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, éphéméride STK (Systems Tool Kit) .e, ou SigMF (Signal Metadata |
import_route |
Écrire un itinéraire GeoJSON LineString dans un scénario qui suit une trace de points de passage (terrain-nav, terrain-slam, gravity-map, combined-altpnt) et renvoyer le nouveau TOML |
export_sp3 |
Exporter la constellation d'un scénario orbit en éphéméride précise SP3-c (Standard Product 3, révision c) |
export_omm |
Exporter les éléments d'un scénario orbit en catalogue OMM (Orbit Mean-elements Message) CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 |
export_oem |
Exporter la série d'états d'un scénario orbit en éphéméride CCSDS OEM (Orbit Ephemeris Message) 2,0 — la position TEME (vrai équateur, équinoxe moyen) et |
export_table_csv |
Exécuter un scénario et renvoyer son tableau de reproductibilité en CSV (valeurs séparées par des virgules) — le tableau stable à l'octet près que la CLI (interface en ligne de commande) écrit sous le nom <scenario>.table.csv |
export_test_bench |
Le mouvement du véhicule et les événements d'un scénario pour un simulateur GNSS de laboratoire (kshana bench-export) |
Confiance du récepteur et du navire
| Outil | Ce qu'il fait |
|---|---|
assess_receiver_log |
Évaluer la confiance d'un vrai journal de récepteur GNSS (système mondial de navigation par satellite) |
assess_vessel_stream |
Noter un extrait NMEA 0183 borné (au plus 2 Mio et 20 000 époques |
assess_vessel_log |
Un journal NMEA 0183 de navire (au plus 4 Mio) en exécution par lot, avec le TOML de session énonçant les limites du navire |
create_evidence_pack |
Un paquet de preuves signé pour une fenêtre du journal d'un navire (kshana receiver-trust evidence) |
attach_evidence_timestamp |
Lier un jeton d'horodatage RFC 3161 (base64 des octets .tsr) à un paquet, en mémoire (kshana evidence attach-timestamp) |
verify_evidence_pack |
Vérifier un paquet (kshana evidence verify) |
generate_training_nmea |
NMEA 0183 de passerelle synthétique pour la formation des équipages à partir d'un TOML nmea-scenario (brouillage, décrochage de position, leurrage temporel, retard de rejeu) avec le journal d'instructeur (kshana-nmea-training/1) |
build_interference_map |
Une carte d'interférences GNSS à partir de rapports de position ADS-B ou AIS sous forme de texte CSV (au plus 4 Mio) |
route_exposure |
La part de la longueur d'un itinéraire dans des cellules dégradées, non dégradées, non évaluées et non observées d'une ou plusieurs cartes d'interférences, éventuellement dans une plage de dates |
trust_telemetry |
Un flux de confiance (lignes JSON) ou un résultat receiver-trust restitué sous forme de texte Prometheus, de lignes syslog CEF ou LEEF ou d'une charge utile JSON OTLP, avec les encodeurs kshana trust-telemetry |
jammertest_import |
Lit le catalogue d'essais et le plan de transmission Jammertest publiés (NPRA/jammertest-plan, MIT) comme vérité planifiée (kshana jammertest import) : les créneaux d'une zone d'essai deviennent des événements de confiance du récepteur avec l'identifiant du catalogue et l'année dans chaque libellé. Des créneaux planifiés, non des heures d'émission enregistrées ; aucun champ de contact du plan n'est lu. MODELLED. Voir docs/JAMMERTEST.md. |
jammertest_score |
Note un journal de récepteur par rapport à ce calendrier (kshana jammertest score) : par essai, la latence de détection, les alarmes manquées et le temps de rétablissement, et les fausses alarmes en dehors de tous les créneaux. Journaux texte sous forme de log, binaires (ubx, sbf) sous forme de log_base64. Un paquet signé exige une clé : ligne de commande. À titre consultatif seulement ; MODELLED. |
fit_imu_log |
Paramètres d'accéléromètre et de gyroscope des scénarios hybrid et fusion ajustés à partir d'un journal d'IMU immobile (CSV ou EuRoC) par écart-type d'Allan, avec une table [accel_classical] prête à coller et le SHA-256 du journal (kshana imu-fit). Texte en entrée, JSON en sortie ; MODELLED. |
IQ GNSS (fichiers du répertoire de travail ; désactivé en mode HTTP)
| Outil | Ce qu'il fait |
|---|---|
iq_signals |
La configuration de la couche IQ GNSS |
iq_info |
Décrire un enregistrement IQ (en phase et en quadrature) du répertoire de travail sans le traiter |
iq_scene |
Générer une scène IQ GNSS multi-satellites dans le répertoire de travail (kshana iq scene) |
iq_acquire |
Acquisition par FFT (transformée de Fourier rapide) d'un ou plusieurs PRN (codes de pseudo-bruit) sur un enregistrement (kshana iq acquire), éventuellement derrière des étages d'entrée |
iq_track |
Acquérir, puis poursuivre avec le banc de DLL/PLL/FLL (boucles à verrouillage de délai, de phase et de fréquence) (kshana iq track), avec les boucles issues d'un `kshana.loop-desig |
iq_frontend |
Appliquer le DSP (traitement numérique du signal |
iq_sweep |
Rejouer un enregistrement IQ du répertoire de travail sur plusieurs conceptions de boucle de poursuite (kshana iq sweep) |
iq_monitor |
Exécuter les moniteurs de détection d'interférences et de leurrage sur un enregistrement IQ du répertoire de travail (kshana iq monitor) |
iq_labfit |
Ajuster le modèle de perte d'accrochage de la boucle de poursuite à des exécutions de laboratoire (kshana iq labfit) à partir d'un scénario iq-labfit dont les journaux sont en ligne (text ou base64 |
iq_test_conditions |
Valider un fichier kshana.test-conditions/1 donné sous forme de texte et renvoyer les conditions résolues avec leur empreinte |
iq_campaign |
Exécuter une campagne de rejeu en laboratoire (kshana iq campaign) |
iq_campaign_status |
L'avancement du dossier de sortie d'une campagne |
Correspondance de compliance
| Outil | Ce qu'il fait |
|---|---|
compliance_report |
La correspondance avec le cadre public, remplie à partir de documents de résultats donnés sous forme de texte (kshana compliance-report) |
compliance_mapping |
Les tables de correspondance statiques (ou, avec sources, les documents sources qu'elles citent, avec leurs versions et leurs URL) au format Markdown, introduites par la même déclaration |
list_standards_packs |
Les paquets de normes (kshana standards-pack list) : des ensembles de scénarios notés pour les profils d'essai du cadre DHS Resilient PNT, IMO MSC.1/Circ.1575 et ICAO Doc 9849 Appendix F |
run_standards_pack |
Un paquet exécuté par rapport à des seuils énoncés avant l'exécution : chaque essai est MET, NOT MET ou NEEDS INPUT ; MODELLED, n'évalue aucun produit |
lunanet_afs_check |
Le signal LunaNet Augmented Forward Signal vérifié par rapport à LNIS V5 AD1 Volume A (LSIS-AFS V1.0) : les codes par rapport aux tables imprimées, ou un flux de symboles par rapport au format de trame ; le LDPC et le CRC-24Q des sous-trames 2 à 4 ne sont pas vérifiés |
create_round_trip_pack |
Le paquet signé d'aller-retour en laboratoire : scénario, document kshana.test-conditions/1, journal du récepteur et score liés par empreinte |
Benchmark
| Outil | Ce qu'il fait |
|---|---|
score_benchmark |
Une soumission kshana-bench notée par rapport à un fichier de vérité, tous deux en texte JSON (kshana bench score, bench/SPEC.md) : le fichier de résultat avec la version de la spécification, la partition, les condensats d'entrée et les métriques de la tâche. MODELLED ; décrit un journal ou un corpus, jamais un produit. |
render_leaderboard |
Fichiers de résultats kshana-bench rendus sous forme de page de classement statique (texte HTML), chacun validé d'abord. |
Éditions#
Tout le moteur est gratuit. Kshana Pro et les études sur mesure s'adressent aux programmes qui ont besoin de plus, et toute voie payante commence par un message : il n'y a aucun prix ici.
| Gratuit | Kshana Pro | Étude sur mesure | |
|---|---|---|---|
| Ce que c'est | tout le moteur ouvert, les 92 types de scénario, sans restriction de fonctionnalités | une surcouche propriétaire sur le même moteur, sous contrat | une étude MODELLED de la résilience PNT de votre système, réalisée pour vous |
| Licence | AGPL-3.0 (GNU Affero General Public License, version 3), ou une licence commerciale | propriétaire | contrat |
| Pour commencer | installer ou ouvrir kshana.dev | demander une évaluation de Pro | demander une étude |
Ce qu'est Pro, selon les termes de docs/PRO.md :
Un sur-ensemble strict de Kshana ouvert. Pro dépend du moteur ouvert comme d'une bibliothèque et ne le duplique jamais. Tout type de scénario ouvert s'exécute dans Pro sans changement, et un scénario ouvert s'exécute dans Pro sans aucune licence.
Aucune physique nouvelle. Pro n'ajoute aucun modèle physique et n'en modifie aucun. Chaque nombre de Pro provient d'exécutions du moteur ouvert ; un chiffre de Pro est donc aussi digne de confiance que le type de scénario ouvert dont il provient, et jamais davantage.
Pro répond aux questions suivantes d'un programme : quelle conception faire voler (un optimiseur de conception et son front de Pareto), quel est le degré de certitude de la réponse (incertitude et sensibilité), et si la mission satisfait ses exigences (un dossier de mission, la traçabilité des exigences, des études de compromis, une vérification de régression des scénarios, des jumeaux numériques d'horloge, un dossier d'étude et un service sur site). Il surveille aussi une campagne de chiffres et fait échouer un pipeline lorsque l'un d'eux se dégrade, teste des plans de signaux candidats par rapport aux signaux ouverts de navigation par satellite dans les deux sens (coexistence spectrale), et met des études en file d'attente dans un service de tâches sur site doté d'un registre de livraison chaîné par empreintes. Chacun est décrit, avec ce qu'il produit et ce qu'il ne fait pas, dans docs/PRO.md. Rien de ce que produit Pro n'est une certification, et une étude sur mesure n'en est pas une non plus.
Ce que Kshana Pro lit dans le moteur ouvert, et l'assistance d'Ashforde® OÜ
Sur quoi repose Kshana Pro. Chaque partie de Pro travaille à partir du moteur ouvert et le laisse inchangé :
- L'optimiseur de conception, l'étude d'incertitude et le dossier de mission exécutent des scénarios du moteur ouvert par l'interface publique du moteur et calculent chaque nombre à partir des résultats des exécutions. Chaque sortie conserve le niveau VALIDATED, MODELLED ou PARTNER que le moteur ouvert a attribué à chaque chiffre, jamais un niveau supérieur.
- Les jumeaux numériques d'horloge utilisent le modèle d'horloge du moteur ouvert et son estimateur de déviation d'Allan : un jumeau est calibré sur le budget d'Allan publié du dispositif, puis vérifié en estimant la déviation d'Allan du jumeau avec l'estimateur ouvert.
- Les études de compromis exécutent chaque option d'architecture comme un scénario du moteur ouvert, sans changement, et classent les options selon une figure de mérite lue dans le résultat de chaque exécution.
- La surveillance de campagne lit ses chiffres dans les résultats des exécutions du moteur ouvert des scénarios d'un paquet, et les compare à la dernière exécution réussie.
- La coexistence spectrale lit chaque nombre physique dans des exécutions du moteur ouvert des types
leo-signaletconstellation-design, et n'ajoute que la somme sur les satellites en vue et le classement des plans. - Le service de tâches sur site exécute des scénarios ouverts et Pro avec le même moteur et stocke chaque résultat tel que l'exécution l'a renvoyé.
- Les paquets de preuves consignent, pour chaque exécution, l'empreinte du scénario que le moteur ouvert appose sur son résultat, de sorte qu'un chiffre d'un paquet peut être reproduit en réexécutant son scénario.
- Outillage d'ingénierie système et de programme. L'outillage d'ingénierie système fondée sur les modèles (MBSE) et de programme de Kshana Pro vérifie les exigences d'un programme par rapport à des exécutions du moteur ouvert : il importe des exigences au format de valeurs séparées par des virgules (CSV), ou sous la forme d'un sous-ensemble documenté du Requirements Interchange Format (ReqIF) ou d'un texte Systems Modeling Language version 2 (SysML v2), évalue chaque critère d'acceptation, avec son unité, par rapport aux valeurs qu'une exécution a écrites, et produit une matrice de références croisées de vérification (VCRM), un modèle SysML v2, un rapport d'impact des changements et un paquet de preuves hors ligne. Il ne réexécute et ne recalcule rien, et ne lit que ce que le moteur ouvert publie : le
result.jsonde chaque exécution (les champs qu'un critère nomme, leurs unités, l'estampille de reproductibilité composée de l'empreinte du scénario, de la graine, de la version du moteur et de la version du schéma, ainsi que l'étiquette de l'exécution et les niveaux de ses chiffres), sonreport.json(type, enregistrement de reproductibilité et étiquettes de capacités), le fichier de scénario (son empreinte, son type, sa graine et ses paramètres), le schéma des unités des champs (l'unité, la provenance et le niveau de preuve de chaque champ) et la matrice de vérification (l'étiquette VALIDATED, MODELLED ou PARTNER de chaque capacité).
Assistance et services professionnels#
Kshana est gratuit et open source sous l'AGPL-3.0 et développé et maintenu professionnellement par Ashforde® OÜ (Estonie). Le moteur ouvert est complet et utilisable seul. Pour les organisations qui ont besoin de plus, Ashforde® OÜ propose :
- Assistance commerciale et intégration — intégration de Kshana dans votre chaîne d'outils, scénarios sur mesure et correctifs prioritaires.
- Modèles de capteurs sur mesure — calibrés sur votre matériel, y compris des modèles de résilience soumis à contrôle des exportations, maintenus dans une surcouche privée.
- Kshana Pro — outillage propriétaire d'ingénierie système fondée sur les modèles (MBSE) et de programme, qui vérifie les exigences d'un programme par rapport à des exécutions du moteur ouvert et produit une matrice de références croisées de vérification (VCRM), un modèle Systems Modeling Language version 2 (SysML v2), un rapport d'impact des changements et un paquet de preuves hors ligne. Il ne réexécute rien et ne lit que les sorties publiées du moteur : le
result.jsonet lereport.jsonde chaque exécution, le fichier de scénario, le schéma des unités des champs et les étiquettes de la matrice de vérification (la liste complète se trouve sous Éditions). - Outillage Kshana Pro de conception, d'incertitude et de mission — le front de Pareto d'un espace de conception, l'incertitude et la sensibilité sur des milliers d'exécutions, et un dossier de mission en une commande avec une matrice de vérification et un PDF ; voir
docs/PRO.md. - Surveillance de campagne, coexistence spectrale et service de tâches de Kshana Pro — un pipeline qui échoue lorsqu'un chiffre surveillé se dégrade, des plans de signaux testés par rapport aux signaux ouverts de navigation par satellite dans les deux sens, et une file de tâches sur site avec un registre de livraison chaîné par empreintes ; voir
docs/PRO.md. - Formation et conseil sur l'analyse de performance PNT quantique/classique.
Voilà le modèle open-core : le moteur est, et reste, sous licence ouverte ; l'activité qui le fait vivre repose sur l'expertise, l'assistance et les extensions propriétaires — pas sur des frais de licence. Contact : contact@ashforde.org · ashforde.org.
Recherche#
Les études fondées sur le moteur ouvert sont publiées sur arXiv. Chacune nomme la commande du moteur qui la sous-tend, de sorte que ses nombres peuvent être régénérés à partir d'un exemple de scénario ou d'étude versionné.
| Article | Ce qu'il montre | Commande du moteur |
|---|---|---|
| Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics arXiv:2606,22054 · doi:10.48550/arXiv.2606.22054 |
La baisse du score d'un détecteur d'interférence GNSS lorsque les conditions changent peut être prédite à partir des seules statistiques en distribution, sur un banc d'essai synthétique ouvert puis sur des enregistrements de terrain ouverts. | cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json |
| A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing arXiv:2606,24210 · doi:10.48550/arXiv.2606.24210 |
Un récepteur de synchronisation temporelle GNSS soumis à du leurrage n'a aucune borne inconditionnelle finie sur l'erreur de temps non détectée ; l'article en donne donc une borne conditionnelle, calibrée sur un leurrage enregistré par voie radio issu de la campagne publique JammerTest 2024. | cargo run --release --example tpl_jammertest |
| How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting arXiv:2607,05415 · doi:10.48550/arXiv.2607.05415 |
Un score de résilience composite unique n'est une base stable pour une décision que lorsqu'une conception domine ; lorsque des conceptions se disputent la première place, la seule repondération peut changer le gagnant. | cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json |
| Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination arXiv:2607,02566 · doi:10.48550/arXiv.2607.02566 |
La télémétrie à l'intérieur d'une constellation lunaire laisse non observable la position absolue d'une station de surface ; un délai d'interférométrie à très longue base (VLBI) depuis la Terre la rend observable lorsque la constellation est clairsemée, et l'affine lorsqu'elle est riche. | le type lunar-joint-od-clock : kshana example lunar-joint-od-clock > s.toml && kshana s.toml |
| The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis arXiv:2607,06212 · doi:10.48550/arXiv.2607.06212 |
Les constellations prévues de quatre à six satellites donnent une mauvaise géométrie au pôle Sud lunaire, et quelques balises de télémétrie en surface la corrigent bien plus économiquement que davantage de satellites. | le type lunar-beacon : kshana example lunar-beacon > s.toml && kshana s.toml |
| Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever arXiv:2610,23871 · doi:10.48550/arXiv.2610.23871 |
La dilution de précision n'est pas définie pour un suivi cislunaire par télémétrie seule, car la vitesse n'est pas observable à un instant donné ; l'article utilise donc le grammien d'observabilité sur quatre orbites rétrogrades distantes planes : la télémétrie seule est de rang 2 sur 4 à un instant donné et requiert un arc d'environ 2,09 h pour devenir entièrement observable, le conditionnement s'améliorant à mesure que l'arc s'allonge ; la vitesse de distance (Doppler) donne immédiatement le rang 4 ; et l'estimation conjointe d'une station avec les états et les horloges des satellites reste de rang déficient d'une unité, à moins qu'une observable interférométrique externe ne soit ajoutée. Les exigences relèvent de budgets de longueur d'arc, de conditionnement et de type de mesure, et non du DOP. | le type cislunar-observability : kshana scenarios/cislunar-observability.toml (son voisin cislunar-arc-recovery teste le seuil avec un estimateur indépendant par différences finies) |
Les trois exemples d'étude écrivent des artefacts déterministes à l'octet près (graines fixes) qui consignent la version du moteur, les graines et une empreinte de configuration. Les trois articles lunaires et cislunaires reposent sur la suite lunaire (le niveau de preuve de chaque élément figure dans la matrice de vérification) ; leurs affirmations de géométrie et de dilution de précision sont aussi recoupées avec des références indépendantes distinctes dans tests/validate_p*.rs. Plus de détails dans Artefacts d'étude reproductibles sous Référence.
Citer#
Si vous utilisez Kshana dans un travail universitaire ou technique, veuillez citer la version utilisée, avec le scénario et la graine. CITATION.cff contient les métadonnées lisibles par machine, et GitHub en tire un bouton « Cite this repository ». Chaque version est archivée sur Zenodo ; le DOI (Digital Object Identifier) de concept 10.5281/zenodo.20528627 renvoie toujours à la dernière version.
Baweja, C. (2026). Kshana — a PNT-resilience simulator with quantum-sensor performance models. Ashforde OÜ. https://doi.org/10.5281/zenodo.20528627
Les articles ci-dessus :
Baweja, C. (2026). Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics. arXiv:2606,22054. https://doi.org/10.48550/arXiv.2606.22054
Baweja, C. (2026). A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing. arXiv:2606,24210. https://doi.org/10.48550/arXiv.2606.24210
Baweja, C. (2026). How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting. arXiv:2607,05415. https://doi.org/10.48550/arXiv.2607.05415
Baweja, C. (2026). Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination. arXiv:2607,02566. https://doi.org/10.48550/arXiv.2607.02566
Baweja, C. (2026). The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis. arXiv:2607,06212. https://doi.org/10.48550/arXiv.2607.06212
Baweja, C. (2026). Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever. arXiv:2610,23871. https://doi.org/10.48550/arXiv.2610.23871
Licence#
Kshana est sous double licence : la AGPL-3.0-only de GNU (LICENSE), ou une licence commerciale d'Ashforde® OÜ pour une intégration fermée à laquelle l'AGPL ne convient pas. LICENSING.md explique laquelle s'applique. Les contributions sont placées sous licence entrante AGPL et accordent aussi à Ashforde® OÜ le droit de les inclure dans l'édition commerciale ; signez chaque commit avec git commit -s (voir CONTRIBUTING.md). « Kshana » et ses marques sont des marques d'Ashforde® OÜ : la licence couvre le code, pas le nom, veuillez donc renommer les forks.
Référence#
La documentation longue, repliée. Chaque document est listé dans Documentation.
Installer et compiler depuis les sources
Installer et compiler#
Nécessite une chaîne d'outils Rust (≥ 1,88, le champ rust-version de Cargo.toml ; développé avec la 1,93).
git clone https://github.com/ashfordeOU/kshana
cd kshana
cargo build --release
cargo test # all tests pass
Utilisation : la ligne de commande en détail
Usage#
Exécutez n'importe quel scénario ; la CLI s'aiguille sur le champ kind du scénario et écrit <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html et <scenario>.report.json à côté de lui — ainsi que <scenario>.table.csv pour les types qui publient un tableau. Le rapport (une page HyperText Markup Language (HTML) et un document JSON de même contenu) comporte un résumé exécutif, chaque entrée avec son unité, les résultats et les graphiques, les tableaux de balayage, de Monte-Carlo ou de chaîne d'une campagne, une chronologie des événements, l'étiquette VALIDATED / MODELLED / PARTNER et la source de chaque capacité utilisée par l'exécution, ce qui n'est pas modélisé, et un enregistrement de reproductibilité (version du moteur, condensats Secure Hash Algorithm 256-bit (SHA-256), graine, plateforme et commande exacte). Il s'imprime en un fichier PDF (Portable Document Format) propre depuis le navigateur sur papier A4 ou Letter ; le moteur n'écrit lui-même aucun PDF. Voir docs/REPORTS.md.
cargo run -- scenarios/clock-holdover.toml
cargo run -- scenarios/imu-deadreckoning.toml
cargo run -- scenarios/timetransfer.toml
cargo run -- scenarios/hybrid-pnt.toml
cargo run -- scenarios/orbit-gnss-challenged.toml
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- scenarios/orbit-rinex.toml
cargo run -- scenarios/integrity-raim.toml
# Export a propagated constellation to an SP3-c precise-ephemeris file:
cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3
# Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
# message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm
# Export the velocity-carrying state to a CCSDS OEM 2.0 ephemeris (GMAT/Orekit/STK):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-oem gps.oem
# Export the geometry for a globe, a map or a mission-analysis tool: CZML, KML,
# GeoJSON, STK .e, or SigMF for the spectrum kind (every format that applies):
cargo run -- scenarios/jamming-demo.toml --export all
--export <czml|kml|geojson|stk|sigmf|all|list> écrit à côté du scénario des fichiers CZML (le Cesium Language), KML (Keyhole Markup Language), GeoJSON (Request for Comments 7946), des éphémérides .e Ansys STK (Systems Tool Kit) et des enregistrements SigMF (Signal Metadata Format), et --import-route <route.geojson> injecte une ligne GeoJSON dans les types qui suivent une trajectoire. Chaque format est validé par rapport à sa spécification publiée, et un scénario auquel un format ne s'applique pas en explique la raison : voir docs/INTEROP.md.
Autres modes de la CLI — analyser un scénario, fournir des données réelles d'orientation de la Terre, ou exécuter une suite entière :
# Lint a scenario without running it (checks the kind + required fields):
cargo run -- --validate scenarios/integrity-raim.toml
# Feed a real IERS Earth-orientation file (finals2000A) for frame precision:
cargo run -- scenarios/orbit-sgp4-gps.toml --eop tests/fixtures/agency/eop/finals2000A_2022001.txt
# Run a SUITE of scenarios into one aggregated, stamped study artifact
# (writes <suite>.study.json + <suite>.study.html next to the manifest):
cargo run -- --study scenarios/quantum-pnt-demonstrator.suite.toml
# Animate a run's time series: an animated SVG, a self-contained HTML player, and a
# numbered SVG frame sequence with manifest.json (see docs/ANIMATION.md):
cargo run -- scenarios/campaign-jam-spoof-holdover-integrity.toml --animate all
Export d'animation. --animate svg|html|frames|all écrit <scenario>.animation.svg (images clés Cascading Style Sheets (CSS), sans script), <scenario>.animation.html (lecture, pause, défilement, vitesse et panneaux synchronisés, sans ressource externe) et <scenario>.frames/ (frame_0000.svg, … plus manifest.json avec le nombre d'images par seconde et la durée). Une campagne rejoue ses phases et ses alarmes, une exécution de spectre sa cascade ; le thème suit prefers-color-scheme et prefers-reduced-motion affiche l'image finale. Il restitue les propres échantillons de l'exécution, identiques à l'octet près lors d'une nouvelle exécution, et n'ajoute aucune preuve. Voir docs/ANIMATION.md.
Un manifeste de suite est un petit fichier TOML (Tom's Obvious, Minimal Language) — un title et un tableau scenarios = [ … ] de chemins de scénarios — que le moteur exécute à tour de rôle, en regroupant chaque résultat (avec ses étiquettes MODELLED / VALIDATED) dans un unique artefact d'étude autodescriptif. Voir scenarios/quantum-pnt-demonstrator.suite.toml.
Rôle d'interopérabilité. Kshana est la couche de simulation de performance qui se place à côté de la chaîne d'outils de post-traitement, et non un remplacement de celle-ci : fournissez sa sortie RINEX à RTKLIB ou gLAB pour une solution de position, et utilisez sa sortie SP3 comme produit d'orbite précise pour des outils comme Ginan — Kshana répond à la question quelle résilience une architecture PNT donnée procure avant que vous ayez de vrais signaux, dans des formats que ces outils savent déjà ingérer (--export-sp3, ou export_sp3 = true dans un scénario orbit, écrit <scenario>.sp3). La même orbite peut être publiée sous forme d'éléments moyens CCSDS OMM de la filière des normes (--export-omm, ou export_omm = true, écrit <scenario>.omm) — un message OMM 502,0 KVN (notation clé = valeur) par satellite défini par TLE, portant le vrai numéro de catalogue NORAD (North American Aerospace Defense Command), la désignation internationale COSPAR (Committee on Space Research) et l'époque de chaque objet, pour tout consommateur compatible OMM, au lieu d'un jeu d'éléments à deux lignes sur mesure.
Exemple de sortie (holdover d'horloge — remarquez comment les figures de mérite d'intégrité et de sécurité sont rapportées) :
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote scenarios/clock-holdover.result.json, scenarios/clock-holdover.chart.svg, scenarios/clock-holdover.report.html, and scenarios/clock-holdover.report.json
L'erreur de synchronisation temporelle au 95e centile (p95) de l'horloge optique est de 1.20e-4 ns : le résumé affiche les petites valeurs avec leurs chiffres significatifs plutôt que de les arrondir à 0.0. security indique n/a (no attack) parce que ce scénario ne configure aucune attaque, il n'y a donc rien à détecter. Le résultat JSON porte néanmoins la borne analytique de détectabilité du leurrage de chaque horloge dans fom.security (0,997 pour l'horloge optique, 0,000 pour l'horloge atomique à puce, dont le propre bruit sur la fenêtre de surveillance dépasse la spécification de 20 ns), et son bloc figure_tiers marque ce chiffre applicable: false. Le type de scénario spoof note la détection par rapport à une attaque injectée. figure_tiers attribue aussi à chaque chiffre rapporté son niveau de vérification — VALIDATED (vérifié par rapport à une référence indépendante) ou MODELLED — et la ligne de la matrice de vérification dont le niveau est tiré. Le scénario d'orbite rapporte en outre un bloc de géométrie — fraction d'échantillons avec une solution, meilleure et médiane dilution de précision de position (PDOP) et précision de position — à côté du résultat d'horloge.
Lisez attentivement ces deux nombres.
securityest une borne analytique de détectabilité du leurrage dérivée de la stabilité de chaque horloge — elle n'a de sens que face à un scénario de leurrage configuré et n'est pas un détecteur RAIM multisatellite.integritydésigne ici l'autocohérence du filtre (fraction des échantillons de la coupure situés dans sa propre borne en k sigma), et non un chiffre d'intégrité HPL/VPL aéronautique. Voirdocs/INTEGRITY.md.Pour une véritable intégrité autonome du récepteur, le type de scénario
integrity(scenarios/integrity-raim.toml) exécute un RAIM réel par instantané et par séparation de solutions (de style ARAIM) sur la géométrie de constellation propagée : il calcule les niveaux de protection (HPL/VPL) horizontaux et verticaux à chaque époque et rapporte la fraction d'époques qui respectent les limites d'alerte configurées, avec un diagramme d'intégrité de Stanford pour la classification erreur par rapport au PL (niveau de protection).
Artefacts d'étude reproductibles
Quatre études ouvertes régénèrent chacune un artefact déterministe à l'octet près (graine fixe) à partir d'une seule commande — les nombres derrière les études sur le croisement quantique contre classique, l'écart d'optimisme des perturbations RF, la notation de la résilience PNT et le niveau de protection de la synchronisation temporelle :
# Quantum-vs-classical resilience crossover map (writes paper/crossover/*.json):
cargo run --release --bin crossover_study -- paper/crossover
# RF-impairment optimism-gap study (13-detector panel, scaling laws, LOO predictor):
cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json
# Framework-aligned PNT-resilience scoring + decision-instability study:
cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json
# Conditional Timing Protection Level, calibrated on a real recorded spoof:
cargo run --release --example tpl_jammertest
Chaque artefact consigne la version du moteur, les graines et une empreinte de configuration, et porte une étiquette MODELLED/VALIDATED honnête. Les sondes sur données réelles (*_probe) exécutent le même pipeline sur des enregistrements que vous fournissez localement ; aucun jeu de données n'est livré dans le dépôt. L'étude de l'écart d'optimisme des perturbations RF est rédigée dans la prépublication arXiv:2606,22054, et le niveau de protection conditionnel de la synchronisation temporelle (tpl_jammertest ci-dessus) dans la prépublication arXiv:2606,24210 (voir Citer).
Les études publiées sur le PNT lunaire (arXiv:2607,06212 DOP des balises de surface, arXiv:2607,02566 observabilité par VLBI et arXiv:2610,23871 observabilité par longueur d'arc cislunaire) voient leurs affirmations de géométrie, de dilution de précision, de prédiction en temps réel du référentiel et des paramètres d'orientation de la Terre (EOP), d'orbites rétrogrades distantes et de télémétrie RF recoupées indépendamment dans tests/validate_p*.rs avec des références distinctes (scipy.special.j1, une résolution DOP NumPy indépendante par (HᵀH)⁻¹, une nouvelle analyse NumPy des mêmes lignes finals2000A de l'IERS, et la NASA/JPL Three-Body Periodic Orbit Database). Ce sont des vérifications de régression supplémentaires sur la suite lunaire modélisée ; elles ne changent pas le décompte de la matrice vérifié par machine.
Format de scénario
Format de scénario#
Les scénarios sont du TOML déclaratif. Un champ kind de premier niveau sélectionne le paquet — cinquante au total (clock est la valeur par défaut si le champ est omis) : inertial, timetransfer, hybrid, hybrid-ukf, fusion, gnss-ins, orbit, ephemeris, gnss-sim, integrity, lunar-integrity, lunar-time-offset, spoof, spoof-detect, jamming, sweep, sweep-nd, gravity-map, terrain-nav, terrain-slam, combined-altpnt, pvt, mars-pnt, impairment-eval (banc d'évaluation de la détection par apprentissage automatique des perturbations RF — corpus synthétique étiqueté + harnais ROC/AUC indépendant du détecteur + écart d'optimisme en distribution / hors distribution), quantum-trade (compromis PNT quantique contre classique avec ingestion d'ADEV mesurée + enveloppe de résilience hors GNSS ; MODELLED), space-weather (indices solaires/géomagnétiques + température exosphérique de Jacchia-71 + densité thermosphérique pilotée par l'activité sur l'atmosphère statique ; MODELLED), oem-interop (passerelle d'import/aller-retour CCSDS OEM pour les éphémérides GMAT/Orekit/STK ; MODELLED), le trio d'analyse de mission launch-window (azimut de lancement à deux corps / changement de plan / opportunités), reentry (corridor de rentrée balistique d'Allen-Eggers), eo-coverage (géométrie de fauchée / GSD / accès / revisite en observation de la Terre), space-packet (CCSDS 133,0 TM/TC — télémesure/télécommande — mise en trame Space Packet — structure exacte des bits, aller-retour vérifié), et attitude-budget (couple de gradient de gravité à 3 degrés de liberté + budget d'erreur de pointage en RSS), passes (prédiction des passages de lever/coucher en station sol — AOS/TCA/LOS, élévation maximale, accès), et link-budget (équation de liaison CCSDS/DSN à sens unique — FSPL / Eb·N₀ / marge / fermeture) ; telecom-timing (erreur de temps en holdover, MTIE et TDEV vérifiés par rapport aux gabarits ITU-T) ; spectrum (toute la bande L du GNSS comme une seule densité spectrale de puissance : une cascade fréquence-temps sous une chronologie scénarisée de brouilleur à onde continue, à bande étroite, à balayage ou à bruit adapté, le rapport brouilleur sur signal par bande et la densité de puissance porteuse sur bruit effective à partir du coefficient de séparation spectrale, et l'entrée et la sortie d'enregistrements Signal Metadata Format (SigMF) avec estimations spectrales de Welch ; les spectres des signaux VALIDATED par rapport aux valeurs des manuels, le scénario de brouilleur MODELLED ; voir docs/SPECTRUM.md ; le même type trace des panneaux des bandes UHF, S et C avec des signaux conçus pour l'orbite terrestre basse) ; leo-signal (conceptions de signaux de positionnement, navigation et synchronisation temporelle en orbite terrestre basse pour n'importe quel système : spectres à bande limitée, gigue de poursuite de code et précision de télémétrie, recherche d'acquisition et durée, séparation spectrale par rapport au GPS et à Galileo, tolérance au brouillage et compromis de l'UHF à la bande C, à partir de préréglages publics comme Xona Pulsar, Iridium, Starlink et CentiSpace ou de conceptions en ligne ; les formes closes et le Doppler LEO VALIDATED, les conceptions MODELLED ; voir docs/LEO-SIGNAL.md) ; solar-system (le Soleil, les planètes, Pluton, la Lune et sept grandes lunes à une même époque — positions, constantes, temps de lumière et trajectoires orbitales ; positions des planètes VALIDATED par rapport à JPL Horizons) et body-pnt (positionnement autour de n'importe lequel de ces corps avec une constellation de navigation locale et une liaison d'espace lointain depuis la Terre ; MODELLED) ; campaign (des types existants composés en une chronologie de mission enchaînée avec transmission de l'état entre les phases, un balayage de paramètres, un ensemble Monte-Carlo à graine, ou plusieurs scénarios sous une même condition partagée ; MODELLED, voir docs/CAMPAIGNS.md) ; constellation-design (motifs Walker delta et étoile, listes d'éléments et conceptions multicouches avec préréglages GPS, Galileo, BeiDou et GLONASS, et couverture et dilution de précision sur une grille de latitude/longitude ; le générateur et le DOP global GPS VALIDATED par rapport aux documents de service publiés, voir docs/CONSTELLATION-DESIGN.md) ; leo-pass (un passage de satellite de positionnement, navigation et synchronisation temporelle (PNT) en orbite terrestre basse (LEO) et son bilan de liaison bande par bande, à partir de n'importe quelle constellation et de n'importe quelle conception de signal : angles de visée, Doppler et taux de Doppler, affaiblissements ITU-R dus à la pluie, aux gaz, à la scintillation et à la pénétration des bâtiments, densité de puissance porteuse sur bruit par rapport aux satellites GNSS MEO en vue, ionosphère du premier ordre et combinaisons sans ionosphère, et un bilan de solution à faible énergie, sondage de l'ionosphère à partir de chaque paire de bandes, et moniteurs de leurrage par cohérence du Doppler et de la géométrie du passage et par cohérence entre bandes ; les termes ITU-R et l'enveloppe Doppler d'utilisateur statique VALIDATED, le passage MODELLED, voir docs/LEO-PASS.md) ; leo-navmsg (le message d'éphéméride et d'horloge diffusé d'un satellite PNT en orbite terrestre basse (LEO), pour n'importe quelle orbite et porteuse : un ajusteur d'une orbite de vérité intégrée vers le jeu képlérien de Galileo, ce jeu avec des polynômes de correction le long de la trace, transverses et radiaux, le modèle à 22 paramètres de Liu et al. 2025 ou le polynôme ECEF à horloge nulle ATOMIC ; erreur de distance dans le signal dans l'espace (SISRE) en fonction de l'intervalle d'ajustement et de la période de mise à jour, une vérification de continuité d'une mise à jour en cours de passage, la propre trame binaire documentée de Kshana avec un contrôle de redondance cyclique CRC-24Q et un budget de quantification, et un bloc de style RINEX-4 étiqueté extension de Kshana ; les poids SISRE, l'algorithme utilisateur de Galileo et le CRC-24Q VALIDATED, les ajustements MODELLED ; préréglages facultatifs pour Xona Pulsar, Iridium, Starlink, CentiSpace, un système représentatif en bande C, ATOMIC et Celeste IOD ; voir docs/LEO-NAVMSG.md) ; le trio PNT fusionné MEO + LEO leo-pvt (positionnement Doppler à partir de la vitesse de distance en orbite terrestre basse (LEO), solutions conjointes de pseudodistances GNSS + LEO avec biais inter-systèmes et DOP en fonction du nombre de satellites LEO, couverture polaire et arctique, et transfert de temps LEO vers l'UTC — sur n'importe quelle constellation, avec des préréglages facultatifs comme les signaux d'opportunité de Xona Pulsar, Iridium et Starlink ; l'enveloppe Doppler LEO VALIDATED par rapport aux chiffres publiés d'Iridium et de Xona), leo-ppp (convergence du positionnement ponctuel précis avec GNSS seul et avec augmentation LEO, comparée à Li et al. 2019) et ntn-positioning (positionnement par réseau non terrestre 5G à partir de la borne de Cramér-Rao de la largeur de bande du signal), MODELLED hormis cette enveloppe, voir docs/LEO-PNT-FUSION.md ; leo-pnt-chain (un système LEO-PNT de bout en bout : une conception leo-signal portée par une bande leo-pass, le C/N0 du passage et l'erreur de distance dans le signal dans l'espace du message de navigation transmis à une solution fusionnée leo-pvt et à une convergence leo-ppp, chaque transmission étant listée ; MODELLED, voir docs/LEO-PNT.md, qui est aussi la vue d'ensemble de chaque type et scénario LEO-PNT, y compris les campagnes de résilience, un scénario par domaine d'expérimentation et un par secteur d'utilisateur final) ; la suite PNT lunaire lunar-vlbi, lunar-joint-od-clock, lunar-frame-realisation, moonlight-service-volume, lunar-differential-pnt, lunar-interop-export ; le démonstrateur PNT quantique quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect ; et les types de recherche sur la sécurité des signaux, le cislunaire et la résilience en couches lunar-attack-surface, realtime-frame-eop, lunar-time-budget, hybrid-optical-rf, cislunar-observability, conflict-resilience — le trio d'analyse de mission et ces types plus récents étant tous MODELLED (chacun avec un noyau en forme close validé ; voir la matrice). Champs communs : seed, une grille [time], une chronologie de disponibilité [gnss] (le pilote de la coupure), et des blocs par capteur avec des chaînes provenance citant la source de chaque chiffre. Exemple (horloge) :
seed = 42
threshold_ns = 20.0
[time]
step_s = 10.0
duration_s = 7200.0
[gnss]
windows = [
{ t0 = 0.0, t1 = 600.0, state = "nominal" }, # 10 min GNSS sync
{ t0 = 600.0, t1 = 7200.0, state = "denied" }, # ~1.8 h outage
]
[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (arXiv:1503.08457)"
y0 = 5.0e-17
q_wf = 1.0e-30 # white FM: q_wf = sigma_y(1s)^2
q_rw = 0.0 # random-walk FM
drift = 0.0 # linear aging (per second)
[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10"
y0 = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
drift = 0.0
Champs facultatifs (désactivés en leur absence) : une horloge peut ajouter flicker_floor (plancher d'Allan du bruit de fréquence en 1/f — modulation de fréquence) ; un capteur inertiel peut ajouter gyro_bias et q_arw (biais du gyroscope et marche aléatoire angulaire), ainsi que bias_instability et q_aa (le plancher d'Allan d'instabilité de biais et la marche aléatoire d'accélération) — ensemble, un budget d'erreur d'accéléromètre à axe unique (1 degré de liberté) (VRW/ARW — marche aléatoire de vitesse/angulaire — et instabilité de biais). C'est le budget d'erreur qu'exécute le paquet de scénarios inertial livré. Par ailleurs, la bibliothèque comporte désormais un navigateur à composants liés à 3 axes vérifié (src/inertial/{attitude,mechanization,imu_errors}.rs) : attitude par quaternion avec compensation du coning/sculling, une mécanisation NED complète (termes de rotation de la Terre et de transport, gravité de Somigliana WGS-84), et un modèle déterministe d'erreurs de centrale inertielle dans lequel le facteur d'échelle, le désalignement, la sensibilité à g, la quantification et la rampe de vitesse sont modélisés (IEEE Std 952-1997, la norme IEEE de spécification et de procédure d'essai des gyroscopes, §A.2 ; Groves 2013 §4,3). Ce chemin à 3 axes est maintenant raccordé à un paquet GNSS/INS à couplage lâche exécutable (kind = "gnss-ins") : un EKF à 15 états d'erreur discipline la solution à composants liés par rapport à des solutions bruitées tant que le GNSS est disponible, puis poursuit en roue libre pendant la coupure, en rapportant l'erreur horizontale fusionnée par rapport à la dérive de l'INS seul en boucle ouverte. Une mise à jour pseudodistance à couplage serré est aussi disponible (elle forme l'innovation dans le domaine des distances, et continue donc de corriger avec moins de quatre satellites). Un scénario de holdover d'horloge peut ajouter runs (> 1) pour exécuter un ensemble Monte-Carlo — chaque figure de mérite est alors rapportée sous forme de moyenne avec une dispersion du 5e au 95e centile, et le graphique grise la bande de confiance de l'erreur (voir scenarios/clock-ensemble.toml).
Un scénario fusion (mêmes blocs que hybrid) exécute deux estimateurs de Kalman indépendants — un pour l'état de l'horloge, un pour l'état de position — disciplinés par le GNSS et assistés par un transfert de temps optique, et rapporte une figure de mérite combinée de holdover. Les deux blocs ne partagent aucune covariance croisée : c'est une paire empilée de budgets d'erreur, et non un véritable filtre conjoint couplé horloge + position (la covariance entre blocs est un élément de la feuille de route). Voir scenarios/fusion-pnt.toml.
Un scénario spoof injecte un leurrage temporel — l'un des quatre types [attack.shape] (linear_ramp, step_jump, meaconing, replay ; un simple rate_ns_per_s reste accepté comme rampe linéaire) — et exécute le détecteur de leurrage de chaque horloge. Le détecteur est un test d'énergie χ²₁ / de Neyman–Pearson bilatéral sur la statistique de surveillance assistée par l'horloge : le seuil est fixé à partir d'un budget cible de fausses alarmes target_pfa, et la probabilité de non-détection P_md est rapportée à la fois en forme close et par Monte-Carlo (mc_runs essais par hypothèse — les deux concordent à quelques ×1/√N près). La figure de mérite de sécurité est 1 − P_md à l'amplitude opérationnellement nuisible (spécification), de sorte qu'une horloge calme qui détecte un leurrage de la taille de la spécification obtient ≈ 1 et qu'une horloge bruitée qui le manque souvent obtient moins (voir scenarios/spoof-attack.toml, scenarios/spoof-meaconing.toml).
Un scénario gnss-sim est une simulation dans le domaine des mesures : pour chaque satellite visible, il synthétise la pseudodistance ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath et le Doppler L1, avec l'ionosphère monofréquence de Klobuchar ([iono], IS-GPS-200 §20.3.3.5.2.5) et la troposphère zénithale de Saastamoinen projetée par la fonction de projection de Niell (1996) ([tropo]). Les résidus alimentent le RAIM par instantané pour obtenir les HPL/VPL à chaque époque, et la pseudodistance, le Doppler, le C/N₀ et les corrections iono/tropo de chaque satellite sont émis dans le tableau JSON gnss_measurements. C'est un simulateur direct (il génère des mesures à partir d'une vérité connue), et non un récepteur/solveur — une exécution sans bruit reproduit la géométrie plus les corrections au niveau sous-millimétrique (voir scenarios/gnss-sim-raim.toml).
Un scénario jamming modélise l'interférence RF comme un bilan de liaison : un [jammer] (position ECEF, power_dbw d'émission, type) augmente le rapport brouilleur sur signal chez un [receiver] qui observe une [constellation] Walker. À partir de la géométrie (affaiblissement en espace libre et gain de l'antenne de réception selon la direction), il calcule le J/S de chaque satellite, le C/N₀ effectif par l'équation anti-brouillage standard (gain de traitement par désétalement × le facteur de séparation spectrale Q ; Kaplan & Hegarty §9,4), et signale la perte d'accrochage sous un seuil de poursuite configurable — en rapportant une figure de mérite availability_under_jamming. Un brouilleur à large bande de 10 W à 1 km neutralise entièrement le récepteur (J/S ≈ 72 dB) ; le même brouilleur à 100 km ne fait que dégrader les liaisons (voir scenarios/jamming-demo.toml).
Un scénario sweep réalise une étude de compromis : il fait varier un parameter (threshold_ns, duration_s, quantum_q_wf ou classical_q_wf) de start à stop sur steps points selon une scale lin ou log, enregistre une metric (par exemple holdover_s) pour les deux horloges, et trace les deux courbes. Le scénario de base se place sous [base] (voir scenarios/sweep-clock-stability.toml).
Un scénario sweep-nd généralise cela à n'importe quel paquet et à un nombre quelconque d'axes : il fait varier des clés TOML pointées d'un scénario [base] (de n'importe quel kind) sur le produit cartésien des [[axes]], réexécute chaque nœud de la grille, et enregistre des metrics données sous forme de chemins JSON pointés dans le résultat (par exemple classical.fom.holdover_s). Il fonctionne pour chaque paquet parce qu'il opère à la frontière TOML/résultat ; les exécutions natives évaluent la grille en parallèle (sans dépendance supplémentaire, wasm retombe sur le séquentiel) et la sortie est déterministe et ordonnée par lignes (voir scenarios/sweep-nd-inertial.toml).
Un scénario orbit dérive la chronologie [gnss] de la géométrie au lieu de la rédiger — donnez une orbite [user], une [constellation], un mask_deg d'élévation et les deux blocs d'horloge. Il rapporte aussi la précision de position à partir de la géométrie des satellites ; le paramètre facultatif sigma_uere_m (erreur de distance équivalente utilisateur à 1 sigma, 1 m par défaut) convertit la dilution de précision de position en un sigma de position. L'orbite de l'utilisateur peut être rendue excentrique avec eccentricity et argp_deg, et j2 = true ajoute la dérive séculaire due à l'aplatissement de la Terre (voir scenarios/orbit-molniya.toml). La constellation peut aussi être réelle : donnez à [constellation] un bloc tle d'ensembles d'éléments à deux lignes et les satellites en sont extraits (voir scenarios/orbit-real-tle.toml). Ajoutez un ou plusieurs blocs [[constellations]] pour du multi-GNSS (par exemple GPS + Galileo ; voir scenarios/orbit-multignss.toml) :
kind = "orbit"
seed = 7
threshold_ns = 5.0
mask_deg = 10.0
sigma_uere_m = 1.0 # optional; position sigma = position-DOP * this
[time]
step_s = 60.0
duration_s = 86400.0
[user] # spacecraft (altitude in km, angles in deg)
altitude_km = 8000.0
inclination_deg = 0.0
[constellation] # Walker-delta GNSS (GPS-like)
altitude_km = 20180.0
inclination_deg = 55.0
planes = 6
sats_per_plane = 4
phasing_f = 1.0
[clock_quantum] # ... as above
[clock_classical] # ... as above
Les types alt-PNT sans GPS naviguent sans aucun GNSS, en faisant correspondre une séquence de champ mesurée à une carte au moyen d'un filtre particulaire. Un scénario gravity-map fait voler une trace à travers un champ d'anomalie de gravité en harmoniques sphériques et la retrouve à partir de la lecture d'un gravimètre à atomes froids (scenarios/gps-denied-gravity-nav.toml) ; un scénario terrain-nav fait de même par rapport à un MNT d'élévation SRTM (TERCOM/SITAN, scenarios/terrain-nav.toml) ; et un scénario combined-altpnt fusionne gravité + magnétisme IGRF + terrain dans un seul filtre (scenarios/combined-altpnt.toml).
Un scénario lunar-integrity évalue le PNT cislunaire : il exécute une passe de niveau de protection ARAIM au pôle Sud lunaire par rapport à un ensemble de relais LunaNet/LNIS et rapporte honnêtement l'écart d'intégrité — un σ_URE lunaire d'environ 30 m fait monter le niveau de protection bien au-dessus d'une limite d'alerte de 50 m, de sorte que le service est indisponible selon des règles d'intégrité de type aéronautique (scenarios/lunanet-araim.toml).
Un scénario lunar-time-offset rapporte le taux d'horloge relativiste Terre–Lune — la base d'une échelle de Temps coordonné lunaire (LTC/TCL). Une identité post-newtonienne de premiers principes additionne la différence de potentiel propre (potentiel du géoïde L_G de l'IAU moins le potentiel propre de la surface de la Lune) et le terme cinétique de la Lune (Doppler du second ordre) pour obtenir un taux séculaire de ≈ 57 µs/jour, rapporté avec la plage publiée de 56–59 µs/jour ; il donne aussi le décalage LTC−TT accumulé sur un horizon et un ensemble à variance inverse (une horloge papier lunaire). MODELLED — le chiffre principal dépend de la référence (géoïde terrestre contre sélénoïde lunaire, fenêtre de moyennage), ce qui explique qu'une plage, et non un nombre unique certifié, soit rapportée (scenarios/lunar-time-offset.toml).
Voir scenarios/ pour au moins un exemple travaillé de chaque type (92 types, 193 fichiers de scénario .toml + 1 manifeste de suite — plusieurs types fournissent plus d'un exemple). Tous les types n'ont pas un fichier portant leur nom : lunar-integrity → scenarios/lunanet-araim.toml et gravity-map → scenarios/gps-denied-gravity-nav.toml en sont deux parmi plusieurs. Listez les types répartissables à tout moment avec les erreurs de cargo run -- --validate <file>, le list_kinds() de Python, ou l'outil MCP list_scenario_kinds.
Sortie
Sortie#
L'artefact de résultat est un JSON versionné et autodescriptif : séries temporelles par pas, figures de mérite notées, spécifications des modèles actifs (avec provenance), graine, une empreinte du scénario — de sorte que tout graphique peut être reproduit à partir du fichier — et, pour chaque horloge, une adev_curve ([{tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi}]) : la déviation d'Allan chevauchante sur des temps de moyennage espacés par octaves — la manière standard de lire la stabilité d'une horloge — désormais avec une bande de confiance à 95 % propre au type de bruit pour chaque point (le type en loi de puissance de l'enregistrement est identifié à partir de sa pente d'Allan modifiée, et l'intervalle du χ² utilise les degrés de liberté effectifs correspondants du NIST SP 1065). Le terrain de jeu du navigateur la restitue sous forme de graphique log-log « Clock stability (ADEV) ». (MDEV, TDEV et HDEV sont disponibles comme estimateurs de la bibliothèque ; la courbe du résultat exporté est l'ADEV chevauchante.) Chaque champ, avec ses unités et un renvoi à sa source, est documenté dans docs/SCHEMA.md.
Chaque graphique est autodescriptif. Le terrain de jeu du navigateur, l'export *.chart.svg de la CLI et la fiche de résultats HTML (HyperText Markup Language) apposent tous sur chaque image de graphique un pied de page qui indique Kshana v<version> · scenario <hash> · kshana.dev. Le scenario <hash> correspond aux 12 premiers caractères hexadécimaux de l'empreinte du scénario de l'exécution — un condensat SHA-256 (le Secure Hash Algorithm sur 256 bits) de la définition canonique du scénario (graine, seuils, paramètres des modèles, fenêtres GNSS, …) ; les rapports d'intégrité et lunaires, qui ne portent pas d'empreinte propre, se rabattent sur un SHA-256 de la source du scénario. C'est la même empreinte que celle affichée dans le résumé d'une ligne et dans le JSON du résultat, de sorte qu'un graphique enregistré ou collé porte toujours sa version, le scénario exact qui l'a produit (pour une reproduction bit à bit) et la source — modifiez une entrée quelconque et l'empreinte change.
Les figures de mérite suivent les figures de mérite PNT opérationnelles standard :
| Figure de mérite | Comment Kshana la calcule |
|---|---|
| Performance de synchronisation temporelle (paquets horloge/orbite) | erreur de phase d'horloge RMS + 95e centile sur la coupure, en nanosecondes (timing_rms_ns) — une métrique de synchronisation temporelle, pas de position |
| Performance de positionnement (paquets inertiel/hybride) | erreur de position à 1 degré de liberté RMS + 95e centile sur la coupure, en mètres (pos_rms_m) ; axe unique. Une exécution unique est marquée monte_carlo: false ; définissez runs = N pour un ensemble Monte-Carlo qui rapporte pour chaque métrique la moyenne, la dispersion et l'IC (intervalle de confiance) bootstrap à 95 %. Toujours pas un CEP/2DRMS 2D (erreur circulaire probable / deux fois la racine de la distance quadratique moyenne) ni une précision pondérée par le DOP (cela demande le modèle à 3 axes — feuille de route) |
| Autonomie | durée de holdover — temps dans la spécification après la perte du GNSS (quantifié sur la grille : une borne inférieure) |
| Résilience | pente de croissance de l'erreur pendant la coupure |
| Disponibilité | fraction de l'exécution avec une solution dans la spécification |
| Intégrité | autocohérence du filtre — fraction des échantillons de la coupure dont l'erreur reste dans la propre borne en k sigma du filtre de Kalman. Pas un chiffre d'intégrité aéronautique HPL/VPL/RAIM (voir docs/INTEGRITY.md) |
| Sécurité | borne analytique de détectabilité du leurrage dérivée de la stabilité de l'horloge — la petitesse et la lenteur d'un leurrage temporel qu'un moniteur de cohérence à horloge unique pourrait signaler. N'a de sens qu'avec une attaque configurée ; pas un détecteur RAIM multisatellite |
Ces termes sont nouveaux pour vous ? Chacun est défini en langage clair dans le glossaire.
Organisation du dépôt
Organisation du dépôt#
kshana/
├── src/ # the kshana core crate (library + CLI)
│ ├── api.rs · main.rs · lib.rs # typed dispatch (92 kinds) + CLI + crate root
│ ├── python.rs · wasm.rs # optional PyO3 / wasm-bindgen bindings
│ ├── types.rs · scenario.rs · allan.rs # shared core (time grid, GNSS timeline, Allan)
│ │
│ ├── models.rs · estimator.rs · kalman.rs # Pack 1 — clock holdover + integrity
│ ├── security.rs · detection.rs · spoof.rs · spoof_monitors.rs # spoof detection
│ ├── filter_health.rs · fom.rs · fom_label.rs · report.rs · chart.rs · run.rs # health · FoM scoring + labelling · output
│ ├── suite.rs · study.rs # scenario suites + aggregated multi-scenario study artifacts (`--study`)
│ ├── inertial/ # Pack 2 — strapdown INS (attitude · mechanization · imu_errors · quantum_imu)
│ ├── timetransfer.rs · timetransfer_adv.rs · timegeo.rs # Pack 3 — TWSTFT/CV/PPP/optical, Sagnac
│ ├── hybrid.rs · ensemble.rs · sweep.rs # Pack 4 — fused PNT, Monte-Carlo, trade sweeps
│ │
│ ├── timescales.rs · jd2.rs · ephem.rs # time systems, two-part JD, Sun/Moon ephemeris
│ ├── precession.rs · nutation.rs · cio.rs # IAU 2006/2000A precession-nutation + CIO GCRS↔ITRS
│ ├── frames.rs · *_data.rs # TEME↔ECEF + generated nutation/CIO/EGM2008/IGRF tables
│ │
│ ├── orbit.rs · sgp4.rs · tle.rs · walker.rs # geometry, SGP4/SDP4, TLE, Walker design
│ ├── propagator.rs · forces.rs · gravity_sh.rs · integrator.rs # Cowell + perturbations (EGM2008 d/o70, GR) + RK4/DOPRI
│ ├── maneuver.rs · batch_ls.rs · orbit_determination.rs # burns/Lambert/porkchop, Gauss-Newton, OD
│ ├── cr3bp.rs · lunar.rs · lunar_frame.rs · lunar_od.rs # Earth–Moon CR3BP + halo/NRHO STM corrector, cislunar/LunaNet ARAIM, MCI↔MCMF, lunar OD
│ ├── lunar_time.rs · lunar_vlbi.rs · lunar_combination.rs · lunar_frame_realise.rs · lunar_service.rs · lunar_dpnt.rs · lunar_interop.rs # tiers per piece in the matrix lunar PNT suite — LTC time · geodetic VLBI · joint OD+clock · frame realisation · Moonlight service-volume · differential PNT · LunaNet/IOAG interop export
│ ├── body.rs · mars_frame.rs · ephem_provider.rs · radiometric.rs · ccsds_tdm.rs # deep-space: multi-body · Mars frame · ephemeris seam · radiometric obs + CCSDS-TDM
│ ├── deepspace_od.rs · clock_state.rs · mars_atmos.rs · mars_pnt.rs · linkbudget.rs · gse_sim.rs # SRIF OD · onboard clock · Mars drag · relay-PNT · link budget · GSE sim
│ │
│ ├── fusion/ # GNSS/INS — EKF · UKF · tightly_coupled(17) · coupled · closed_loop
│ ├── raim.rs · sbas.rs # RAIM/ARAIM HPL/VPL, SBAS DO-229E PLs + L1/L5 iono-free
│ ├── gnss_sim.rs · ionex.rs · pvt.rs · jamming.rs # measurement domain · ionosphere maps · single-point positioning · jamming
│ ├── navsignal.rs # nav-signal PSD (BPSK-R/BOC) · spectral-separation → anti-jam Q · DLL code-tracking jitter · multipath envelope
│ ├── gravimeter.rs · igrf.rs · mapmatch.rs · particle_filter.rs · altpnt/ # gravity/magnetic/terrain alt-PNT
│ ├── rinex.rs · rinex_obs.rs · glonass.rs · sp3.rs · oem.rs · omm.rs · permalink.rs # interop formats
│ ├── launch.rs · reentry.rs · eo_payload.rs · attitude_budget.rs · passes.rs · space_packet.rs # mission-analysis budgets + CCSDS Space Packet
│ ├── space_weather.rs · holdover.rs · tpl.rs # space-weather environment · GNSS-denied clock-holdover calculator · conditional Timing Protection Level (under spoofing)
│ ├── resilience/ # framework-aligned PNT-resilience scoring + decision-instability study (RPCF · Dirichlet · Kendall-τ · diversity collapse · assurance report)
│ ├── impairment_eval.rs · impairment_study.rs · impairment_ml.rs · eval_stats.rs # Machine-learning RF-impairment eval testbed · optimism-gap study · LR/MLP detectors · bootstrap/DeLong/Spearman stats
│ ├── sdr.rs · realdata/ # software-defined-receiver front end (IQ/IF → E/P/L taps → SQM) + real-data ingest adapters (RINEX · UBX · GnssLogger · JammerTest · Yunnan · SatGrid)
│ ├── crossover.rs · quantum_trade.rs · frugal.rs · integrity_impact.rs # quantum-vs-classical crossover map · PNT trade · cost-per-coverage ROI · integrity impact
│ ├── quantum_devices.rs · quantum_faults.rs · quantum_nav_od.rs · qtrade.rs · timetransfer_chain.rs · representativeness.rs # Quantum-Enabled PNT demonstrator — device error models · fault catalogue · GNSS-free quantum OD · unified trade harness · quantum time-transfer chain · representativeness / gaps-to-flight ledger
│ ├── interchange.rs · verification.rs # KIF artifact envelope · machine-checked verification matrix
│ └── bin/crossover_study.rs · bin/validation_report.rs # crossover-study artifact generator · release validation-summary HTML
│
├── mcp/kshana-mcp/ # standalone, workspace-EXCLUDED crate — the MCP server (+ Dockerfile, server.json)
├── ide/jetbrains/ # standalone Kotlin/Gradle IntelliJ-Platform plugin
├── xval/ # standalone, workspace-EXCLUDED external cross-checks: anise-{frames,lunar-od,mars-od,service-geometry} (Rust ANISE/SPICE DE440) + orekit-passes (Java Orekit)
│
├── examples/ # reproducible study generators: tpl_jammertest · resilience_report · optimism_study + real-data probes (jammertest_probe · yunnan_probe · satgrid_probe · texbat_probe · ingest_realdata)
├── paper-artifacts/ # byte-deterministic study artifacts, regenerable from examples/ (optimism-study.json · resilience-study.json); raw datasets stay out
├── scenarios/ # one cited .toml per kind + geometry-driven + GPS-denied
├── scripts/ # reproducibility + repo-hygiene + SBOM guards
├── docs/ # CONCEPTS, ARCHITECTURE, CAPABILITY, VALIDATION, PROVENANCE, GLOSSARY, …
├── web/ # the WebAssembly playground + kshana.dev site
├── tools/ # table generators (EGM2008 · IGRF · nutation · CIO) + fetch_tles.sh
├── .github/workflows/ # ci · release · publish · wheels · pages · mcp-publish · jetbrains-plugin · frame-xval
├── pyproject.toml # Python packaging (maturin)
├── CHANGELOG.md # Keep a Changelog + SemVer
└── CITATION.cff · ROADMAP.md · CONTRIBUTING.md · SECURITY.md
FAQ (foire aux questions)
FAQ#
Dois-je comprendre la physique quantique pour l'utiliser ? Non. Si vous savez exécuter une ligne de commande, vous savez exécuter Kshana. Commencez par le guide en langage clair ; cherchez les termes dans le glossaire.
S'agit-il d'une conception de matériel quantique ou d'un logiciel de vol ? Non. C'est un simulateur de performance. La fidélité au matériel quantique provient de modèles d'erreur publiés, pas de cet outil. Voir Ce que c'est / n'est pas.
Les résultats quantiques sont-ils réalistes, ou du marketing ? Chaque paramètre est cité d'après une fiche technique ou un article, chaque modèle est validé par rapport à une relation de manuel, et la maturité est étiquetée honnêtement dans VALIDATION.md — y compris le fait qu'aucune horloge optique au strontium n'a volé. Le moteur est neutre : le quantique et le classique utilisent le même code avec des nombres publiés différents.
Puis-je compter sur l'accord de deux exécutions ? Oui — les exécutions sont déterministes : scenario + seed + engine version → bit-identical output, garanti par scripts/check-reproducible.sh.
Puis-je l'utiliser depuis Python ou dans un navigateur ? Oui — voir Installer : les exemples Python et WebAssembly s'y trouvent. Les deux appellent le même moteur.
Comment modéliser mon propre capteur ? Écrivez un scénario .toml avec les chiffres publiés de votre capteur dans les champs provenance. Voir Format de scénario et les exemples dans scenarios/.
Est-il gratuit pour un usage commercial ? Oui — sous l'AGPL-3.0, y compris dans un cadre commercial, tant que vous respectez le copyleft de l'AGPL (notamment : si vous modifiez Kshana et l'offrez via un réseau, vous devez offrir à ces utilisateurs votre source modifiée). Si cela ne vous convient pas — par exemple si vous devez intégrer Kshana dans un produit propriétaire ou exploiter un service réseau fermé — une licence commerciale est disponible auprès d'Ashforde® OÜ ; voir LICENSING.md et Assistance.
Dépannage
Dépannage#
cargo build échoue avec une ancienne chaîne d'outils. Kshana nécessite Rust ≥ 1,88. Mettez à jour avec rustup update.
La compilation de l'extension Python échoue à l'édition de liens sur macOS (Undefined symbols … _Py…). Une extension Python résout ses symboles au chargement. maturin définit automatiquement le bon indicateur de l'éditeur de liens — utilisez maturin develop --features python plutôt qu'un simple cargo build.
La compilation Python se plaint que l'interpréteur est plus récent que ce que PyO3 connaît. Définissez PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 (les wheels abi3 sont compatibles vers l'avant entre versions de CPython).
La compilation WebAssembly ne trouve pas la cible. Installez-la une fois avec rustup target add wasm32-unknown-unknown, puis wasm-pack build --target web -- --features wasm.
Où est passée ma sortie ? Chaque exécution écrit <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html et <scenario>.report.json à côté du fichier .toml d'entrée, et aussi <scenario>.table.csv pour les types qui publient un tableau. Tous sont ignorés par git par conception.
Gestion des versions et publications
Gestion des versions et publications#
Kshana suit le versionnage sémantique. Tant que la version est antérieure à 1.0, le schéma public des scénarios et des résultats peut encore changer ; les changements incompatibles sont signalés explicitement dans le CHANGELOG.md. Chaque résultat est reproductible à partir de scenario + seed + engine version.
Chaque étiquette vX.Y.Z publie automatiquement tous les canaux, dans un ordre unique — la suite de tests complète s'exécute d'abord sur le commit étiqueté, rien n'est publié tant qu'elle ne passe pas, et ensuite le pipeline vérifie que chaque registre sert bien la nouvelle version (docs/RELEASING.md). Les canaux :
| Canal | Installer / obtenir | Sommaire |
|---|---|---|
| crates.io | cargo install kshana · kshana = "0.35" |
Bibliothèque Rust + CLI |
| crates.io | cargo install kshana-mcp |
le serveur MCP |
| PyPI (Python Package Index) | pip install kshana |
wheels abi3 (Linux/macOS/Windows) + sdist (distribution des sources) |
| npm | npm install kshana |
module WebAssembly + enveloppe JS |
| ghcr.io | docker run -i ghcr.io/ashfordeou/kshana-mcp |
image OCI (Open Container Initiative) multi-architecture — aucune chaîne d'outils nécessaire |
| npm | npx -y kshana-mcp@0.40.0 |
lanceur : télécharge le binaire de la version, vérifie SHA256SUMS, l'exécute |
| PyPI | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
le même lanceur pour Python |
| Homebrew · Scoop · winget | brew install ashfordeOU/tap/kshana-mcp · scoop install kshana-mcp · winget install AshfordeOU.KshanaMcp |
le binaire kshana-mcp, généré à partir du SHA256SUMS de chaque version |
| registre MCP officiel | découvert automatiquement par les clients MCP | io.github.ashfordeOU/kshana-mcp (image OCI, paquets npm et PyPI) |
| JetBrains Marketplace | IDE → Plugins → rechercher « Kshana » | le plugin d'IDE Kshana — PNT simulator |
| Zenodo | DOI | une archive citable de chaque version |
| kshana.dev | ouvrir dans un navigateur | Kshana Studio, l'application WebAssembly dans le navigateur, reconstruite à partir de chaque étiquette de version (de sorte que la version affichée est la version exécutée) |
La version du crate / de l'image / du registre du serveur MCP suit celle du moteur (il embarque la bibliothèque) ; le plugin JetBrains a sa propre version (il appelle votre binaire kshana installé).
Feuille de route
Feuille de route#
Voir ROADMAP.md pour la feuille de route par phases, CHANGELOG.md pour l'historique des versions publiées, et docs/CAPABILITY.md pour la feuille de route par capacité. L'ordre de priorité est le suivant : d'abord les preuves de synchronisation temporelle et de holdover pour les infrastructures critiques (gabarits télécoms, holdover plus long avec vieillissement et bruit de scintillation, ingestion de données d'horloge mesurées) ; ensuite la méthode neutre de comparaison quantique contre classique (résultats étiquetés MODELLED jusqu'à ce que les données mesurées d'un partenaire les promeuvent) ; et navigation lunaire / cislunaire et en espace lointain maintenue, non étendue comme priorité. La réduction de référentiel précise ITRF est maintenant livrée — la chaîne complète GCRS↔ITRS IAU 2006/2000A fondée sur le CIO (mouvement du pôle + nutation sous la seconde d'arc), vérifiée bit à bit par rapport à SOFA/ERFA et recoupée indépendamment avec ANISE (SPICE en Rust pur) à ≤ 3,6 m sur l'orbite GNSS. Les éléments à court terme comprennent la fusion de phase de la porteuse à couplage serré et la mise à disposition du navigateur GNSS/INS à couplage lâche/serré dans davantage de paquets ; le moteur de navigation radiométrique en espace lointain / sur Mars est arrivé dans v0.17.0 (validé en simulation). La couche de physique quantique est un élément P2 : l'accéléromètre CAI est désormais simulé à partir des premiers principes (phase de Mach–Zehnder, bruit de projection, décroissance du contraste, couplage des vibrations), tandis que les capteurs d'horloge/de transfert de temps sont encore pilotés par des coefficients publiés d'Allan/de budget de bruit. Le TEME↔ECEF fondé sur le GMST, les systèmes de temps IERS à secondes intercalaires (UTC/TAI/TT/UT1), la propagation d'orbite SGP4/SDP4 (v0.7.0, validée par rapport aux vecteurs AIAA 2006-6753) et le paquet de fusion gnss-ins exécutable ont tous été livrés, et la vitesse inertielle est exposée en aval. Un détecteur stochastique actif de leurrage temporel (test d'énergie de Neyman–Pearson / χ²₁ avec P_fa/P_md Monte-Carlo et une figure de mérite de sécurité de 1−P_md), un modèle de brouillage par bilan de liaison (J/S → C/N₀ effectif → perte d'accrochage), la disponibilité multiconstellation, un budget d'erreur d'IMU à axe unique (1 degré de liberté), deux estimateurs de Kalman indépendants (horloge + position) rapportés comme une figure de mérite combinée, la géométrie réelle des constellations à partir des TLE, un rapport sous forme de fiche de résultats HTML, la disponibilité GNSS dérivée de la géométrie et la dilution de précision à partir d'orbites képlériennes avec excentricité et dérive J2, des bandes de confiance Monte-Carlo, des balayages de paramètres d'études de compromis, un terrain de jeu WebAssembly dans le navigateur, et des liaisons facultatives Python (PyO3) et WebAssembly (wasm-bindgen) ont été intégrés à main.
Contribuer
Contribuer#
Voir CONTRIBUTING.md. En bref : les tests passent (cargo test), les deux scripts de garde passent, Conventional Commits, et une entrée CHANGELOG.md [Unreleased] pour chaque changement visible par l'utilisateur. La participation est régie par notre code de conduite. Pour signaler un problème de sécurité, voir la politique de sécurité — merci de ne pas ouvrir de ticket public pour des vulnérabilités.
Documentation : chaque document, et à qui il s'adresse
Documentation#
| Document | Pour qui | Contenu |
|---|---|---|
| Introduction aux concepts | tout le monde, commencez ici | ce que Kshana fait et pourquoi, de zéro jusqu'à la physique |
| Kshana Studio | tout le monde | exécuter le moteur dans votre navigateur (WebAssembly) ; notes de compilation et de déploiement |
| Glossaire | tout le monde | définitions en langage clair de chaque terme |
| Types de scénario | tout le monde | chaque type que le moteur distribue : ce qu'il fait, ses champs, un exemple de commande, ses lignes de registre et le graphique que le moteur écrit pour lui |
| Données de partenaires | laboratoires et fabricants détenant des données mesurées | quelles lignes MODELLED un enregistrement d'horloge ou d'IMU mesuré pourrait promouvoir, les formats, comment une soumission est vérifiée (kshana partner check), notée et créditée |
| Architecture | développeurs / relecteurs | carte des modules, pipeline du moteur, distribution et diagrammes |
| État de la validation | relecteurs / auteurs de citations | ce qui est validated et ce qui est not modeled, avec les preuves |
| Matrice de vérification | relecteurs / auteurs de citations | le registre de preuves vérifié par machine — chaque ligne de capacité avec son statut, son module, son test et sa référence indépendante externe, généré à partir de src/verification.rs |
| Justification de la modélisation | relecteurs | pourquoi chaque ligne modélisée n'a pas de référence indépendante externe, énoncé ligne par ligne |
| Provenance | relecteurs / auteurs de citations | chaque paramètre de capteur, modèle et jeu de données rattaché à sa source publiée, dans un seul tableau citable |
| Reproductibilité et provenance | relecteurs / empaqueteurs | garanties de déterminisme, figeage des références, SBOM (nomenclature logicielle), provenance de la compilation |
| Étiquettes de plateforme des wheels | empaqueteurs | la matrice des wheels Python abi3 — quelle étiquette de plateforme pip install kshana résout |
| Positionnement | évaluateurs | où Kshana se situe par rapport à RTKLIB/gLAB (complémentaire), et le niveau sans installation dans le navigateur |
| Kshana Pro | évaluateurs / responsables de programme | ce que la surcouche propriétaire Pro ajoute au même moteur : optimiseur de conception, incertitude et sensibilité, dossier de mission, surveillance de campagne, coexistence spectrale, service de tâches sur site, traçabilité des exigences ; ce que chacun produit et ce qu'il ne fait pas |
| Rapport technique · Article JOSS | relecteurs / auteurs de citations / évaluateurs | l'article de recherche étendu complet — architecture, modèles par domaine, validation, études de cas et limites — plus la soumission JOSS (Journal of Open Source Software) concise |
| Validation de SGP4 | relecteurs / auteurs de citations | accord avec la référence AIAA 2006-6753 (666 états, ~4 mm) et comparaison directe avec le crate indépendant sgp4 (accord à moins du micron / 4,12 mm) |
| Validation du modèle de forces | relecteurs / auteurs de citations | le moteur à forces complètes (src/precise_od.rs) ajusté à des éphémérides d'agences — méthodologie et résidus validés |
| Guide des TLE réels | utilisateurs | piloter des scénarios à partir de vrais TLE de constellations Celestrak / Space-Track (par opposition à l'ensemble Walker synthétique fourni) |
| Figure de mérite d'intégrité | évaluateurs | ce que signifient les chiffres integrity / security — et ce qu'ils ne sont pas par rapport aux HPL/VPL aéronautiques |
| Référence ARAIM | relecteurs / intégrateurs | l'implémentation ouverte du niveau de protection ARAIM MHSS — la projection du biais nominal b_k, σ_URA contre σ_URE, et les probabilités a priori des modes de défaillance |
| Modèles quantiques · détails | relecteurs | la couche de physique de l'interféromètre à atomes froids, et les cas où les coefficients sont encore tirés de tables |
| Compliance | évaluateurs | Périmètre algorithmique de DO-229E / DO-316, et ce qui n'est pas une déclaration de respect de la norme |
| Confiance maritime | marins / intégrateurs | le score de confiance GNSS de 0 à 100 pour les NMEA d'un navire, ses moniteurs et ses limites (à titre consultatif, pas un équipement de navigation homologué) |
| Flux NMEA de formation | formateurs maritimes | NMEA de passerelle synthétiques avec brouillage et leurrage scénarisés et un journal d'instructeur ; texte seulement, jamais pour la navigation réelle |
| Carte des interférences | analystes / marins | où des aéronefs et des navires ont signalé des données de navigation dégradées, et dans quelle mesure un itinéraire est touché |
| Paquets de preuves | opérateurs / assureurs | dossiers techniques signés d'un événement de confiance et manière d'en vérifier un |
| Télémétrie de confiance | équipes d'exploitation / de sécurité | le flux de confiance sous forme de métriques Prometheus, d'événements SIEM et d'OpenTelemetry, avec un tableau de bord Grafana |
| Intégrations maritimes | propriétaires de bateaux / intégrateurs | le plugin Signal K, le mode passerelle d'OpenCPN et la version de référence |
| Test bench | fabricants de récepteurs | rejouer un scénario exporté dans un simulateur de laboratoire et évaluer le journal du récepteur |
| Correspondance de compliance | évaluateurs | cadres de résilience publics rapprochés des sorties de Kshana, avec sources et lacunes ; kshana compliance-report |
| Notebooks | utilisateurs | tutoriels exécutables avec leur texte rendu |
| Normes et interopérabilité | intégrateurs | les formats d'échange GNSS / dynamique de vol / agences que Kshana lit et écrit (RINEX, SP3, CCSDS OEM/OMM/TDM/Space-Packet, …) |
| Fusion PNT en orbite basse | utilisateurs / évaluateurs | positionnement, navigation et synchronisation temporelle fusionnés MEO + LEO : Doppler, pseudodistance conjointe, convergence PPP, 5G NTN, couverture polaire et transfert de temps LEO sur toute constellation ; les préréglages optionnels et leurs sources publiques |
| Campagnes | utilisateurs / évaluateurs | composer des scénarios : chronologies de mission enchaînées, balayages de paramètres, ensembles Monte Carlo et exécutions à conditions partagées, avec les identités de composition que les tests fixent |
| Catalogue des scénarios | utilisateurs / intégrateurs | chaque type de scénario pouvant être lancé, avec ses champs TOML obligatoires et facultatifs — généré à partir de api::list_scenario_kinds() |
| Schéma des résultats | intégrateurs | chaque champ du JSON de résultat, avec ses unités et un pointeur vers la source |
| API Python | utilisateurs de Python | la surface de liaison PyO3 — appeler le moteur, les types de scénario et de résultat, et des exemples |
| Affirmations et réalité | relecteurs | le registre de résolution des affirmations excessives + la garde de CI (tests/no_overclaims.rs) qui le maintient résolu |
| Feuille de route | tout le monde | la feuille de route par phases — ce qui a été livré et ce qui vient ensuite |
| Serveur MCP · Plugin JetBrains | agents / utilisateurs d'IDE | exécuter Kshana depuis un assistant d'IA ou un IDE JetBrains |
| Guide de l'agent · Surfaces | agents / intégrateurs | quel outil répond à quelle question, ce qu'il faut conserver avec chaque réponse ; où chaque capacité est accessible (CLI, Rust, Python, WASM, MCP, plugin, JetBrains, notebooks) et pourquoi une cellule est N/A |
| Journal des modifications | tout le monde | historique des versions publiées (Keep a Changelog + SemVer, gestion sémantique de version) |
| Contribuer | contributeurs | compilation, gardes, discipline de test et de citation, DCO (Developer Certificate of Origin) |
| Gouvernance | contributeurs / communauté | comment Kshana est gouverné — qui décide, comment, et la frontière entre ouvert et fermé |
| Code de conduite | communauté | conduite attendue (Contributor Covenant) |
| Politique de sécurité | auteurs de signalements | comment signaler une vulnérabilité ; note sur le double usage |
Références principales
Références principales#
Références indépendantes et normes de validation — les autorités externes auxquelles les vérifications de Kshana sont rattachées :
- Vallado, Crawford, Hujsak & Kelso — Revisiting Spacetrack Report #3 (AIAA 2006-6753 ; données de test) : le jeu de vérification SGP4/SDP4 auquel Kshana concorde à 4,12 mm, et les exemples de référentiels résolus par rapport auxquels la chaîne TEME→ITRF est vérifiée.
- IAU SOFA / ERFA — les routines de référence de temps et de référentiel par rapport auxquelles la nutation IAU 2000A et la réduction CIO GCRS↔ITRS sont validées bit à bit.
- Petit & Luzum (dir.) — IERS Conventions (2010), IERS TN (Technical Note) 36 (orientation de la Terre, mouvement du pôle et normes de référentiel).
- Riley — Handbook of Frequency Stability Analysis, NIST SP 1065 (relations de la déviation d'Allan et série de référence NBS14 ; NBS = l'ancien National Bureau of Standards des États-Unis).
- Pedregosa et al. — scikit-learn: Machine Learning in Python, JMLR 12 (2011) : les implémentations de référence de ROC/AUC, de matrice de confusion et de précision/rappel/F1 auxquelles la plateforme d'évaluation des perturbations RF est rapproché exactement (
tests/eval_metrics_reference.rs). - Virtanen et al. — SciPy 1,0, Nature Methods 17 (2020) :
optimize.nnls,stats.chi2etlinalg.expm— les routines de référence par rapport auxquelles l'ajustement NNLS de l'ADEV mesurée du compromis quantique, les bandes de cohérence du χ² et la covariance du bruit de processus d'horloge de van Loan sont validés (tests/scipy_reference.rs). - Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024) : utilisé à la fois comme antériorité ouverte (voir Comparaison et antériorité ouverte ci-dessous) et comme référence indépendante du DOP à laquelle le calcul de GDOP/PDOP/HDOP/VDOP/TDOP est rapproché à 1e-6 près (
tests/dop_reference.rs). - Montenbruck & Gill — Satellite Orbits: Models, Methods and Applications (Springer) : les modèles de forces à la base de l'ajustement du modèle de forces aux éphémérides précises des agences.
- Howell — Three-dimensional, periodic, halo orbits, Celestial Mechanics 32(1) (1984), doi:10.1007/BF01358403 ; Zimovan-Spreen, Howell & Davis — Near rectilinear halo orbits and nearby higher-period dynamical structures, Astrodynamics 6 (2022), doi:10.1007/s42064-021-0125-x (les familles halo/NRHO que le correcteur différentiel CR3BP reproduit).
Physique des dispositifs et des méthodes — les sources citées derrière les modèles de capteurs :
- Origlia, Schiller, Bongs et al. — arXiv:1503,08457 (horloge à réseau optique de strontium, objectif spatial).
- Oelker et al., Nature Photonics (2019) — doi:10.1038/s41566-019-0493-4 (horloge Sr de laboratoire, 4,8×10⁻¹⁷).
- Templier et al., Science Advances (2022) — arXiv:2209,13209 (triade d'accéléromètres quantiques hybrides).
- Groves, Principles of GNSS, Inertial, and Multisensor Integrated Navigation — tutoriel de l'IEEE AESS (Aerospace and Electronic Systems Society) (dépôt Discovery de l'University College London) (croissance de l'erreur d'estime).
- Giorgetta et al., Nature Photonics 7, 434 (2013) — arXiv:1211,4902 ; Deschênes et al., Phys. Rev. X 6, 021016 (2016) — APS (American Physical Society) (transfert optique bidirectionnel de temps et de fréquence ; la liaison optique inter-satellites modélise son budget de non-réciprocité d'après ces travaux).
- Betz — Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4) (2001), doi:10.1002/j.2161-4296.2001.tb00247.x (la modulation BOC et la théorie de séparation spectrale derrière
src/navsignal.rs). - Kaplan & Hegarty (dir.) — Understanding GPS/GNSS: Principles and Applications (3e éd., Artech House, 2017) : l'équation du C/N₀ effectif en anti-brouillage et la gigue de bruit thermique du suivi de code par DLL précoce–tardif que les modèles de signal de navigation et de brouillage utilisent.
Comparaison et antériorité ouverte — les outils et les études par rapport auxquels Kshana se situe :
- Humphreys et al. — TEXBAT (le Texas Spoofing Test Battery ; ION — Institute of Navigation — GNSS 2012) : les paramètres de la batterie de tests de leurrage par rapport auxquels le détecteur multicouche est caractérisé.
- González et al. — NaveGo (2017) : les profils d'erreur de navigation inertielle ouverts et validés utilisés comme référence de base classique.
- Iiyama, Casadesús Vila & Gao — LuPNT (ION GNSS+ 2023, Stanford NavLab) : simulateur PNT lunaire ouvert.
- Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024), doi:10.1016/j.softx.2024.101811 : analyse ouverte de données GNSS.
- Li, Zaminpardaz, Kealy & Greentree — Quantum sensors for enhanced positioning and navigation: a comprehensive review, GPS Solutions 30(1) :62 (2026), doi:10.1007/s10291-026-02030-y.
- Bertone et al. — Earth and Space Science 8(6) (2021), doi:10.1029/2020EA001454 : DO réduite-dynamique de GRAIL, le plancher d'accélération empirique que l'ajustement LRO reproduit.