Konekäännös, jota äidinkielinen puhuja ei ole tarkistanut. Viitteenä on englanninkielinen versio.

AloitaMuokkaa GitHubissaLähde: docs/tutorials/01-first-orbit.md

Opetusohjelma 1 — Ensimmäinen kiertoratani: missä GPS-satelliitit ovat

Kind: orbit · Skenaario: scenarios/orbit-sgp4-gps.toml (opetuskopio: scenarios/orbit.toml) · Vaikeustaso: aloittelija · ~15 min

Lopuksi olet laskenut todellisen operatiivisen GPS-satelliittitähdistön satelliittien radat ajassa eteenpäin, lukenut sen saatavuuden ja geometrian ja viennyt taulukon siitä, missä jokainen satelliitti todella on avaruudessa — ja tiedät, että taulukko on validoitu ulkoista vertailua vasten, ei itseään vasten.

Mikä tämä skenaario on#

GPS (Global Positioning System) -satelliitit kertovat käyttäjälle, missä se on ja mitä kello on. Ennen sitä on tiedettävä, missä satelliitit ovat ja montako niistä käyttäjä näkee. Se on geometriaa, ja geometria asettaa alarajan sille, kuinka tarkasti sijainti voidaan määrittää (tarkkuuden heikkenemiskerroin eli DOP). Tämä opetusohjelma:

  1. ottaa GPS-satelliittitähdistön aidon Celestrak-tilannekuvan (ryhmä gps-ops; 2021-07-28, 30 satelliittia, oikeat kaksirivisiä elementtijoukkoja eli TLE),
  2. laskee jokaisen satelliitin radan ajassa eteenpäin validoidulla SGP4/SDP4-mallilla (Simplified General Perturbations 4 / Simplified Deep-space Perturbations 4),
  3. selvittää jokaisella aika-askeleella, mitkä satelliitit matalan Maan kiertoradan käyttäjä näkee (näköyhteys, Maan peitto ja 5° korkeuskulmamaski),
  4. muuttaa geometrian PDOP-arvoksi (sijainnin tarkkuuden heikkenemiskerroin) ja sijaintitarkkuudeksi, ja
  5. vie satelliittien todelliset Maan keskipisteeseen sidotut, Maan mukana pyörivät (ECEF) sijainnit SP3-tiedostoon (Standard Product 3, kansainvälisen GNSS-palvelun (International GNSS Service, IGS) tarkka rataformaatti; GNSS on maailmanlaajuinen satelliittinavigointijärjestelmä).

Runko on: TLE → SGP4-ratalaskenta → ECEF aikahetkittäin → näkyvyys → näkyvien satelliittien määrä → PDOP → sijainti-sigma = PDOP · σ_UERE, missä σ_UERE on käyttäjän ekvivalentti etäisyysvirhe (kunkin satelliitin 1-σ-etäisyysmittausvirhe).

Aja se#

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"])

Tai avaa selaimen Studio ja valitse kiertorata-skenaario.

Lue yhden rivin yhteenveto#

Deterministinen ajo (siemenluku = 17) tulostaa:

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)

Kenttä kerrallaan:

  • scenario 4c51512369a6 — 12-merkkinen skenaarion tiiviste (hash). Se tunnistaa täsmälliset syötteet (siemenluvun, kynnykset, malliparametrit, TLE-lohkon). Muuta mitä tahansa syötettä, ja tiiviste muuttuu; pidä ne samoina, ja toistat ajon bitilleen. Sama tiiviste leimataan kaavion alatunnisteeseen ja tulos-JSON-tiedostoon (JavaScript Object Notation).
  • 345/361 samples GNSS-nominal — 361 aika-askeleesta käyttäjällä on käyttökelpoinen paikkaratkaisu 345 askeleella (95,6 %). Ajo on 12 h pituinen läpikäynti (43 200 s), ja askel on 120 s.
  • best PDOP 1.07 — läpikäynnin paras (pienin) sijainnin tarkkuuden heikkenemiskerroin. PDOP lähellä lukua 1 on erinomainen geometria; mitä pienempi, sen parempi.
  • pos 1.07m — paras sijaintitarkkuus: sijainti-sigma = PDOP · σ_UERE. Tässä skenaariossa pätee sigma_uere_m = 1.0, joten kaksi lukua ovat tässä numeerisesti yhtä suuret — mutta sääntö on PDOP × UERE, ei ”sijainti = PDOP”. Jos UERE olisi 3 m, sijainti-sigma olisi ~3,2 m. (Katso sudenkuoppa lopussa.)
  • Kelloluvut (holdover, p95, integrity, security) tulevat mukaan, koska kiertoratapaketti kuljettaa läpikäynnin ajan myös kelloa; ne ovat opetusohjelman 2 aihe, eivät tämän. (Kentän security arvo on n/a (no attack), koska hyökkäystä ei ole määritetty.)

JSON-tiedoston geometrialohko sisältää taustalla olevat luvut:

"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
}

Missä satelliitit ovat? (palkinto)#

Geometria on hyvä, koska satelliitit ovat todella GPS-kuoressa. Todista se — vie niiden Maan mukana pyörivät sijainnit:

cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3

Kolme ensimmäistä satelliittia ensimmäisellä näytteenottoaskeleella, ECEF km:nä (SP3-tiedostossa on neljäs, kellosarake, joka on kirjoitettu ”ei arvoa” -merkinnällä 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

Otetaan PG01:n geosentrinen säde:

|r(PG01)| = sqrt(9771.575585^2 + 24612.128830^2 + 0.003744^2) = 26480.9 km

Kehäpäättelystä vapaa oraakkeli: onko tämä todella GPS-rata?#

Opetusohjelma, joka tarkistaa moottorin itseään vasten, ei todista mitään. Tässä on ulkoinen, kehäpäättelystä vapaa ankkuri jokaiselle yllä olevalle väitteelle.

1. Satelliitit ovat todellisessa GPS:n keskikorkean Maan kiertoradan (MEO) kuoressa. GPS:n nimellinen isoakselin puolikas on a = 26 560 km, korkeus ≈ 20 180 km keskimääräisen Maan säteen 6 378 km yläpuolella (IS-GPS-200, GPS:n rajapintamäärittely; GPS Standard Positioning Service (SPS) Performance Standard, US Department of Defense (DoD); Misra & Enge, Global Positioning System, 2nd ed.). PG01:n hetkellinen säde 26 480,9 km on muutaman sadan km:n päässä arvosta a — täsmälleen sen, minkä todellinen GPS:n eksentrisyys (~0,005–0,02) tuottaa. Testi tests/tutorials.rs::tutorial1_satellites_are_in_the_gps_meo_shell varmistaa ehdon 26000 km < |r(PG01)| < 27200 km tätä julkaistua arvoa a vasten, joka on Kshana-ohjelmiston ulkopuolinen.

2. Läpikäynnin pituus on yksi GPS-kierros. Keplerin kolmas laki antaa kiertoajan T = 2π√(a³/μ), kun a = 26,560 km ja μ = 398,600.4418 km³/s² (World Geodetic System 1984, WGS-84; National Imagery and Mapping Agency technical report NIMA TR8350.2): T = 43,078 s = 11.967 h, eli puoli sideerista vuorokautta. Skenaarion kesto 43 200 s (”~yksi GPS-kierros”) vastaa tätä alle 0,3 % tarkkuudella, ja GPS:n maanpintajälki toistuu joka sideerinen vuorokausi (kaksi kierrosta) IS-GPS-200:n mukaan.

3. Ratalaskennan sijainnit on validoitu, ne eivät ole vain sisäisesti johdonmukaisia. SGP4/SDP4-ratalaskuri, joka tuotti tämän ECEF-taulukon, vastaa kaikkia 666 AIAA:n (American Institute of Aeronautics and Astronautics) 2006-6753 -varmennusvektoria huonoimmassa tapauksessa 4,12 mm:n poikkeamalla (tests/sgp4_verification.rs, docs/SGP4-VALIDATION.md) ja täsmää riippumattomaan kirjastoon (crate) sgp4 alle mikrometrin tarkkuudella. Viemäsi taulukko on siis tarkistettu ulkoista vertailutoteutusta vasten, ei Kshana-ohjelmiston omaa aritmetiikkaa vasten.

Huomautus SP3-päivämääristä. SP3-aikakauden otsikossa on paikkamerkkikalenteripäivä (2000-01-01); ratalaskenta alkaa todellisuudessa kunkin TLE:n omasta ajanhetkestä (epookista) (2021). Lue taulukko ”ECEF-sijainnit ensimmäisellä näytteenottoaskeleella”, ei ”päivämääränä 1. tammikuuta 2000”.

Mitä testi lukitsee#

tests/tutorials.rs muuttaa jokaisen yllä olevan luvun CI-sopimukseksi:

  • tutorial1_orbit_headline_holds — best_pdop ≈ 1.071, best_position_sigma_m == best_pdop (koska sigma_uere_m = 1.0), samples_total == 361, ja yhteenveto sisältää 345/361.
  • tutorial1_satellites_are_in_the_gps_meo_shell — PG01:n säde on GPS-kuoren kaistalla, tarkistettuna julkaistua arvoa a = 26,560 km vasten.

Jos moottori joskus lakkaa tuottamasta todellista GPS-kuorta, koonti menee punaiselle.

Sudenkuopat ja yksiköt#

  • Sijainti-sigma on PDOP × UERE, ei PDOP. Ne ovat yhtä suuret vain siksi, että tässä pätee sigma_uere_m = 1.0. Muuta UERE-arvoa, niin ne erkanevat.
  • Ajoitusluvut ovat nanosekunteina, sijaintiluku metreinä. Älä sekoita niitä.
  • holdover_s on ruudukkoon kvantisoitu (alaraja aikaruudukon askeleella). Tässä läpikäynnissä käyttäjällä on käytännössä aina paikkaratkaisu, joten holdover on 0 s (ei katkoa, jonka yli ajautua) — se on hyvä tapaus.

Mihin seuraavaksi#

  • Kiristä tai löysää korkeuskulmamaskia (mask_deg) ja seuraa, miten saatavuus muuttuu — se on tason 2 harjoitus.
  • Vaihda tuore TLE-tilannekuva komennolla scripts/fetch_tles.sh (tason 2 ”käytä tuoretta dataa”).
  • Jatka kohtaan Opetusohjelma 2 — Kellon holdover, jossa GNSS-signaali otetaan pois ja aluksen kellon on pysyttävä omillaan.