Validation de SGP4/SDP4 par rapport à la référence de la communauté
Le propagateur d'orbite de Kshana est validé par rapport à la référence canonique de la communauté pour SGP4/SDP4 (SGP4 : Simplified General Perturbations 4 ; SDP4 : Simplified Deep-space Perturbations 4) : les vecteurs de vérification publiés avec Vallado et al., « Revisiting Spacetrack Report #3 » (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribués sous la forme de SGP4-VER.TLE (les TLE (jeux d'éléments à deux lignes) de test) et de tcppver.out (l'état TEME (vrai équateur, équinoxe moyen) attendu à chaque instant). C'est la même référence que celle par rapport à laquelle les implémentations publiques en C++/Python/MATLAB se valident ; l'accord obtenu ici est donc un accord avec la norme de fait.
Résultat#
| Grandeur | Valeur |
|---|---|
| États de référence comparés | 666 (toutes les lignes de tcppver.out, figées dans le test) |
| Pire erreur de position | 4,12 mm (4.120e-6 km, satellite 23333 ; < 2e-5 km de tolérance) |
| Pire erreur de vitesse | 1.85e-9 km/s (satellite 23333 ; < 1e-6 km/s de tolérance) |
| Cas couverts | SGP4 pour orbite proche de la Terre, SDP4 pour l'espace lointain (lunisolaire + résonance 12 h/24 h) et les cas délibérés de codes d'erreur |
Les cas d'espace lointain et de résonance comptent particulièrement pour ce projet : les satellites GNSS (système mondial de navigation par satellite) se trouvent sur des orbites d'environ 12 h qui sont en espace lointain et en résonance, ce qu'un modèle à deux corps + J2 séculaire ne peut pas reproduire — SGP4/SDP4 le peut.
Méthode#
- L'implémentation (
src/sgp4.rs) est un portage en Rust, sans dépendance, de l'algorithme de Vallado, qui est dans le domaine public ; la gestion des époques se fait en jours depuis 1950, le modeimproved(et nonafspc) est utilisé, et les constantes gravitationnelles WGS-72 (WGS : World Geodetic System) sont appliquées comme le précise la référence. - Le test (
tests/sgp4_verification.rs) analyse les fixturesSGP4-VER.TLEettcppver.outembarquées (tests/fixtures/sgp4/), propage chaque satellite de test à chaque instant de référence, et vérifie que la position et la vitesse TEME concordent dans les tolérances ci-dessus. Le nombre de lignes comparées est figé à exactement 666 afin qu'une régression d'une fixture ou du comportement d'omission ne puisse pas réduire discrètement la couverture.
Le reproduire#
cargo test --test sgp4_verification -- --nocapture
Le test affiche le nombre de lignes comparées ainsi que les pires erreurs de position et de vitesse. Les fixtures sont versionnées dans le dépôt : la vérification est donc entièrement hors ligne et déterministe.
Recoupement indépendant avec la crate sgp4#
La concordance avec la référence publiée prouve l'exactitude par rapport à une table. Pour la prouver aussi par rapport à une implémentation indépendante, tests/sgp4_crate_comparison.rs exécute une bibliothèque SGP4 en Rust indépendante et largement utilisée, la crate sgp4 (neuromorphicsystems/sgp4, version 2,4), sur les mêmes 666 vecteurs de l'AIAA, et compare les deux bases de code face à face. Les deux sont pilotées avec le modèle de gravité WGS72 (World Geodetic System 1972) dans lequel les vecteurs sont définis (le from_elements par défaut de la crate utilise WGS84 (World Geodetic System 1984), qui diffère de la référence WGS72 d'environ un km — un choix de modélisation, signalé en toute honnêteté, et non une erreur).
| Régime | kshana ↔ référence | crate ↔ référence | kshana ↔ crate |
|---|---|---|---|
| proche de la Terre (LEO/MEO (LEO : orbite terrestre basse ; MEO : orbite terrestre moyenne)) | 7.3e-9 km | 7.3e-9 km | 4.4e-10 km |
| espace lointain (non résonant) | 4.1e-6 km | 2.1e-7 km | 4.1e-6 km |
| résonance d'espace lointain (½ jour) | 8.1e-9 km | 7.7e-9 km | 2.2e-9 km |
| résonance d'espace lointain (1 jour) | 8.2e-9 km | 7.8e-9 km | 2.2e-9 km |
Deux implémentations indépendantes concordent à mieux que le micron pour les orbites proches de la Terre et résonantes, et à 4,12 mm au pire sur tous les régimes — ce sont les mêmes 4,12 mm qui constituent l'écart propre de Kshana par rapport à la référence ; autrement dit, le désaccord est ce seul cas d'espace lointain, la crate se situant entre Kshana et la table. La table complète (avec le nombre de lignes par régime et les quatre cas pathologiques que la crate rejette à la construction) est versionnée dans tests/fixtures/sgp4_comparison.md et régénérée via KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.
Statut de la « publication » de ce résultat#
La validation croisée elle-même est terminée et se trouve dans l'arborescence. Soumettre le résultat à des lieux externes (un catalogue communautaire, une courte note, une notice archivée avec DOI (DOI : identifiant d'objet numérique)) est une action de mainteneur suivie séparément dans la feuille de route ; ce document est le compte rendu, dans le dépôt, vers lequel ces soumissions renverraient.