Normes et interopérabilité
Kshana parle les formats d'échange standard des communautés du GNSS (système mondial de navigation par satellite), de la dynamique du vol et de la synchronisation temporelle, afin de pouvoir cohabiter avec RTKLIB (une bibliothèque libre de positionnement cinématique en temps réel), gLAB, Ginan, GMAT (General Mission Analysis Tool), Orekit et les outils des centres d'analyse de l'IGS (International GNSS Service), plutôt que de rester sur une île privée. Cette page associe les formats d'échange que le moteur lit ou émet au module qui implémente chacun d'eux et à la spécification faisant autorité.
Elle se limite aux formats — des choses qui ont un sens de lecture ou d'écriture. Les normes de signal et d'algorithme que le moteur implémente plutôt qu'il ne les lit (IS-GPS-200 (IS : Interface Specification ; GPS : Global Positioning System), IEEE (Institute of Electrical and Electronics Engineers) 1139, RTCA (anciennement Radio Technical Commission for Aeronautics) DO-229E, IGRF-14 (IGRF : International Geomagnetic Reference Field), la référence ARAIM (surveillance autonome avancée de l'intégrité par le récepteur) WG-C (WG : groupe de travail), CCSDS (Consultative Committee for Space Data Systems) 401/DSN (DSN : Deep Space Network)) sont étayées ligne par ligne dans VERIFICATION-MATRIX.md.
Formats que parle le moteur#
| Norme | Sens | Module | Spécification / autorité | Notes |
|---|---|---|---|---|
| CCSDS OEM (Orbit Ephemeris Message) | lecture et écriture | src/oem.rs |
CCSDS 502.0-B Orbit Data Messages, forme KVN (notation clé-valeur) | Éphéméride tabulée de vecteurs d'état ingérée par GMAT, Orekit, STK (Systems Tool Kit). parse_oem la relit ; validé en retrouvant l'exemple textuel de la figure G-11 du Blue Book CCSDS 502.0-B-3 (tests/ccsds_reference.rs). Le bloc de covariance position/vitesse 6×6 facultatif (COVARIANCE_START … COVARIANCE_STOP, la sérialisation KVN du triangle inférieur à 21 éléments avec un COV_REF_FRAME facultatif) est à la fois écrit (covariance_block_kvn) et lu (parse_covariance_block), symétrique en aller-retour (tests src/oem.rs). |
| CCSDS OMM (Orbit Mean-Elements Message) | écriture | src/omm.rs |
CCSDS 502.0-B-2, forme KVN | Publication de la voie de normalisation pour les éléments moyens SGP4/TLE (SGP4 : Simplified General Perturbations 4 ; TLE : jeu d'éléments à deux lignes) (moyen mouvement, e, i, Ω, ω, M, BSTAR (le terme de traînée du propagateur d'orbite)). Accessible en CLI (CLI : interface en ligne de commande) sur un scénario orbit via --export-omm <out.omm> ou export_omm = true (un OMM par satellite défini par TLE, avec son véritable identifiant NORAD (North American Aerospace Defense Command), son désignateur COSPAR (Committee on Space Research) et son époque ; tests/sp3_export_roundtrip.rs). La forme XML (Extensible Markup Language) et un lecteur sont des suites à venir. |
| CCSDS TDM (Tracking Data Message) | lecture et écriture | src/ccsds_tdm.rs |
CCSDS 503.0-B Tracking Data Message, forme KVN | Enregistrements de suivi en distance / Doppler / angle qu'une passe DSN/ESTRACK (ESTRACK : réseau européen de suivi spatial) livre à un système de DO (détermination d'orbite). Validé en retrouvant l'exemple textuel de la figure E-9 du Blue Book CCSDS 503.0-B-2 (tests/ccsds_reference.rs). |
| CCSDS Space Packet (133,0) | lecture et écriture | src/space_packet.rs |
CCSDS 133.0-B-2 Space Packet Protocol | Le cadrage d'en-tête primaire de 6 octets TM/TC (TM : télémesure ; TC : télécommande) qu'échangent les systèmes au sol. L'encodeur reproduit les vecteurs de test au niveau de l'octet publiés par la bibliothèque indépendante spacepackets-py (tests src/space_packet.rs). |
| SP3-c (SP3 : Standard Product 3, le format d'orbite précise) / SP3-d (éphéméride précise) | lecture et écriture | src/sp3.rs |
IGS Standard Product 3 (c/d) | Série temporelle de position dans le repère terrestre (ECEF) + temps d'horloge. Validée en aller-retour à moins de 0,5 m sur un instantané réel de gps-ops (tests/sp3_export_roundtrip.rs). |
| RINEX (Receiver Independent Exchange Format) 3 (navigation diffusée) | lecture | src/rinex.rs |
RINEX 3.x NAV (IS-GPS-200, ICD (document de contrôle d'interface) Galileo, ICD BeiDou, ICD GLONASS (système russe de navigation par satellite)) | Ingestion NAV multi-GNSS (GPS LNAV (message de navigation historique), Galileo F/NAV, QZSS (système japonais Quasi-Zenith Satellite System), BeiDou MEO/IGSO (MEO : orbite terrestre moyenne ; IGSO : orbite géosynchrone inclinée), vecteur d'état GLONASS) ; utilisable comme source Propagator de premier rang. |
| TLE / 3LE (éléments à deux / trois lignes) | lecture | src/tle.rs |
NORAD / Celestrak, AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 | Propagé par le noyau SGP4/SDP4 validé (SDP4 : Simplified Deep-space Perturbations 4) (4,12 mm par rapport aux 666 vecteurs officiels de l'AIAA). |
| RINEX 3.0x (observation) | lecture | src/rinex_obs.rs |
RINEX 3.0x OBS (4,00 censé être analysé, jamais éprouvé sur un fichier 4,00) | L'autre moitié de RINEX : les enregistrements de code / porteuse / Doppler / SNR (SNR : rapport signal sur bruit) propres au récepteur (parse_obs). C'est l'entrée que consomme le solveur de positionnement ponctuel pvt, avec le fichier de navigation diffusée (tests/pvt_abmf.rs, vraie station IGS ABMF). |
| IONEX (IONosphere map EXchange format ; cartes de TEC (contenu électronique total) globales) | lecture | src/ionex.rs |
IONEX 1.x (produit ionosphérique de l'IGS) | parse_ionex lit les grilles globales de contenu électronique total de l'IGS — l'alternative mesurée à la correction de Klobuchar diffusée — avec interpolation spatiale et temporelle bilinéaire et fonction d'obliquité pour le retard oblique. |
IERS (International Earth Rotation and Reference Systems Service) finals2000A / Bulletin B (orientation de la Terre) |
lecture | src/eop.rs, src/frame_eop.rs |
Conventions de l'IERS ; IERS EOP (paramètres d'orientation de la Terre) 14 C04 / finals2000A.all |
UT1 (Universal Time 1, temps de rotation de la Terre)−UTC (temps universel coordonné) et mouvement du pôle issus du produit officiel, y compris les lignes prédites, de sorte que la réduction de référentiel peut être exécutée en temps réel et la croissance de son erreur de prédiction budgétée (tests/operational_eop_predictor_reference.rs). |
| KIF (Kshana Interchange Format) | lecture et écriture | src/interchange.rs |
ce dépôt — voir SCHEMA.md |
L'enveloppe neutre et versionnée dans laquelle tout artefact peut être encapsulé : format / schema_version / kind / engine_version / payload, avec un verdict explicite de compatibilité majeure-mineure pour un consommateur. Ce n'est pas une norme externe ; elle est documentée ici parce qu'un outil étranger doit pouvoir la reconnaître. |
| Échange lunaire LunaNet / IOAG (Interagency Operations Advisory Group) | écriture (métadonnées de temps aussi lues) | src/lunar_interop.rs |
Spécification d'interopérabilité LunaNet / architecture de communications lunaires de l'IOAG, au-dessus de CCSDS 502,0 | Le référentiel lunaire, l'échelle de temps lunaire et l'éphéméride lunaire émis sous des formes CCSDS alignées sur LunaNet/IOAG (export_lunar_oem, export_kif_lunar, export_lunar_time_metadata), avec un contrôle de champs sur l'OEM émis (tests/lunar_interoperability_export_reference.rs). |
| CZML (Cesium Language) | écriture | src/interop/czml.rs |
Format de paquets CZML de CesiumJS | Un flux JSON (JavaScript Object Notation) de paquets horodatés pour le globe CesiumJS ; les objets mobiles sont écrits en GCRS (INERTIAL). --export czml sur tout type de scénario qui place des objets sur la Terre. |
| KML (Keyhole Markup Language) | écriture | src/interop/kml.rs |
OGC (Open Geospatial Consortium) KML 2,2 | Longitude, latitude et hauteur dans le repère terrestre pour Google Earth et les outils SIG (système d'information géographique). --export kml. |
| GeoJSON | écriture et lecture (itinéraire) | src/interop/geojson.rs |
IETF (Internet Engineering Task Force) RFC 7946 | Géométrie dans le repère terrestre pour les cartes web et les outils SIG (--export geojson) ; un LineString est relu comme entrée de trajectoire rectiligne des types de scénario qui en font voler une (--import-route <route.geojson>). |
Éphéméride STK (.e, EphemerisTimePosVel) |
écriture | src/interop/stk.rs |
Format de fichier d'éphéméride Ansys STK | Position et vitesse inertielles (ICRF) pour STK et les outils qui lisent son format d'éphéméride. --export stk. |
| SigMF (Signal Metadata Format) | lecture et écriture | src/sigmf.rs |
Spécification SigMF | Enregistrements complexes en bande de base plus métadonnées JSON : le type de scénario spectrum écrit ses échantillons en phase/quadrature (IQ) synthétisés (--export sigmf) et lit un enregistrement par son bloc [recording]. |
| Texte de message de navigation LEO (de style RINEX-4 et CSV (valeurs séparées par des virgules)) | lecture et écriture | src/leo_navmsg/text.rs |
Disposition de navigation RINEX 4, adaptée | L'éphéméride diffusée et l'horloge du type de scénario leo-navmsg pour un satellite en orbite terrestre basse (LEO), exportées et réimportées ; une adaptation documentée, et non un type de message RINEX enregistré (MODELLED dans la matrice de vérification). |
Référentiels et temps#
Le référentiel que le moteur émet est explicite, et non implicite. La réduction IAU (International Astronomical Union) 2006/2000A fondée sur le CIO (CIO : Celestial Intermediate Origin) (src/cio.rs) et la réduction TEME (équateur vrai, équinoxe moyen) par équinoxe/GMST (GMST : temps sidéral moyen de Greenwich) (src/frames.rs, src/nutation.rs) sont validées bit à bit par rapport aux vecteurs de référence SOFA/ERFA (SOFA : Standards of Fundamental Astronomy ; ERFA : Essential Routines for Fundamental Astronomy) (voir VALIDATION.md).
| Trame | Réalisation | Notes |
|---|---|---|
| TEME | natif de SGP4 | Équateur vrai, équinoxe moyen — le référentiel de sortie de SGP4/SDP4. |
| GCRS (Geocentric Celestial Reference System) / J2000 | Précession IAU 2006 + nutation IAU 2000A/2000B | teme_to_gcrs (chaîne par équinoxe). |
| CIRS (Celestial Intermediate Reference System) | IAU 2006/2000A CIO (X, Y, s) | gcrs_to_cirs_matrix (eraC2ixys). |
| ITRS (International Terrestrial Reference System) / ECEF | ERA (angle de rotation de la Terre) + mouvement du pôle de l'IERS (CIO) ou GMST + mouvement du pôle (équinoxe) | gcrs_to_itrs_matrix (CIO, eraC2tcio) / teme_to_itrf (équinoxe). |
| Géodésique WGS-84 (WGS : World Geodetic System) | exact + inverse itératif | ecef_to_geodetic / geodetic_to_ecef. |
| Échelle de temps | Utilisation |
|---|---|
| TT (Terrestrial Time) | Évaluation des arguments de précession/nutation/CIO (jd_tt). |
| UT1 | Angle de rotation de la Terre / GMST (jd_ut1). |
| JD en deux parties (jour julien) | src/jd2.rs Jd2 pour une résolution d'époque inférieure à la µs. |
Correspondance champ de sortie → norme (CCSDS 502,0)#
Ce que les deux écrivains de messages d'orbite placent dans chaque champ CCSDS ODM (Orbit Data Messages, 502,0), lu à partir d'une exécution de scenarios/orbit-sgp4-gps.toml avec --export-oem et --export-omm :
| Sortie de Kshana | Champ CCSDS ODM | Valeur / unité |
|---|---|---|
| Métadonnées de segment OEM | CENTER_NAME / REF_FRAME / TIME_SYSTEM |
EARTH / TEME / GPS — le référentiel dans lequel les propagateurs intègrent et l'échelle de temps de la grille d'époques, sans changement d'étiquette |
| Époque d'état OEM | première colonne de chaque ligne de données | temps calendaire ISO-8601 (ISO : Organisation internationale de normalisation), échelle de temps GPS |
| Position et vitesse OEM | colonnes de données X Y Z X_DOT Y_DOT Z_DOT |
km, km/s |
| Métadonnées OMM | REF_FRAME / TIME_SYSTEM / MEAN_ELEMENT_THEORY |
TEME / UTC / SGP4 |
| Époque OMM | EPOCH |
forme ISO-8601 en jour de l'année (l'époque du TLE) |
| Éléments moyens OMM | MEAN_MOTION / ECCENTRICITY / INCLINATION / RA_OF_ASC_NODE / ARG_OF_PERICENTER / MEAN_ANOMALY / BSTAR |
tr/jour, –, deg, 1/rayons terrestres |
Le JSON (JavaScript Object Notation) de résultats du type de scénario ephemeris porte le même état en unités SI (Système international d'unités) pour chaque échantillon : jd_utc, teme_r_m / teme_v_m_s, gcrs_r_m / gcrs_v_m_s, ecef_r_m (m, m/s), plus lat_deg, lon_deg, alt_km.
Portée réelle#
- OEM, TDM, Space Packet, KIF, SigMF et le texte de message de navigation LEO se lisent et s'écrivent ; OMM, CZML, KML et l'éphéméride STK sont des écrivains (un lecteur OMM et la sérialisation XML sont des suites à venir) ; GeoJSON est écrit et relu comme itinéraire ; RINEX NAV, RINEX OBS, IONEX, les produits EOP de l'IERS et TLE sont des lecteurs ; l'export lunaire LunaNet/IOAG est un écrivain dont les métadonnées de temps font l'aller-retour.
INTEROP.mdindique quel export s'applique à chaque scénario fourni. - La correspondance de champs CCSDS/IGS ci-dessus est de la documentation, et non l'affirmation qu'une norme quelconque est satisfaite ; l'évaluation formelle par rapport à ces normes (et l'enregistrement dans le catalogue ouvert ESSR (European Space Software Repository) de l'ESA (Agence spatiale européenne) / de la NASA (National Aeronautics and Space Administration)) est suivie séparément et est en attente de relecture.
- Le recoupement numérique indépendant SPICE/ANISE (SPICE : Spacecraft, Planet, Instrument, C-matrix, Events ; ANISE : Attitude, Navigation, Instrument, Spacecraft, Ephemeris — une boîte à outils de géométrie planétaire en Rust pur) de la réduction de référentiel est fourni dans la crate autonome
xval/anise-frames/, exclue de l'espace de travail :gcrs_to_itrs_matrixpar rapport à la rotation GCRF (Geocentric Celestial Reference Frame) → ITRF93 (International Terrestrial Reference Frame 1993) d'ANISE, sur huit époques 2020–2023, concorde à ≤ 0,86 m au sol et à ≤ 3,6 m à l'orbite GNSS (voirVALIDATION.md). Il a besoin de noyaux SPICE ; ce n'est donc pas une barrière par défaut de l'intégration continue (CI).