Maschinelle Übersetzung, nicht von einem Muttersprachler geprüft. Englisch ist die maßgebliche Fassung.

SzenarienAuf GitHub bearbeitenQuelle: docs/REAL_TLE_GUIDE.md

Echte Konstellations-TLEs verwenden

Die mitgelieferte Datei scenarios/orbit-sgp4-gps.toml enthält bereits echte TLEs (Zwei-Zeilen-Elementsätze): den Celestrak-Schnappschuss gps-ops der betriebsbereiten GPS-Konstellation (Global Positioning System), katalogisiert am 2021-07-28, 30 Satelliten, mit strict_checksum = true. Jeder Satellit wird mit SGP4/SDP4 propagiert (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4), das gegen die offiziellen Vektoren AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 validiert ist. Derselbe Schnappschuss liegt als tests/fixtures/celestrak/gps-ops_2021-07-28.txt mit im Repository, und scripts/fetch_tles.sh holt einen frischen. Lesen Sie Abschnitt 3, bevor Sie daraus eine Geometriezahl zitieren: Dieses Szenario propagiert jeden Satelliten ab seiner eigenen Epoche.

Für ein synthetisches, in sich geschlossenes Beispiel liefert scenarios/orbit-real-tle.toml sechs GPS-ähnliche Satelliten als reine Zeile-2-Datensätze, propagiert als analytische Kepler-Elemente, und jedes Szenario orbit ohne einen Block tle baut eine Walker-Konstellation auf.

Um die aktuelle GPS-Konstellation (oder eine andere) zu untersuchen, spielen Sie einen frischen Schnappschuss ein.

1. Einen aktuellen Schnappschuss herunterladen#

Celestrak verbreitet die Elementsätze des NORAD-Katalogs (North American Aerospace Defense Command) weiter, mindestens täglich aktualisiert. Für GPS:

curl -o gps-ops.txt "https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle"

Weitere nützliche Gruppen: galileo, glo-ops (GLONASS, das globale Satellitennavigationssystem Russlands), beidou, stations (die ISS, Internationale Raumstation, und andere bemannte Stationen).

Die Datei ist eine Folge dreizeiliger Datensätze (Name, Zeile 1, Zeile 2). Der Parser von Kshana ignoriert Namenszeilen, sodass Sie die Datei unverändert einfügen können.

2. In ein Szenario einfügen#

Setzen Sie in einem beliebigen Orbit-Szenario den Block tle der Konstellation auf den Inhalt des Schnappschusses:

[constellation]
# Paste the Celestrak gps-ops block here (name/line1/line2 triples). Two real records
# from tests/fixtures/celestrak/gps-ops_2026-06-07.txt are shown; a real block has ~30.
strict_checksum = true   # real Celestrak TLEs carry valid checksums; enforce them
tle = """
GPS BIIR-5  (PRN 22)
1 26407U 00040A   26158.26673196  .00000043  00000+0  00000+0 0  9990
2 26407  54.8526 215.5566 0121168 302.4173  18.5084  2.00557626189748
GPS BIIR-8  (PRN 16)
1 27663U 03005A   26157.61055816  .00000039  00000+0  00000+0 0  9995
2 27663  54.8837 215.3893 0147927  53.0597 289.9583  2.00561160171094
"""

(PRN ist die Nummer des Pseudozufallsrauschen-Codes, den ein GPS-Satellit sendet.)

Ein Paar aus Zeile 1 + Zeile 2 wird mit SGP4/SDP4 propagiert (Widerstands- und Tiefraumterme); eine reine Zeile 2 wird als analytische mittlere Kepler-Elemente behandelt. Beides darf gemischt werden.

strict_checksum = true weist jede Zeile zurück, deren Modulo-10-Prüfsumme in Spalte 69 falsch ist — eine gute Integritätsprüfung für eine frisch heruntergeladene Datei. Der Standardwert ist false, weil die synthetischen Lehrszenarien Platzhalter-Prüfsummen verwenden.

3. Hinweise zu Epochen — lesen Sie dies, bevor Sie eine Geometriezahl zitieren#

SGP4 propagiert jeden Satelliten ab seiner eigenen TLE-Epoche, und parse_propagators (in src/tle.rs) liefert nur Propagatoren zurück, sodass die Szenariozeit t als tsince = t auf jeden Satelliten unabhängig angewendet wird. Das ist nur dann die richtige Konvention, wenn alle Elementsätze in der Datei dieselbe Epoche haben.

Eine Celestrak-Gruppendatei liefert das nicht. Die Datei wird zu einem Zeitpunkt heruntergeladen, aber der Elementsatz jedes Satelliten wird in seinem eigenen Rhythmus aktualisiert, sodass die Epochen darin über Tage verteilt sind. Gemessen an den in diesem Repository mitgelieferten Sätzen (Zeile 1, Spalten 19–32):

Testdatei Sätze Epochenstreuung
tests/fixtures/celestrak/gps-ops_2026-06-07.txt 32 70,6 h
tests/fixtures/celestrak/gps-ops_2021-07-28.txt 30 76,4 h
tests/fixtures/celestrak/galileo_2026-06-07.txt 33 335,7 h

70,6 h sind 5,9 GPS-Umläufe. Unverändert propagiert, ist die Phasenlage in der Bahnebene durcheinandergebracht: Die Satelliten befinden sich in den richtigen Höhen und Neigungen, aber nicht dort, wo sie an irgendeinem einzelnen Tag waren, sodass die sichtbare Menge, der DOP (Dilution of Precision) und jede daraus berechnete Verfügbarkeit eine Konstellation beschreiben, die es nie gab. Nichts im Parser misst diese Streuung für Sie, und die Arten orbit und integrity gleichen Epochen nicht an: Ein TLE-Block in einem Szenario wird immer je Satellitenepoche propagiert.

Gehen Sie stattdessen so vor. Behalten Sie die Epoche neben dem Propagator, wählen Sie einen Bezugszeitpunkt und verschieben Sie das tsince jedes Satelliten darauf. Tle::epoch_days_1950 ist öffentlich, daher ist die Parse-Schleife kurz; tests/igs_real_data.rs (real_gps_tle_snapshot) ist das durchgearbeitete Beispiel in diesem Verzeichnisbaum:

use kshana::orbit::Propagator;
use kshana::sgp4::wgs72;
use kshana::tle::parse_tle;

/// TEME position (m) of one satellite at `t` seconds after the common reference
/// instant `t_ref_jd` (a Julian date), not after its own TLE epoch.
fn aligned_teme_m(line1: &str, line2: &str, t_ref_jd: f64, t: f64) -> Result<[f64; 3], String> {
    let tle = parse_tle(line1, line2)?;
    let jd_epoch = 2_433_281.5 + tle.epoch_days_1950;
    let prop = Propagator::Sgp4(Box::new(tle.to_sgp4(wgs72(), false)));
    let tsince_s = (t_ref_jd - jd_epoch) * 86_400.0 + t;
    Ok(prop.position_eci(tsince_s))
}

TEME ist das Bezugssystem mit wahrem Äquator und mittlerem Äquinoktium, in dem SGP4 arbeitet; tests/igs_real_data.rs dreht es mit teme_to_ecef in erdfeste Koordinaten.

Wenn Sie nicht angleichen, sagen Sie das, wenn Sie die Zahl berichten: Sie ist eine Aussage über Bahn-Schalen, nicht über einen realen Himmel.

Wie viel das ausmacht, wird in tests/araim_dual_real_data.rs gemessen, das dieselben Verschiebungen anwendet (Bezugszeitpunkt: die späteste Epoche in den kombinierten GPS- und Galileo-Testdaten, 2026-06-07T07:21:04 UTC (koordinierte Weltzeit)) in einem 24-h-Verfügbarkeitslauf mit ARAIM (erweiterte empfängerautonome Integritätsüberwachung) für zwei Konstellationen. Unter einem VAL (vertikale Alarmgrenze) von 12 m liefert der angeglichene Himmel für nur GPS 0,993, für gepooltes GPS+Galileo 1,000 und für das konstellationsfehlerrobuste Dual 0,990; die nicht angeglichene Konvention je Satellitenepoche liefert für dieselben Eingaben 0,208, 0,671 und 0,031 — ein anderer Schluss, kein kleiner Fehler.

Siehe auch#

  • README.md — die Orbit-Szenarien.
  • SCENARIOS.md — die Felder der Art orbit; die Arten integrity, gnss-sim, jamming und constellation-design verwenden dieselbe Tabelle constellation, und ephemeris nimmt ein einzelnes tle.
  • INTEGRITY.md — die ARAIM-Engine, die der Test mit realem Himmel antreibt.
  • src/tle.rs — der Parser (parse_propagators, ParseOpts { strict_checksum }).