Maskinöversättning, inte granskad av en modersmålstalare. Engelska är referensen.

ScenarierRedigera på GitHubKälla: docs/REAL_TLE_GUIDE.md

Använda TLE:er för verkliga konstellationer

Den medföljande scenarios/orbit-sgp4-gps.toml har redan verkliga TLE:er (tvåradiga elementmängder): ögonblicksbilden gps-ops från Celestrak av den operativa GPS-konstellationen (Global Positioning System) katalogiserad 2021-07-28, 30 satelliter, med strict_checksum = true. Varje satellit propageras med SGP4/SDP4 (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4), som är validerad mot de officiella vektorerna i AIAA (American Institute of Aeronautics and Astronautics) 2006-6753. Samma ögonblicksbild medföljer som tests/fixtures/celestrak/gps-ops_2021-07-28.txt, och scripts/fetch_tles.sh hämtar en ny. Läs avsnitt 3 innan du citerar ett geometritalvärde från den: det scenariot propagerar varje satellit från sin egen epok.

För ett syntetiskt, självständigt exempel ger scenarios/orbit-real-tle.toml sex GPS-liknande satelliter som rena rad 2-poster, propagerade som analytiska keplerska element, och varje orbit-scenario utan ett tle-block bygger en Walker-konstellation.

För att studera den aktuella GPS-konstellationen (eller någon annan), lägg in en ny ögonblicksbild.

1. Hämta en aktuell ögonblicksbild#

Celestrak vidaredistribuerar elementmängderna ur NORAD-katalogen (North American Aerospace Defense Command), uppdaterade minst dagligen. För GPS:

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

Andra användbara grupper: galileo, glo-ops (GLONASS, Rysslands globala satellitnavigeringssystem), beidou, stations (ISS, Internationella rymdstationen, och andra bemannade stationer).

Filen är en följd av poster med tre rader (namn, rad 1, rad 2). Kshanas tolkare ignorerar namnrader, så du kan klistra in filen som den är.

2. Lägg in den i ett scenario#

Ange i vilket banscenario som helst konstellationens tle-block till ögonblicksbildens innehåll:

[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 är numret på den pseudoslumpkod som en GPS-satellit sänder.)

Ett par med rad 1 + rad 2 propageras med SGP4/SDP4 (termer för luftmotstånd och djuprymd); en ensam rad 2 behandlas som analytiska keplerska medelelement. De två kan blandas.

strict_checksum = true avvisar varje rad vars kontrollsumma modulo 10 i kolumn 69 är fel — en bra integritetskontroll av en nyligen nedladdad fil. Standardvärdet är false eftersom de syntetiska undervisningsscenarierna använder platshållare som kontrollsummor.

3. Anmärkningar om epoker — läs det här innan du citerar ett geometritalvärde#

SGP4 propagerar varje satellit från sin egen TLE-epok, och parse_propagators (i src/tle.rs) returnerar bara propagatorer, så scenariotiden t tillämpas som tsince = t på varje satellit oberoende av de andra. Det är rätt konvention bara om alla elementmängder i filen har samma epok.

En gruppfil från Celestrak ger dig inte det. Filen laddas ned vid ett ögonblick, men varje satellits elementmängd uppdateras i sin egen takt, så epokerna i den är spridda över dygn. Uppmätt på mängderna som medföljer i det här repot (rad 1, kolumnerna 19–32):

testdata mängder epokspridning
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 är 5,9 GPS-varv. Propagerad som den är blir fasläget i banplanet förvrängt: satelliterna befinner sig på rätt höjder och med rätt inklinationer, men inte där de var under någon enskild dag, så den synliga mängden, DOP (geometrisk försämring av precisionen) och all tillgänglighet som beräknas ur dem beskriver en konstellation som aldrig har funnits. Ingenting i tolkaren mäter den här spridningen åt dig, och typerna orbit och integrity justerar inte epoker: ett TLE-block i ett scenario propageras alltid per satellitepok.

Gör så här i stället. Behåll epoken tillsammans med propagatorn, välj ett gemensamt referensögonblick och förskjut varje satellits tsince till det. Tle::epoch_days_1950 är publik, så tolkningsslingan blir kort; tests/igs_real_data.rs (real_gps_tle_snapshot) är det genomgångna exemplet i det här trädet:

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 är det system med sant ekvatorsplan och medelekvinoktium som SGP4 arbetar i; tests/igs_real_data.rs roterar det till jordfasta koordinater med teme_to_ecef.

Om du inte justerar, säg det när du redovisar talet: det är ett påstående om banskal, inte om en verklig himmel.

Hur mycket det spelar roll mäts i tests/araim_dual_real_data.rs, som tillämpar samma förskjutningar (referensögonblick: den senaste epoken i de kombinerade GPS- och Galileo-testdata, 2026-06-07T07:21:04 UTC (koordinerad universell tid)) genom en 24 h lång tillgänglighetskörning med ARAIM (avancerad autonom integritetsövervakning i mottagaren) för två konstellationer. Med en VAL (vertikal larmgräns) på 12 m ger den justerade himlen 0,993 för enbart GPS, 1,000 för sammanslagen GPS+Galileo och 0,990 för den dubbla som är robust mot konstellationsfel; konventionen med oinjusterad epok per satellit ger 0,208, 0,671 och 0,031 för samma indata — en annan slutsats, inte ett litet fel.

Se även#

  • README.md — banscenarierna.
  • SCENARIOS.md — fälten för typen orbit; typerna integrity, gnss-sim, jamming och constellation-design tar samma constellation-tabell, och ephemeris tar en enda tle.
  • INTEGRITY.md — ARAIM-motorn som testet mot verklig himmel driver.
  • src/tle.rs — tolkaren (parse_propagators, ParseOpts { strict_checksum }).