Õpetus 1 — Minu esimene orbiit: kus on GPS satelliidid
Kind: orbit · Stsenaarium: scenarios/orbit-sgp4-gps.toml (õppekoopia: scenarios/orbit.toml) · Raskusaste: algaja · ~15 min
Lõpuks on propageeritud tegelik töötav GPS konstellatsioon, loetud selle kättesaadavust ja geomeetriat ning eksporditud tabel sellest, kus iga satelliit kosmoses tegelikult asub — ja teatakse, et see tabel on valideeritud välise etaloni vastu, mitte iseenda vastu.
Mis see stsenaarium on#
GPS (Global Positioning System) satelliidid ütlevad kasutajale, kus ta on ja mis kell on. Enne seda tuleb teada, kus satelliidid on ja mitu neist kasutaja näeb. See on geomeetria ja geomeetria seab põranda sellele, kui täpselt saab positsioneerida (täpsuse halvenemise tegur ehk DOP). See õpetus:
- võtab GPS konstellatsiooni tõelise Celestraki
gps-opshetktõmmise (2021-07-28, 30 satelliiti, tõelised kaherealised elemendikomplektid, TLE-d), - propageerib iga satelliidi valideeritud SGP4/SDP4 mudeliga (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4),
- arvutab igal ajasammul välja, milliseid satelliite madala Maa orbiidi kasutaja näeb (nähtavusjoon, Maa varjutus ja 5° kõrgusmask),
- muudab selle geomeetria PDOP-iks (positsiooni täpsuse halvenemise tegur) ja positsiooni täpsuseks ning
- ekspordib satelliitide tegelikud Maaga seotud (ECEF) asukohad SP3 faili (Standard Product 3, rahvusvahelise GNSS teenistuse IGS täppisorbiidi vorming; GNSS on ülemaailmne satelliitnavigatsioonisüsteem).
Selgroog on: TLE → SGP4 propageerimine → ECEF epohhi kohta → nähtavus → nähtavate satelliitide arv → PDOP → positsiooni-sigma = PDOP · σ_UERE, kus σ_UERE on kasutaja ekvivalentne kauguse viga (1-σ kauguse mõõtmise viga satelliidi kohta).
Käivitamine#
cargo run -- scenarios/orbit-sgp4-gps.toml
Python:
import json, kshana
result = json.loads(kshana.run(open("scenarios/orbit-sgp4-gps.toml").read()))
print(result["geometry"]["best_pdop"], result["geometry"]["best_position_sigma_m"])
Või avada brauseri Studio ja valida orbiidi stsenaarium.
Üherealise kokkuvõtte lugemine#
Deterministlik käivitus (algväärtus (seed) = 17) trükib:
scenario 4c51512369a6 | 345/361 samples GNSS-nominal | best PDOP 1.07 pos 1.07m | quantum holdover 0s p95 2.59e-5ns integrity 1.000 security n/a (no attack) | classical holdover 0s p95 6.7ns integrity 1.000 security n/a (no attack)
Väli välja kaupa:
scenario 4c51512369a6— 12-märgiline stsenaariumi räsi. See on täpsete sisendite sõrmejälg (algväärtus (seed), läved, mudeli parameetrid, TLE plokk). Muuta mis tahes sisendit ja see muutub; hoida need samadena ja käivitus reprodutseeritakse bitt-bitilt. Sama räsi on templitud diagrammi jaluses ja JSON (JavaScript Object Notation) tulemusefailis.345/361 samples GNSS-nominal— 361 ajasammust on kasutajal kasutatav fiks 345 sammul (95,6 %). Käivitus on 12 h läbimine (43 200 s) sammuga 120 s.best PDOP 1.07— parim (madalaim) positsiooni täpsuse halvenemise tegur läbimise jooksul. PDOP lähedal väärtusele 1 on suurepärane geomeetria; mida madalam, seda parem.pos 1.07m— parim positsiooni täpsus: positsiooni-sigma = PDOP · σ_UERE. Selles stsenaariumissigma_uere_m = 1.0, seega on kaks arvu siin numbriliselt võrdsed — kuid reegel on PDOP × UERE, mitte „positsioon = PDOP“. 3 m UERE korral oleks positsiooni-sigma ~3,2 m. (Vt lõpus olevat lõksu.)- Kella arvud (
holdover,p95,integrity,security) tulevad kaasa, sest orbiidipakett kannab läbimise jooksul ka kella; need on õpetuse 2 fookus, mitte selle oma. (securitynäitabn/a (no attack), sest rünnakut ei ole seadistatud.)
JSON geomeetriaplokis on aluseks olevad arvud:
"geometry": {
"samples_total": 361,
"samples_with_fix": 345,
"sigma_uere_m": 1.0,
"best_pdop": 1.0713624151805556,
"median_pdop": 2.318376881311817,
"best_position_sigma_m": 1.0713624151805556,
"median_position_sigma_m": 2.318376881311817
}
Kus satelliidid on? (tasu)#
Geomeetria on hea sellepärast, et satelliidid on tõesti GPS kihis. Tõestada seda — eksportida nende Maaga seotud asukohad:
cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3
Esimesed kolm satelliiti esimesel näidissammul, ECEF km-des (SP3 fail kannab neljandat, kella veergu, mis on kirjutatud „väärtust pole“ markeriga 999999,999999):
PG01 9771.575585 24612.128830 0.003744 999999.999999
PG02 20449.643959 -11875.958365 -12379.457079 999999.999999
PG03 26467.367408 45.510223 4010.411755 999999.999999
Võtta PG01 geotsentriline raadius:
|r(PG01)| = sqrt(9771.575585^2 + 24612.128830^2 + 0.003744^2) = 26480.9 km
Mitte-ringsõltuv sõltumatu etalon: kas see on tõesti GPS orbiit?#
Õpetus, mis kontrollib mootorit iseenda vastu, ei tõesta midagi. Siin on väline, mitte-ringsõltuv ankur igale ülaltoodud väitele.
1. Satelliidid asuvad tegelikul GPS keskmise Maa orbiidi (MEO) kihil. GPS nominaalne poolpeatelg on a = 26 560 km, kõrgus ≈ 20 180 km üle Maa keskmise raadiuse 6 378 km (IS-GPS-200, GPS liidesespetsifikatsioon; GPS standardse positsioneerimisteenuse (SPS) toimivusstandard, USA kaitseministeerium (DoD); Misra & Enge, Global Positioning System, 2. trükk). PG01 hetkeraadius 26 480,9 km jääb mõne sajandi km piiresse väärtusest a — täpselt see, mida annab tegelik GPS ekstsentrilisus (~0,005–0,02). Test tests/tutorials.rs::tutorial1_satellites_are_in_the_gps_meo_shell kinnitab 26000 km < |r(PG01)| < 27200 km selle avaldatud a vastu, mis on Kshanast väline.
2. Läbimise pikkus on üks GPS tiirlus. Kepleri kolmas seadus annab perioodi T = 2π√(a³/μ) koos a = 26,560 km ja μ = 398,600.4418 km³/s² (World Geodetic System 1984, WGS-84; National Imagery and Mapping Agency tehniline aruanne NIMA TR8350.2): T = 43,078 s = 11.967 h, pool tähepäeva. Stsenaariumi kestus 43 200 s („~üks GPS tiirlus“) ühtib sellega alla 0,3 % täpsusega ja GPS maapealne jälg kordub iga tähepäev (kaks tiiru), IS-GPS-200 järgi.
3. Propageeritud asukohad on valideeritud, mitte ainult iseendaga kooskõlalised. SGP4/SDP4 propageerija, mis selle ECEF tabeli tekitas, ühtib kõigi 666 AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 kontrollvektoriga halvima juhu täpsusega 4,12 mm (tests/sgp4_verification.rs, docs/SGP4-VALIDATION.md) ja ühtib sõltumatu paketiga sgp4 mikronialuse täpsusega. Seega on eksporditud tabel kontrollitud välise etalonrealisatsiooni vastu, mitte Kshana enda aritmeetika vastu.
Märkus SP3 kuupäevade kohta. SP3 epohhi päis näitab kohatäite kalendrikuupäeva (2000-01-01); propageerimine algab tegelikult iga TLE enda epohhist (2021). Lugeda tabelit kui „ECEF asukohad esimesel näidissammul“, mitte kui „1. jaanuaril 2000“.
Mida test fikseerib#
tests/tutorials.rs muudab iga ülaltoodud arvu CI lepinguks:
tutorial1_orbit_headline_holds—best_pdop ≈ 1.071,best_position_sigma_m == best_pdop(sestsigma_uere_m = 1.0),samples_total == 361ja kokkuvõte sisaldab345/361.tutorial1_satellites_are_in_the_gps_meo_shell— PG01 raadius on GPS kihi vahemikus, kontrollituna avaldatuda = 26,560 kmvastu.
Kui mootor kunagi lõpetab tegeliku GPS kihi tootmise, läheb ehitus punaseks.
Lõksud ja ühikud#
- Positsiooni-sigma on PDOP × UERE, mitte PDOP. Need on võrdsed ainult sellepärast, et
sigma_uere_m = 1.0siin. Muuta UERE-t ja need lahknevad. - Ajastuse arvud on nanosekundites, positsiooni arv meetrites. Neid mitte segada.
holdover_son ruudustikule kvantiseeritud (alampiir ajaruudustiku sammul). Selles läbimises on kasutaja põhimõtteliselt alati fiksis, seega on holdover 0 s (pole katkestust, mille kaudu veereda) — see on hea juhtum.
Mis edasi#
- Pingutada või lõdvendada kõrgusmaski (
mask_deg) ja jälgida kättesaadavuse muutumist — see on 2. astme harjutus. - Vahetada välja värske TLE hetktõmmisega, kasutades
scripts/fetch_tles.sh(2. astme „kasutada värskeid andmeid“). - Liikuda edasi õpetuse 2 — Kella holdover juurde, kus GNSS signaal võetakse ära ja pardakell peab veerema.