Todellisten satelliittitähdistön TLE-tietojen käyttö
Mukana toimitettu scenarios/orbit-sgp4-gps.toml sisältää jo todellisia TLE-tietoja (two-line element set): Celestrakin tilannekuvan gps-ops toiminnassa olevasta GPS-tähdistöstä (Global Positioning System), luetteloituna 2021-07-28, 30 satelliittia, asetuksella strict_checksum = true. Jokainen satelliitti propagoidaan SGP4/SDP4:llä (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4), joka on validoitu virallisia AIAA 2006-6753 -vektoreita (American Institute of Aeronautics and Astronautics) vasten. Sama tilannekuva on vendoroitu tiedostoksi tests/fixtures/celestrak/gps-ops_2021-07-28.txt, ja scripts/fetch_tles.sh noutaa tuoreen. Lue osio 3 ennen kuin siteeraat siitä geometrialukua: tuo skenaario propagoi jokaisen satelliitin sen omasta epookista.
Synteettistä, itsenäistä esimerkkiä varten scenarios/orbit-real-tle.toml antaa kuusi GPS:n kaltaista satelliittia pelkkinä rivin 2 tietueina, propagoituna analyyttisinä Kepler-alkioina, ja jokainen skenaario, jonka tyyppi on orbit, ilman lohkoa tle rakentaa Walker-tähdistön.
Tutkiaksesi nykyistä GPS-tähdistöä (tai mitä tahansa muuta), lisää tuore tilannekuva.
1. Lataa tuore tilannekuva#
Celestrak jakelee NORAD-luettelon (North American Aerospace Defense Command) elementtijoukkoja, päivitettynä vähintään päivittäin. GPS:lle:
curl -o gps-ops.txt "https://celestrak.org/NORAD/elements/gp.php?GROUP=gps-ops&FORMAT=tle"
Muita hyödyllisiä ryhmiä: galileo, glo-ops (GLONASS, Venäjän maailmanlaajuinen satelliittinavigointijärjestelmä), beidou, stations (ISS eli kansainvälinen avaruusasema ja muut miehitetyt asemat).
Tiedosto on kolmen rivin tietueiden jono (nimi, rivi 1, rivi 2). Kshanan jäsennin ohittaa nimirivit, joten voit liittää tiedoston sellaisenaan.
2. Lisää se skenaarioon#
Aseta missä tahansa rata-skenaariossa tähdistön lohko tle tilannekuvan sisällöksi:
[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 on pseudosatunnaiskoodin numero, jonka GPS-satelliitti lähettää.)
Rivin 1 + rivin 2 pari propagoidaan SGP4/SDP4:llä (vastus- ja syväavaruustermit); pelkkä rivi 2 käsitellään analyyttisinä Keplerin keskialkioina. Näitä voi sekoittaa.
Asetus strict_checksum = true hylkää jokaisen rivin, jonka sarakkeen 69 modulo-10-tarkistussumma on väärä — hyvä eheystarkistus juuri ladatulle tiedostolle. Oletus on false, koska synteettiset opetusskenaariot käyttävät paikkamerkkitarkistussummia.
3. Huomioita epookeista — lue tämä ennen kuin siteeraat geometrialukua#
SGP4 propagoi jokaisen satelliitin sen oman TLE-epookin mukaan, ja parse_propagators (tiedostossa src/tle.rs) palauttaa vain propagaattorit, joten skenaarioaika t sovelletaan jokaiseen satelliittiin erikseen muodossa tsince = t. Se on oikea käytäntö vain, jos kaikilla tiedoston elementtijoukoilla on yhteinen epookki.
Celestrakin ryhmätiedosto ei anna sitä. Tiedosto ladataan yhtenä hetkenä, mutta kunkin satelliitin elementtijoukko päivitetään omalla tahdillaan, joten tiedoston epookit ovat hajaantuneet usean päivän ajalle. Mitattuna tähän repositorioon vendoroiduista joukoista (rivi 1, sarakkeet 19–32):
| testiaineisto | joukot | epookin hajonta |
|---|---|---|
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 vastaa 5,9 GPS-kierrosta. Sellaisenaan propagoituna tasonsisäinen vaiheistus sekoittuu: satelliitit ovat oikeilla korkeuksilla ja inklinaatioilla, mutta eivät siellä, missä ne olivat minään yksittäisenä päivänä, joten näkyvä joukko, DOP (tarkkuuden heikkenemiskerroin) ja niistä laskettu saatavuus kuvaavat tähdistöä, jota ei ole koskaan ollut. Mikään jäsentimessä ei mittaa tätä hajontaa puolestasi, ja tyypit orbit ja integrity eivät tasaa epookkeja: skenaarion TLE-lohko propagoidaan aina satelliittikohtaisen epookin mukaan.
Tee sen sijaan näin. Pidä epookki propagaattorin vierellä, valitse yksi viitehetki ja siirrä kunkin satelliitin tsince siihen. Tle::epoch_days_1950 on julkinen, joten jäsennyssilmukka on lyhyt; tests/igs_real_data.rs (real_gps_tle_snapshot) on tämän puun läpikäyty esimerkki:
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 on todellisen päiväntasaajan ja keskimääräisen kevätpisteen koordinaatisto, jossa SGP4 toimii; tests/igs_real_data.rs kiertää sen Maahan kiinnitettyihin koordinaatteihin funktiolla teme_to_ecef.
Jos et tasaa, kerro se lukua raportoidessasi: se on lausuma kiertoradan kuorista, ei todellisesta taivaasta.
Tämän merkitys on mitattu tiedostossa tests/araim_dual_real_data.rs, joka soveltaa samoja siirtymiä (viitehetki: yhdistettyjen GPS- + Galileo-testiaineistojen uusin epookki, 2026-06-07T07:21:04 UTC (koordinoitu yleisaika)) kaksitähdistö-ARAIM-saatavuusajon (kehittynyt vastaanottimen autonominen eheyden valvonta) läpi, jonka kesto on 24 h. Kun VAL (pystysuuntainen hälytysraja) on 12 m, tasattu taivas antaa pelkälle GPS:lle 0,993, yhdistetylle GPS+Galileolle 1,000 ja tähdistövikoja kestävälle kaksoisratkaisulle 0,990; tasaamaton satelliittikohtaisen epookin käytäntö antaa samoilla syötteillä 0,208, 0,671 ja 0,031 — eri johtopäätös, ei pieni virhe.
Katso myös#
README.md— rata-skenaariot.SCENARIOS.md— tyypinorbitkentät; tyypitintegrity,gnss-sim,jammingjaconstellation-designkäyttävät samaa tauluaconstellation, jaephemerisottaa yhden kohteentle.INTEGRITY.md— ARAIM-moottori, jota todellisen taivaan testi ajaa.src/tle.rs— jäsennin (parse_propagators,ParseOpts { strict_checksum }).