Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

AlustamineMuuda GitHubisSource: docs/tutorials/01-first-orbit.md

Õ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:

  1. võtab GPS konstellatsiooni tõelise Celestraki gps-ops hetktõmmise (2021-07-28, 30 satelliiti, tõelised kaherealised elemendikomplektid, TLE-d),
  2. propageerib iga satelliidi valideeritud SGP4/SDP4 mudeliga (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4),
  3. arvutab igal ajasammul välja, milliseid satelliite madala Maa orbiidi kasutaja näeb (nähtavusjoon, Maa varjutus ja 5° kõrgusmask),
  4. muudab selle geomeetria PDOP-iks (positsiooni täpsuse halvenemise tegur) ja positsiooni täpsuseks ning
  5. 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 stsenaariumis sigma_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. (security näitab n/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 (sest sigma_uere_m = 1.0), samples_total == 361 ja kokkuvõte sisaldab 345/361.
  • tutorial1_satellites_are_in_the_gps_meo_shell — PG01 raadius on GPS kihi vahemikus, kontrollituna avaldatud a = 26,560 km vastu.

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.0 siin. Muuta UERE-t ja need lahknevad.
  • Ajastuse arvud on nanosekundites, positsiooni arv meetrites. Neid mitte segada.
  • holdover_s on 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.