Système solaire et positionnement autour d'autres corps
Deux types de scénario fonctionnent au-delà du système Terre-Lune :
solar-systemrend compte de chaque corps du catalogue à une époque donnée : position et vitesse, constantes physiques, temps de lumière et distance depuis un corps observateur, et une trace d'orbite.body-pntplace un utilisateur de navigation (un orbiteur ou un atterrisseur en surface) autour de n'importe quel corps du catalogue autre que le Soleil et la Terre, avec une constellation de navigation locale et une mesure de distance en espace lointain facultative depuis la Terre.
Le type constellation-design utilise le même catalogue pour construire des constellations autour de n'importe lequel de ces corps (CONSTELLATION-DESIGN.md).
Code : src/body.rs (le catalogue et ses constantes), src/ephem.rs (les éphémérides analytiques), src/ephem_provider.rs (AnalyticSolarSystem, le fournisseur que lisent les deux types), src/solar_system.rs et src/body_pnt.rs (les types) et src/radiometric.rs (temps de lumière, distance aller-retour et retard de Shapiro). Tests : tests/solar_system_horizons_reference.rs et les tests unitaires de chaque module.
Le catalogue#
Dix-huit corps : le Soleil, les huit planètes, Pluton, la Lune, Phobos, Déimos, les quatre lunes galiléennes (Io, Europe, Ganymède, Callisto) et Titan. Les noms sont reconnus sans tenir compte de la casse. Pour chacun, src/body.rs porte le paramètre gravitationnel GM, les rayons moyens équatorial et volumétrique, le deuxième harmonique zonal J2 et son rayon de référence lorsqu'il est publié, ainsi que le modèle de pôle et de méridien origine de l'Union astronomique internationale (UAI) (période de rotation sidérale, négative pour un corps à rotation rétrograde). Chaque valeur cite sa source dans le code.
D'où viennent les positions#
| Corps | Modèle | Étiquette |
|---|---|---|
| De Mercure à Saturne et la Terre, d'après le tableau 1 (1800 apr. J.-C. à 2050 apr. J.-C.) | éléments képlériens du Jet Propulsion Laboratory (JPL) de Standish et Williams, https://ssd.jpl.nasa.gov/planets/approx_pos.html | VALIDATED |
| Les huit planètes d'après les tableaux 2a/2b (3000 av. J.-C. à 3000 apr. J.-C.) | les éléments sur longue période de la même page | VALIDATED |
| Uranus et Neptune d'après le tableau 1 | comme ci-dessus | MODELLED |
| Pluton | la ligne du tableau 1 de 1992 (1800 apr. J.-C. à 2050 apr. J.-C. seulement ; la page actuelle l'a supprimée et n'indique aucune erreur) | MODELLED |
| La Lune | la série lunaire de Montenbruck et Gill, avec séparation du barycentre Terre-Lune | MODELLED |
| Phobos, Déimos, les lunes galiléennes, Titan | éléments moyens du JPL avec le modèle de rotation de l'UAI | MODELLED |
table = "auto" (la valeur par défaut) prend le tableau 1 entre 1800 apr. J.-C. et 2050 apr. J.-C. et les tableaux 2a/2b en dehors ; table1 et table2 en imposent un. Pluton hors de son tableau est une erreur, non une extrapolation. L'époque est une date et heure ISO 8601 en temps universel coordonné (UTC), converties par le temps terrestre (TT) avec les secondes intercalaires en temps dynamique barycentrique (TDB), ou une date julienne TDB donnée directement avec epoch_jd_tdb.
La référence indépendante est JPL Horizons (https://ssd.jpl.nasa.gov/horizons/, éphéméride de développement DE441), avec les vecteurs interrogés versionnés sous tests/fixtures/solar_system/. Une ligne de planète est VALIDATED lorsqu'elle reste à moins de deux fois l'erreur nominale propre à la page de Standish. Mesuré par cargo test --test solar_system_horizons_reference -- --nocapture :
- Tableau 1, de Mercure à Saturne et barycentre Terre-Lune, 12 époques de 1800 à 2049 : au pire 1,87 fois l'erreur nominale (distance de Saturne).
- Tableaux 2a/2b, les huit planètes, 15 époques d'environ 1000 av. J.-C. à 2500 apr. J.-C. : au pire 1,71 fois (distance de Mars).
- Uranus et Neptune d'après le tableau 1 dépassent les valeurs de la page face à DE441 : 2,04 et 5,16 fois l'erreur nominale de longitude. Ils sont épinglés sous six fois et restent MODELLED.
- Pluton : à moins de 39,2 secondes d'arc en longitude et 1.14e9 m en distance.
- Lunes, pire angle vu depuis la planète de 2000 à 2040 : Phobos 5,65 deg, Déimos 0,38, Io 0,40, Europe 1,63, Ganymède 0,22, Callisto 0,27, Titan 3,31. La Lune géocentrique : 0,046 deg.
- Vitesses des planètes : pire erreur relative de 3.72e-3 de la vitesse (MODELLED).
La Lune et les sept lunes sont mesurées avec des seuils épinglés, mais il n'existe aucune borne publiée par rapport à laquelle les valider ; elles sont donc MODELLED.
Les éphémérides analytiques n'ont besoin d'aucun fichier de noyau. Un noyau d'éphéméride de développement du JPL (positions de qualité DE) n'est lu que par les crates de validation croisée distincts sous xval/, par le même trait EphemerisProvider ; le crate principal n'en dépend pas.
solar-system#
kind = "solar-system"
epoch = "2030-01-01T00:00:00"
bodies = ["Earth", "Moon", "Mars", "Jupiter", "Europa"]
observer = "Mars"
[[links]]
from = "Europa"
to = "Earth"
Solar system at 2030-01-01T00:00:00 (JD 2462502.50080 TDB), 5 bodies, observer Mars
Standish Table 1 (1800 AD to 2050 AD)
Earth 0.9833 au lon 100.18 deg light time 1038.1 s [VALIDATED]
Moon 0.9815 au lon 100.28 deg light time 1037.8 s [MODELLED]
Mars 1.3814 au lon 337.83 deg observer [VALIDATED]
Jupiter 5.4235 au lon 222.19 deg light time 3068.4 s [VALIDATED]
Europa 5.4194 au lon 222.17 deg light time 3066.6 s [MODELLED]
link Europa -> Earth: one-way 2993.281 s, two-way 5986.612 s, Shapiro 33.7 us, Sun 50.0 deg
Entrées : epoch (par défaut 2026-01-01T00:00:00) ou epoch_jd_tdb ; bodies (par défaut les dix-huit) ; observer (par défaut la Terre) ; track_points par orbite (8 à 2000, par défaut 120) ; table ; et un nombre quelconque de [[links]], chacun reçu à l'époque.
Pour chaque corps, le résultat donne sa classe et son parent, l'identifiant de la NASA Navigation and Ancillary Information Facility (NAIF), la position et la vitesse héliocentriques dans le référentiel céleste international (ICRF, équatorial J2000) en mètres et mètres par seconde, la longitude, la latitude et la distance écliptiques, la position relative à son parent, la période orbitale, les constantes ci-dessus, le pôle et le méridien origine à l'époque, l'erreur nominale de Standish lorsqu'elle existe, son étiquette et sa chaîne de méthode, et une trace d'orbite sur une révolution (héliocentrique pour une planète, centrée sur le parent pour une lune ; un seul point pour le Soleil). La liaison depuis l'observateur, et chaque liaison supplémentaire, donne :
- le temps de lumière newtonien aller simple, résolu par le solveur radiométrique de temps de lumière à point fixe avec l'émetteur à sa position retardée, et la distance aller simple correspondante ;
- le temps de lumière et la distance aller-retour ;
- le retard de Shapiro du Soleil, indiqué séparément et non ajouté ;
- l'angle de séparation du Soleil.
Le temps de lumière est VALIDATED par rapport au temps de lumière aller simple que rapporte Horizons : Mars et Jupiter vers le centre de la Terre à quatre époques de 2000 à 2040, pire erreur 0,070 s pour Mars face à un seuil de 0,207 s et 1,31 s pour Jupiter face à 4,04 s. Le seuil vaut deux fois la somme des erreurs de distance de Standish de la cible et du barycentre Terre-Lune, divisée par la vitesse de la lumière : le temps de lumière ne peut pas être meilleur que les positions. C'est le temps de lumière géométrique newtonien, non une observable relativiste ou corrigée du plasma.
Le fichier scenarios/solar-system-tour.toml fourni rend compte des dix-huit corps à 2026-09-28T00:00:00 avec des traces de 180 points, et ajoute les liaisons Mars-Jupiter (aller simple 2193,539 s), Saturne-Terre (4212,176 s) et Europe-Jupiter (2,218 s).
body-pnt#
Un utilisateur navigue autour d'un corps choisi par son nom (tout corps du catalogue sauf le Soleil et la Terre, que le type refuse) avec deux sortes de mesures :
- des pseudo-distances aller simple issues d'une constellation de navigation Walker delta autour du corps (
planesparsats_per_plane, phasage inter-plansphasing_f), parcourue en orbites à deux corps avec la dérive séculaire due auJ2propre au corps ; l'horloge de l'utilisateur est inconnue, ces lignes portent donc une colonne de biais d'horloge ; - facultativement une distance aller-retour depuis le centre de la Terre (
[earth_link]), qui n'a pas besoin d'horloge utilisateur et est rapportée comme une distance aller simple avec son propre bruit. La direction et la distance de la Terre proviennent de l'éphéméride analytique à chaque époque.
Une ligne de visée est bloquée lorsqu'elle passe à l'intérieur du rayon moyen du corps (le test de corde du type mars-pnt), et un utilisateur en surface a aussi besoin du masque d'élévation. À chaque époque, l'exécution forme la dilution de précision géométrique et de position (GDOP, PDOP) de la constellation seule, l'incertitude formelle de position à un sigma avec et sans la ligne de la Terre, et un point de calage par moindres carrés de Gauss-Newton avec graine de chaque façon, de sorte que le rapport montre ce qu'ajoute la liaison en espace lointain.
| Table | Champ | Valeur par défaut |
|---|---|---|
| niveau supérieur | body |
Mars |
epoch / epoch_jd_tdb |
2027-02-19T00:00:00, une opposition de Mars | |
duration_s, step_s |
86 400 s, 600 s | |
seed |
1 | |
table |
auto |
|
[user] |
kind |
orbiter (ou surface) |
orbiteur : altitude_km, inclination_deg, raan_deg, u0_deg, eccentricity |
400 km, 75 deg, 0, 0, 0 | |
surface : lat_deg, lon_deg, height_m |
0, 0, 0 | |
[constellation] |
planes, sats_per_plane, phasing_f |
3, 4, 1 |
altitude_km |
trois rayons moyens | |
inclination_deg |
60 deg | |
sigma_range_m |
1 m | |
mask_deg (utilisateur en surface) |
10 deg | |
[earth_link] |
enabled, sigma_range_m |
vrai, 1 m |
raan_deg est l'ascension droite du nœud ascendant dans le référentiel équatorial du corps et u0_deg l'argument de latitude à l'époque.
Les deux scénarios fournis, tels qu'ils s'exécutent avec kshana 0,36 (mathématiques portables, identiques sur toutes les plateformes) :
scenarios/mars-orbit-pnt.toml |
scenarios/europa-surface-pnt.toml |
|
|---|---|---|
| Utilisateur | orbiteur, 300 km, 93 deg | surface, 20 deg N, 60 deg E |
| Relais | 12 à 10 000 km, 60 deg | 12 à 4500 km, 55 deg, masque de 10 deg |
| Durée | un sol, 296 époques | 306 822 s, 171 époques |
| Temps de lumière vers la Terre, aller simple / aller-retour | 338,3 s / 676,6 s | 2182,9 s / 4365,8 s |
| Terre en vue | 0,811 des époques | 0.439 |
| Disponibilité, relais seuls / avec la distance de la Terre | 1.000 / 1.000 | 0.480 / 0.713 |
| PDOP médian | 1.375 | 5.360 |
| Erreur RMS du point de calage, relais seuls / avec la distance de la Terre | 1,883 m / 1,629 m | 112,742 m / 86,499 m |
| Sigma formel médian, relais seuls / avec la distance de la Terre | 1,375 m / 1,304 m | 5,360 m / 4,239 m |
(RMS : racine de la moyenne des carrés.) Une époque d'Europe (t = 16 200 s) se trouve à la limite de disponibilité, où le dernier bit d'un rayon calculé décide si son point de calage avec la distance de la Terre est obtenu. Avant 0,36, c'était la bibliothèque mathématique de l'hôte qui en décidait, de sorte que le même scénario affichait 0,719 et 86,147 m sous Linux x86-64 et 0,725 et 85,800 m sous macOS arm64 pour les deux valeurs « avec la distance de la Terre ». Depuis 0,36, chaque fonction transcendante est calculée par la bibliothèque mathématique portable, l'époque se résout d'une seule façon sur toutes les plateformes (le natif et WebAssembly donnent les mêmes octets), et les valeurs sont 0,713 et 86,499 m (docs/revisions/STUDIO15-portable-math-rebaseline.md). Autour d'Europe, la distance de la Terre fait passer la disponibilité de 0,480 à 0,713 des époques. Là où la Terre ne dépasse jamais le limbe, la liaison n'apporte rien : un atterrisseur à 89,5 deg S sur la Lune, sous une couche de relais de 12 satellites à 5000 km, a la Terre en vue à 0 époque sur 145, et ses erreurs sont les mêmes avec et sans la liaison.
MODELLED. Les orbites des relais ignorent les corps tiers (l'attraction de Jupiter sur les relais autour d'Europe n'est pas modélisée), le bruit est gaussien aux niveaux indiqués et le modèle de mesure est instantané, non retardé par le temps de lumière. Ce qui est vérifié : la période des relais par rapport à la troisième loi de Kepler pour le corps, un orbiteur conservant son rayon et un atterrisseur sur la surface, la distance de la Terre n'aggravant jamais l'incertitude formelle, les erreurs de point de calage avec graine concordant avec le sigma formel (racine de la moyenne des carrés de l'erreur sur sigma dans [0,6, 1,5]), et une exécution déterministe. Rien de cela n'est une donnée de navigation d'une mission.
Le type ephemeris#
Malgré son nom, ephemeris est un type de scénario pour satellite terrestre : un satellite, à partir d'un jeu d'éléments à deux lignes (TLE) par le propagateur Simplified General Perturbations 4 (SGP4) ou à partir d'une orbite analytique, sur une grille de temps. À chaque pas, il produit l'état inertiel (position et vitesse) dans le référentiel true equator, mean equinox (TEME) et dans le Geocentric Celestial Reference System (GCRS), la position fixe par rapport à la Terre, le point sous-satellite du World Geodetic System 1984 (WGS 84) et, pour une station au sol facultative, l'azimut, l'élévation, la distance et la vitesse radiale. eop_finals2000a prend le texte d'un fichier finals2000A de l'International Earth Rotation and Reference Systems Service (IERS) pour UT1−UTC et le mouvement du pôle à chaque époque. Code : src/ephemeris.rs.
$ kshana scenarios/ephemeris.toml
scenario 0d4dd01b3160 | sgp4 (TLE) | 559 samples | alt 419–434 km | |lat| ≤ 51.8° | speed 7653–7661 m/s | max el 25.7° peak Doppler 34.3 kHz
Non modélisé#
- Les termes relativistes de temps de lumière au-delà du retard de Shapiro rapporté séparément, et le retard dû au plasma solaire.
- Des positions meilleures que la précision de Standish et des éléments moyens indiquée ci-dessus ; il n'y a pas de lecteur de noyau dans le crate principal.
- Les perturbations par des corps tiers sur les relais de
body-pntet sur les orbites deconstellation-design. - Le relief sur n'importe quel corps : un corps est sa sphère moyenne.
- Exports d'interopérabilité : CZML, KML et GeoJSON décrivent des positions autour de la Terre, de sorte que les scénarios
solar-systemetbody-pntn'en exportent aucun (INTEROP.md).
Références#
- E. M. Standish et J. G. Williams, "Keplerian Elements for Approximate Positions of the Major Planets", JPL Solar System Dynamics, https://ssd.jpl.nasa.gov/planets/approx_pos.html.
- O. Montenbruck et E. Gill, Satellite Orbits: Models, Methods and Applications, Springer, 2000, §3.3.2.
- B. A. Archinal et al., "Report of the IAU Working Group on Cartographic Coordinates and Rotational Elements: 2015", Celestial Mechanics and Dynamical Astronomy 130, 2018.
- JPL Horizons, https://ssd.jpl.nasa.gov/horizons/.