Maskinoversættelse, ikke gennemgået af en modersmålstalende. Engelsk er referencen.

ScenarierRedigér på GitHubKilde: docs/REAL_TLE_GUIDE.md

Brug af TLE'er for virkelige konstellationer

Den medfølgende scenarios/orbit-sgp4-gps.toml bærer allerede virkelige TLE'er (two-line element sets): Celestrak-snapshottet gps-ops af den operative GPS-konstellation (Global Positioning System), katalogiseret 2021-07-28, 30 satellitter, med strict_checksum = true. Hver satellit propageres med SGP4/SDP4 (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4), som er valideret mod de officielle AIAA-vektorer (American Institute of Aeronautics and Astronautics) 2006-6753. Det samme snapshot ligger som kopi i tests/fixtures/celestrak/gps-ops_2021-07-28.txt, og scripts/fetch_tles.sh henter et nyt. Læs afsnit 3, før du citerer et geometrital herfra: det scenarie propagerer hver satellit fra sin egen epoke.

Til et syntetisk, selvstændigt eksempel giver scenarios/orbit-real-tle.toml seks GPS-lignende satellitter som rene linje-2-poster, propageret som analytiske keplerelementer, og hvert orbit-scenarie uden en tle-blok bygger en Walker-konstellation.

For at studere den aktuelle GPS-konstellation (eller en anden) lægger du et nyt snapshot ind.

1. Hent et aktuelt snapshot#

Celestrak videredistribuerer elementsættene i NORAD-kataloget (North American Aerospace Defense Command), opdateret mindst dagligt. For GPS:

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

Andre nyttige grupper: galileo, glo-ops (GLONASS, Ruslands Global Navigation Satellite System), beidou, stations (ISS, International Space Station, og andre bemandede stationer).

Filen er en række poster på tre linjer (navn, linje 1, linje 2). Kshanas parser ignorerer navnelinjer, så du kan indsætte filen, som den er.

2. Læg det ind i et scenarie#

I ethvert kredsløbsscenarie sætter du konstellationens tle-blok til snapshottets indhold:

[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 er det pseudorandom-noise-kodenummer, en GPS-satellit sender.)

Et par af linje 1 + linje 2 propageres med SGP4/SDP4 (led for modstand og dybt rum); en ren linje 2 behandles som analytiske kepler-middelelementer. De to kan blandes.

strict_checksum = true afviser enhver linje, hvis kontrolsum modulo 10 i kolonne 69 er forkert — en god integritetskontrol af en frisk hentet fil. Standardværdien er false, fordi de syntetiske undervisningsscenarier bruger pladsholder-kontrolsummer.

3. Noter om epoker — læs dette, før du citerer et geometrital#

SGP4 propagerer hver satellit fra dens egen TLE-epoke, og parse_propagators (i src/tle.rs) returnerer kun propagatorer, så scenarietiden t anvendes som tsince = t på hver satellit uafhængigt. Det er kun den rigtige konvention, hvis alle elementsæt i filen har samme epoke.

En Celestrak-gruppefil giver dig ikke det. Filen hentes på ét tidspunkt, men hvert satellitelementsæt opdateres i sin egen takt, så epokerne i den er spredt over dage. Målt på de sæt, der ligger som kopi i dette repositorium (linje 1, kolonne 19–32):

fixture sæt spredning af epoker
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 er 5,9 GPS-omløb. Propageret, som det er, er faserne i banens plan blandet sammen: satellitterne er i de rigtige højder og hældninger, men ikke dér, hvor de var på nogen enkelt dag, så den synlige mængde, DOP (dilution of precision) og enhver tilgængelighed beregnet ud fra dem beskriver en konstellation, der aldrig har eksisteret. Intet i parseren måler denne spredning for dig, og typerne orbit og integrity afstemmer ikke epoker: en TLE-blok i et scenarie propageres altid pr. satellitepoke.

Gør i stedet dette. Behold epoken sammen med propagatoren, vælg ét referencetidspunkt, og forskyd hver satellits tsince til det. Tle::epoch_days_1950 er offentlig, så parsersløjfen er kort; tests/igs_real_data.rs (real_gps_tle_snapshot) er det gennemregnede eksempel i dette træ:

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 er det referencesystem med sand ækvator og middelækvinoktium, som SGP4 arbejder i; tests/igs_real_data.rs roterer det til koordinater fastlåst til Jorden med teme_to_ecef.

Hvis du ikke afstemmer, så sig det, når du rapporterer tallet: det er en udtalelse om baneskaller, ikke om en virkelig himmel.

Hvor meget det betyder, er målt i tests/araim_dual_real_data.rs, som anvender de samme forskydninger (referencetidspunkt: den seneste epoke i de kombinerede GPS- og Galileo-fixtures, 2026-06-07T07:21:04 UTC (Coordinated Universal Time)) gennem en tilgængelighedskørsel med to konstellationer i ARAIM (advanced receiver autonomous integrity monitoring) over 24 h. Under en VAL (vertical alert limit) på 12 m giver den afstemte himmel 0,993 for kun GPS, 1,000 for samlet GPS+Galileo og 0,990 for dobbelt, robust over for fejl i en konstellation; konventionen med pr. satellitepoke uden afstemning giver 0,208, 0,671 og 0,031 for de samme input — en anden konklusion, ikke en lille fejl.

Se også#

  • README.md — kredsløbsscenarierne.
  • SCENARIOS.md — felterne for typen orbit; typerne integrity, gnss-sim, jamming og constellation-design tager den samme constellation-tabel, og ephemeris tager en enkelt tle.
  • INTEGRITY.md — ARAIM-motoren, som testen med virkelig himmel driver.
  • src/tle.rs — parseren (parse_propagators, ParseOpts { strict_checksum }).