Validation du modèle de forces par ajustement d'éphéméride — méthodologie et résidus validés
Le moteur à forces complètes de Kshana (src/precise_od.rs) ajusté à de vrais produits d'orbite précise d'agences, avec des résidus honnêtes, citables et estampillés du hachage de commit. C'est le dossier de validation du jalon P4 de la feuille de route (« Astrodynamique précise : gravité de haut degré, SRP (pression de radiation solaire), validation par rapport aux jeux de données d'agences »).
Ce que signifie ici un résidu validé#
Un résidu n'est rapporté que lorsque toutes les conditions suivantes sont réunies (conception docs/design/2026-06-09-precise-astrodynamics-design.md) :
- Le modèle de forces inclut chaque perturbation qui compte à la précision visée : géopotentiel de haut degré EGM2008 (Earth Gravitational Model 2008) (tronqué à un degré/ordre déclaré, d/o), marées solides + océaniques + atmosphériques (
src/tides.rs, IERS (International Earth Rotation and Reference Systems Service) Conventions 2010 chap. 6), troisième corps Soleil/Lune, SRP à boulet de canon avec ombre conique +C_Restimé, traînée (LEO (orbite terrestre basse) seulement), termes de relativité générale (GR) de Schwarzschild + Lense–Thirring (src/forces.rs). - L'estimateur est de vrais moindres carrés par lots de Gauss–Newton avec une matrice de transition d'état variationnelle (recoupée avec une différence finie sur l'arc entier à < 1e-6), une pondération des observations en
1/σ²et une édition des valeurs aberrantes à n sigma. - Les référentiels et le temps utilisent de vrais paramètres d'orientation de la Terre (EOP) IERS finals2000A (UT1 (Universal Time 1, temps de rotation de la Terre)−UTC (temps universel coordonné), mouvement du pôle ;
src/eop.rs) via la chaîne CIO (Celestial Intermediate Origin) IAU (Union astronomique internationale) 2006/2000A validée (src/cio.rs). Temps GPS (Global Positioning System) de SP3 (Standard Product 3, le format d'orbite précise) → TT (Temps terrestre) par le décalage fixe de 51,184 s (timescales::gps_to_tt). - Les résidus sont rapportés en RTN (radial/along/cross-track) et en 3D, avec et sans accélérations empiriques, à côté du recouvrement brut (sans ajustement).
- Chaque chiffre est reproductible (porte d'intégration continue (CI) sur données ouvertes) et citable (hachage de commit + référence du jeu de données + SHA-256 du jeu d'essai (SHA : Secure Hash Algorithm)).
Méthode, par jeu de données#
- Analyser l'orbite précise SP3 ; pour le satellite choisi, prendre chaque position ITRF (International Terrestrial Reference Frame).
- Convertir l'époque GPS de SP3 → TT ; résoudre
(UT1, xₚ, yₚ)à partir de finals2000A à cette époque. - Faire pivoter chaque position ITRF vers le GCRS (Geocentric Celestial Reference System) via la chaîne CIO avec ces EOP — ce sont les observations de position inertielle. La dynamique utilise les mêmes EOP pour la rotation terrestre fixe du géopotentiel, de sorte que les observations et les forces partagent un seul référentiel.
- Initialiser l'état à l'époque (position = première position ; vitesse = différence finie du 2e ordre) et ajuster par lots
[r, v, C_R](niveau 1), puis en plus les 9 accélérations empiriques RTN à cycle par révolution (CPR) (niveau 2, contraintes a priori). - Rapporter les RMS (root mean square) RTN et 3D après ajustement pour les deux niveaux et le recouvrement brut.
Résultats#
Galileo, orbite terrestre moyenne — GREEN (seuil < 5 m)#
- Jeu de données : orbite multi-GNSS (GNSS : système mondial de navigation par satellite) finale ESA/ESOC (ESA : Agence spatiale européenne ; ESOC : Centre européen d'opérations spatiales)
ESA0MGNFIN, ITRF, échantillonnage à 5 min, satellite E11 (GSAT0101, Galileo In-Orbit Validation (IOV), MEO (orbite terrestre moyenne) nominale), 2022-01-01. - Source ouverte (sans connexion) : miroir de l'ESA Navigation Office,
navigation-office.esa.int/products/gnss-products/2190/. EOP : IERSdatacenter.iers.org/data/9/finals2000A.all. - Commit de validation :
66da3ff(tests/agency_galileo.rs). - Jeux d'essai (SHA-256) : SP3
e7297f4c…d3a24a3; EOP6b781d36…cb2ed00f(tests/fixtures/agency/NOTICE.md).
| Exécuter | Arc | d/o | n_obs | RMS 3D | RTN (R, T, N) | C_R |
Notes |
|---|---|---|---|---|---|---|---|
Jeu d'essai CI, niveau 1 (forces + C_R) |
8 h | 12 | 97 | 0,133 m | 0,105, 0,067, 0,047 m | 1.174 | recouvrement brut 78,7 km |
| Jeu d'essai CI, niveau 2 (+ CPR empirique) | 8 h | 12 | 97 | 0,070 m | 0,048, 0,044, 0,027 m | — | divise le résidu par deux |
| Exécution déclenchée sur arc complet, niveau 1 (avant correctif†) | 24 h | 12 | 289 | 0,611 m | 0,276, 0,381, 0,390 m | 1.244 | workflow_dispatch |
Les chiffres du jeu d'essai CI ci-dessus ont été réenregistrés en 0,36 après le correctif S2 des marées atmosphériques (xval/s2-air-tide-fix/) : le niveau 1 de Galileo est passé de 0,132 → 0,133 m (C_R 1,1744 → 1,1743), les composantes N de Swarm-A de 1–2 mm ; les chiffres de l'exécution déclenchée sur arc complet n'ont pas été relancés. † Avant correctif : le chiffre de l'exécution déclenchée sur arc complet a été enregistré avant le correctif 0,36 S2 des marées atmosphériques et n'a pas été relancé sur le code corrigé (les produits de journée complète sont récupérés par le workflow déclenché, non disponibles dans la session qui a fait le correctif). Sur les jeux d'essai CI, le correctif a déplacé le RMS 3D de Galileo de moins de 1 mm et les composantes de Swarm-A de 1–2 mm ; une variation du même ordre est donc attendue, et la prochaine exécution de workflow_dispatch la réenregistrera.
Le champ MEO a convergé en gravité au degré 8 (le résultat de niveau 1 sur 8 h est identique au millimètre à d/o 8, 10 et 12), de sorte que la troncature d/o-12 du jeu d'essai CI est négligeable ; la tâche déclenchée exécute le d/o-70 complet. L'ajustement sur 8 h atteint 13 cm en force pure et 7 cm avec le niveau empirique ; l'arc complet de 24 h (davantage de contrainte SRP/éclipse, durée dynamique plus longue) est à 61 cm — très en deçà du seuil de 5 m.
Swarm-A LEO — GREEN (seuil < 5 m)#
- Jeu de données : orbite scientifique précise à dynamique réduite de niveau 2 d'ESA Swarm
SW_OPER_SP3ACOM_2_(RDOD_AR, dérivée du GPS, ITRF / IGb14, ~2 cm, traitement de l'Université de technologie de Delft), satellite Swarm-A (identifiant SP3L47, LEO à ~430 km), 2022-01-01. - Source ouverte (sans connexion) : serveur de diffusion ESA Swarm
https://swarm-diss.eo.esa.int/→Level2daily/Latest_baselines/POD/RD/Sat_A/(ouvert selon la politique de données de l'ESA). EOP : la même série IERSfinals2000A2022-001. - Commit de validation :
ceea70a(tests/agency_swarm.rs). - Jeu d'essai (SHA-256) : SP3
6cd84b78…acb733e(tests/fixtures/agency/NOTICE.md).
Un arc LEO ajoute la traînée atmosphérique au modèle de forces. Comme le modèle de densité est une exponentielle par morceaux statique, l'orbite est ajustée en deux niveaux : un niveau dynamique (estimer seulement l'état à l'époque ; C_R maintenu à 1, car en LEO la traînée domine et la SRP se sépare mal sur un arc court), et un niveau à dynamique réduite qui ajoute les accélérations empiriques à cycle par révolution portant la traînée non modélisée — l'orbite LEO utile en exploitation.
| Exécuter | Arc | d/o | n_obs | RMS 3D | RTN (R, T, N) | Notes |
|---|---|---|---|---|---|---|
Jeu d'essai CI, dynamique (C_R=1) |
3 h | 70 | 181 | 2,687 m | 0,925, 2,522, 0,045 m | résidu ≈ purement le long de la trace (traînée) |
| Jeu d'essai CI, dynamique réduite (+empirique) | 3 h | 70 | 181 | 0,098 m | 0,026, 0,092, 0,025 m | l'empirique absorbe la traînée |
L'ajustement dynamique passe sous le seuil de 5 m, le résidu étant presque entièrement le long de la trace — la signature classique de la traînée à ~430 km. Le niveau empirique absorbe cette erreur le long de la trace (2,52 → 0,09 m), donnant un ajustement à dynamique réduite de ~10 cm par rapport à l'orbite propre de l'ESA, à ~2 cm. L'exécution sur journée complète et à degré complet est le swarm_full_arc_dispatch ignoré (le serveur de diffusion sert le produit via sa session d'explorateur de fichiers, de sorte que le fondateur télécharge le SP3 du jour et y pointe KSHANA_SWARM_SP3). NRLMSISE-00 (NRLMSISE : modèle d'atmosphère étendu du Naval Research Laboratory avec spectromètre de masse et radar à diffusion incohérente) avec des facteurs météorologiques spatiaux est l'amélioration notée qui resserrerait encore le niveau dynamique.
LRO lunaire — validé, au-dessus du seuil de 5 m (honnêtement) (P4 W4b)#
- Jeu de données : la trajectoire reconstruite réelle du Lunar Reconnaissance Orbiter (LRO ; NAIF (Navigation and Ancillary Information Facility) −85) de la NASA/JPL (NASA : National Aeronautics and Space Administration ; JPL : Jet Propulsion Laboratory) issue de JPL Horizons, vecteurs d'état géométriques centrés sur la Lune dans l'ICRF (International Celestial Reference Frame), 2022-01-01, altitude d'environ 98 km, échantillonnage à 1 minute (241 époques, 4 h, ~2 révolutions). L'utilisation des vecteurs texte d'Horizons ne nécessite aucun lecteur SPK/SPICE (SPK : noyau d'éphéméride planétaire ; SPICE : Spacecraft, Planet, Instrument, C-matrix, Events).
- Gravité : le champ GRGM660PRIM de GRAIL (Gravity Recovery and Interior Laboratory) (NASA Goddard Space Flight Center, degré 660), tronqué à d/o 150 et ajusté à d/o 100, évalué dans le référentiel lunaire fixe aux axes principaux.
- Source ouverte (sans connexion) : API (interface de programmation d'application) Horizons
ssd.jpl.nasa.gov/api/horizons.api; gravité via ICGEM (International Centre for Global Earth Models)icgem.gfz-potsdam.de. - Commit de validation :
4fb82bb(tests/agency_lro.rs). - Jeux d'essai (SHA-256) : LRO
574e3518…d100f0; GRGM0ff04184…f029977ae(tests/fixtures/agency/NOTICE.md).
Il s'agit d'une dynamique centrée sur la Lune — un modèle de forces distinct (src/lunar_od.rs) : le champ GRGM dans le référentiel lunaire fixe (l'orientation terrestre moyenne src/lunar_frame.rs de l'IAU 2015 composée avec le décalage fixe DE421 (Development Ephemeris 421) Terre moyenne → axes principaux (ME→PA)), plus les troisièmes corps Terre (la perturbation dominante d'une orbite lunaire) et Soleil, ajustés par le même estimateur générique de Gauss–Newton précis que celui des jeux de données terrestres (le trait precise_od::ForceModel).
| Exécuter | Arc | d/o | n_obs | RMS 3D | RTN (R, T, N) | Notes |
|---|---|---|---|---|---|---|
| Jeu d'essai CI, dynamique (état seulement) | 4 h | 100 | 241 | 12,05 m | 2,91, 10,11, 5,88 m | recouvrement brut 39,9 m |
| Jeu d'essai CI, dynamique réduite (empirique 1+2/rév) | 4 h | 100 | 241 | 6,67 m | 3,41, 4,58, 3,44 m | l'empirique à 1 et 2 par révolution absorbe l'erreur le long de la trace |
Correction 0,36 : jusqu'en 0,36, le décalage ME→PA de DE421 était appliqué dans le mauvais sens (et avec le mauvais ordre d'Euler), ce qui plaçait le référentiel PA analytique à environ 208″ du PA au lieu de sur lui. Il est désormais transcrit tel que SPICE le définit (vérifié par rapport à pxform('MOON_ME','MOON_PA') à 2.6e-16 rad, tests/lunar_me_pa_offset_spice_oracle.rs ; docs/design/evidence/fut05b-me-pa-offset-sign/). Les chiffres ci-dessus sont ceux après le correctif ; avant lui, ils étaient de 53,8 m bruts, 12,6 m en dynamique (3,07, 10,19, 6,81 m) et 6,65 m en dynamique réduite (3,49, 4,56, 3,35 m).
Ces résidus sont au-dessus du seuil de 5 m que Galileo (0,13 m) et Swarm-A (0,10 m) franchissent, et sont rapportés honnêtement.
Ce qui fixe réellement le plancher — une validation croisée de niveau DE (et une correction)
Nous avions émis l'hypothèse que le facteur limitant était la fidélité de l'orientation et de l'éphéméride lunaires analytiques (la série de libration de l'IAU, précise à quelques dizaines de secondes d'arc, par rapport à MOON_PA de JPL DE (Development Ephemeris) intégré numériquement, et l'éphéméride Terre/Soleil de Montenbruck–Gill, à ~0,3° d'un noyau DE/SPICE). Pour tester cela directement, la crate de validation croisée xval/anise-lunar-od, exclue de l'espace de travail, remplace seulement ces deux entrées par des entrées de niveau DE — l'orientation lunaire aux axes principaux DE440 (Development Ephemeris 440) (moon_pa_de440_200625.bpc) et l'éphéméride DE440 (de440s.bsp), lues via ANISE (Attitude, Navigation, Instrument, Spacecraft, Ephemeris — un lecteur de noyaux SPICE en Rust pur) — et relance le même estimateur (commit ae96a29, SHA-256 des noyaux c1c7fee… / 60cd55a…) :
| Niveau | analytique | DE-grade |
|---|---|---|
| recouvrement brut | 53,8 m | 41,5 m |
| dynamique | 12,6 m | 12,0 m |
| dynamique réduite (1+2/rév) | 6,65 m | 6,67 m |
Note 0,36 : l'essentiel du gain du niveau dynamique ci-dessous venait de l'erreur de décalage, et non des entrées de niveau DE. Avec le décalage ME→PA corrigé, la pile analytique donne 39,9 m bruts, 12,05 m en dynamique et 6,67 m en dynamique réduite, contre 41,5, 12,0 et 6,67 m pour le niveau DE : les ajustements analytique et de niveau DE concordent désormais à chaque niveau. La lecture 0,30 du tableau ci-dessous en découle, conservée telle qu'elle a été écrite.
L'hypothèse n'est qu'à moitié juste, et l'affirmation principale devait être corrigée. L'orientation et l'éphéméride de niveau DE améliorent bien le recouvrement brut (53,8 → 41,5 m) et l'ajustement dynamique (12,6 → 12,0 m) — l'erreur d'orientation/d'éphéméride analytique est donc réelle et limite bien ces niveaux. Mais elles laissent le résidu à dynamique réduite essentiellement inchangé (6,65 → 6,67 m) : le niveau empirique à 1+2 par révolution absorbait déjà l'erreur d'orientation/d'éphéméride, de sorte que le plancher opérationnel de ~6,6 m est fixé par autre chose — un résidu que la base à cycle par révolution ne peut absorber et que les référentiels de niveau DE n'éliminent pas. L'explication la plus cohérente est une dynamique non gravitationnelle de LRO non modélisée (réémission thermique, dégazage) sur l'arc court de 4 h ; le degré du champ est exclu (identique à d/o 100 et 150) et la tolérance de l'intégrateur est exclue (identique à atol 1e-6 contre 1e-9). Le corollaire constructif : la pile lunaire analytique légère et sans noyau de Kshana atteint déjà la fidélité de niveau DE pour l'orbite lunaire à dynamique réduite (opérationnelle) — le défaut à coefficients purs n'y laisse rien sur la table. Franchir 5 m exigerait de modéliser les forces non gravitationnelles de LRO (un modèle boîte-ailes/thermique propre au vaisseau et un ajustement plus long sur plusieurs arcs), et non de meilleurs référentiels.
Contrat d'honnêteté#
- Le seuil « vert » de < 5 m est atteint pour Galileo MEO (0,13 m en dynamique) et Swarm-A LEO (2,69 m en dynamique / 0,10 m en dynamique réduite). LRO lunaire est publié tel quel à 12,05 m en dynamique / 6,67 m en dynamique réduite (empirique à 1+2 par révolution) — au-dessus du seuil (0,36, après le correctif du décalage ME→PA ; 12,6 / 6,65 m avant lui). Une validation croisée de niveau DE (ci-dessus) a testé et corrigé l'affirmation sur le facteur limitant : le plancher à dynamique réduite n'est pas l'orientation/éphéméride analytique (les noyaux DE440 le laissent inchangé à 6,67 m), de sorte qu'il ne se referme pas par de meilleurs référentiels mais par la modélisation de la dynamique non gravitationnelle de LRO — la voie honnête et mise à jour vers le niveau du mètre.
- Pour la LEO, les niveaux dynamique (état seulement, densité statique) et à dynamique réduite (avec accélérations empiriques) sont toujours rapportés séparément, afin que le lecteur voie ce qu'absorbent les termes empiriques ; le niveau à dynamique réduite est l'orbite opérationnelle. La même séparation vaut pour les niveaux MEO empirique/force pure.
- Chaque résidu porte ci-dessus son hachage de commit, sa référence de jeu de données et la somme de contrôle de son jeu d'essai.
- Jeux de données validés par rapport à une vérité réelle d'agence : 3 sur 3 (Galileo MEO, Swarm-A LEO, LRO lunaire). Respectant le seuil de < 5 m : 2 sur 3 (Galileo ✓, Swarm-A ✓ ; LRO à 6,67 m, honnêtement au-dessus).