Maskinoversettelse, ikke gjennomgått av en morsmålsbruker. Engelsk er referansen.

ScenarioerRediger på GitHubKilde: docs/REAL_TLE_GUIDE.md

Bruk av virkelige TLE-er for konstellasjoner

Den medfølgende scenarios/orbit-sgp4-gps.toml har allerede virkelige TLE-er (two-line element sets): Celestrak-øyeblikksbildet gps-ops av den operative GPS-konstellasjonen (Global Positioning System) katalogisert 2021-07-28, 30 satellitter, med strict_checksum = true. Hver satellitt propageres med SGP4/SDP4 (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4), som er validert mot de offisielle vektorene fra AIAA (American Institute of Aeronautics and Astronautics) 2006-6753. Det samme øyeblikksbildet ligger som kopi i tests/fixtures/celestrak/gps-ops_2021-07-28.txt, og scripts/fetch_tles.sh henter et ferskt. Les avsnitt 3 før du siterer et geometritall fra det: det scenarioet propagerer hver satellitt fra sin egen epoke.

For et syntetisk, selvstendig eksempel gir scenarios/orbit-real-tle.toml seks GPS-lignende satellitter som rene linje-2-poster, propagert som analytiske Kepler-elementer, og hvert orbit-scenario uten en tle-blokk bygger en Walker-konstellasjon.

For å studere den nåværende GPS-konstellasjonen (eller en annen) legger du inn et ferskt øyeblikksbilde.

1. Last ned et aktuelt øyeblikksbilde#

Celestrak videredistribuerer elementsettene i NORAD-katalogen (North American Aerospace Defense Command), oppdatert minst daglig. 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, Russlands globale satellittnavigasjonssystem), beidou, stations (ISS, den internasjonale romstasjonen, og andre bemannede stasjoner).

Filen er en rekke treliners poster (navn, linje 1, linje 2). Kshanas parser ignorerer navnelinjer, så du kan lime inn filen som den er.

2. Legg den inn i et scenario#

I et hvilket som helst orbit-scenario setter du konstellasjonens tle-blokk til innholdet i øyeblikksbildet:

[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 nummeret på den pseudotilfeldige støykoden en GPS-satellitt sender.)

Et par av linje 1 + linje 2 propageres med SGP4/SDP4 (luftmotstand og dypromsledd); en enkeltstående linje 2 behandles som analytiske Kepler-middelelementer. De to kan blandes.

strict_checksum = true avviser enhver linje der kontrollsummen modulo 10 i kolonne 69 er feil — en god integritetskontroll for en nylig nedlastet fil. Standardverdien er false fordi de syntetiske undervisningsscenarioene bruker plassholderkontrollsummer.

3. Merknader om epoker — les dette før du siterer et geometritall#

SGP4 propagerer hver satellitt fra sin egen TLE-epoke, og parse_propagators (i src/tle.rs) returnerer bare propagatorer, så scenariotiden t brukes som tsince = t for hver satellitt uavhengig. Det er riktig konvensjon bare hvis alle elementsettene i filen har felles epoke.

En gruppefil fra Celestrak gir deg ikke det. Filen lastes ned på ett tidspunkt, men hvert satellittsett oppdateres i sin egen takt, så epokene i den er spredt over flere dager. Målt på settene som ligger i dette depotet (linje 1, kolonne 19–32):

testdatasett sett epokespredning
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øp. Propagert som de er, blir faseforholdet i banen rotet til: satellittene er i riktige høyder og med riktige inklinasjoner, men ikke der de var på noen enkelt dag, så synlig sett, DOP (dilution of precision) og enhver tilgjengelighet beregnet ut fra dem beskriver en konstellasjon som aldri har eksistert. Ingenting i parseren måler denne spredningen for deg, og typene orbit og integrity justerer ikke epoker: en TLE-blokk i et scenario propageres alltid per satellittepoke.

Gjør dette i stedet. Behold epoken sammen med propagatoren, velg ett referansetidspunkt, og forskyv hver satellitts tsince til det. Tle::epoch_days_1950 er offentlig, så parsesløyfen er kort; tests/igs_real_data.rs (real_gps_tle_snapshot) er det gjennomarbeidede eksempelet i dette treet:

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 rammen med sann ekvator og midlere jevndøgn som SGP4 arbeider i; tests/igs_real_data.rs roterer den til jordfaste koordinater med teme_to_ecef.

Hvis du ikke justerer, må du si fra om det når du rapporterer tallet: det er en uttalelse om banesjikt, ikke om en virkelig himmel.

Hvor mye dette betyr, er målt i tests/araim_dual_real_data.rs, som bruker de samme forskyvningene (referansetidspunkt: den seneste epoken i de kombinerte GPS- og Galileo-testdataene, 2026-06-07T07:21:04 UTC (Coordinated Universal Time)) gjennom en 24 h tilgjengelighetskjøring med ARAIM (advanced receiver autonomous integrity monitoring) for to konstellasjoner. Under en VAL (vertical alert limit) på 12 m gir den justerte himmelen 0,993 for bare GPS, 1,000 for samlet GPS+Galileo og 0,990 for dual-konstellasjonen som er robust mot konstellasjonsfeil; den ujusterte konvensjonen per satellittepoke gir 0,208, 0,671 og 0,031 for de samme inndataene — en annen konklusjon, ikke en liten feil.

Se også#

  • README.md — orbit-scenarioene.
  • SCENARIOS.md — feltene til typen orbit; typene integrity, gnss-sim, jamming og constellation-design bruker den samme constellation-tabellen, og ephemeris tar en enkelt tle.
  • INTEGRITY.md — ARAIM-motoren som testen med virkelig himmel bruker.
  • src/tle.rs — parseren (parse_propagators, ParseOpts { strict_checksum }).