Validering af SGP4/SDP4 mod fællesskabets reference
Kshanas banepropagator er valideret mod fællesskabets kanoniske reference for SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): de verifikationsvektorer, der er offentliggjort sammen med Vallado et al., "Revisiting Spacetrack Report #3" (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribueret som SGP4-VER.TLE (test-TLE'erne (two-line element sets)) og tcppver.out (den forventede TEME (true equator, mean equinox)-tilstand ved hvert tidspunkt). Det er den samme reference, som de offentlige C++/Python/MATLAB-implementeringer valideres mod, så når resultaterne stemmer her, stemmer de med de facto-standarden.
Resultat#
| Størrelse | Værdi |
|---|---|
| Sammenlignede referencetilstande | 666 (alle rækker i tcppver.out, fastlåst i testen) |
| Største positionsfejl | 4,12 mm (4.120e-6 km, satellit 23333; < tolerance på 2e-5 km) |
| Største hastighedsfejl | 1.85e-9 km/s (satellit 23333; < tolerance på 1e-6 km/s) |
| Dækkede tilfælde | SGP4 for nær Jorden, SDP4 for dybt rum (lunisolar + 12 t/24 t resonans) og de bevidste fejlkodetilfælde |
Tilfældene for dybt rum og resonans betyder noget specifikt for dette projekt: GNSS (globalt navigationssatellitsystem)-satellitter befinder sig i baner på ~12 t, der er dybt rum og resonante, og som en to-legemers + J2-sekulær model ikke kan gengive — SGP4/SDP4 kan.
Metode#
- Implementeringen (
src/sgp4.rs) er en afhængighedsfri Rust-portering af Vallados algoritme i offentlig eje; epokehåndteringen er dage siden 1950, tilstandenimproved(ikkeafspc) bruges, og WGS-72 (WGS: World Geodetic System)-tyngdekonstanter anvendes, som referencen foreskriver. - Testen (
tests/sgp4_verification.rs) parser de medleverede fixturesSGP4-VER.TLEogtcppver.out(tests/fixtures/sgp4/), propagerer hver testsatellit til hvert referencetidspunkt og kontrollerer, at TEME-position og -hastighed stemmer inden for tolerancerne ovenfor. Antallet af sammenlignede rækker er fastlåst til præcis 666, så en regression i en fixture eller i håndteringen af springover ikke stille kan mindske dækningen.
Reproducér det#
cargo test --test sgp4_verification -- --nocapture
Testen udskriver antallet af sammenlignede rækker og de værste fejl i position og hastighed. Fixtures er committet, så kontrollen er fuldt offline og deterministisk.
Uafhængig krydskontrol mod cratet sgp4#
At stemme med den offentliggjorte reference beviser korrekthed mod en tabel. For også at bevise korrekthed mod en uafhængig implementering kører tests/sgp4_crate_comparison.rs et udbredt, uafhængigt Rust-bibliotek til SGP4, cratet sgp4 (neuromorphicsystems/sgp4, version 2,4), over de samme 666 AIAA-vektorer og sammenligner de to kodebaser direkte. Begge køres med tyngdemodellen WGS72 (World Geodetic System 1972), som vektorerne er defineret i (cratets standard from_elements bruger WGS84 (World Geodetic System 1984), som afviger fra WGS72-referencen med ~km — et modelvalg, åbent anført, ikke en fejl).
| Område | kshana ↔ reference | crate ↔ reference | kshana ↔ crate |
|---|---|---|---|
| nær Jorden (LEO/MEO (LEO: lav jordbane; MEO: mellemhøj jordbane)) | 7.3e-9 km | 7.3e-9 km | 4.4e-10 km |
| dybt rum (ikke-resonant) | 4.1e-6 km | 2.1e-7 km | 4.1e-6 km |
| resonans i dybt rum (½-døgn) | 8.1e-9 km | 7.7e-9 km | 2.2e-9 km |
| resonans i dybt rum (1-døgn) | 8.2e-9 km | 7.8e-9 km | 2.2e-9 km |
To uafhængige implementeringer stemmer til under en mikrometer for baner nær Jorden og resonante baner og til 4,12 mm i værste fald på tværs af alle områder — de samme 4,12 mm, som er Kshanas egen afvigelse fra referencen, altså er uenigheden netop det ene tilfælde i dybt rum, hvor cratet ligger mellem Kshana og tabellen. Den fulde tabel (med antal rækker for hvert område og de fire patologiske tilfælde, som cratet afviser ved konstruktion) er committet i tests/fixtures/sgp4_comparison.md og regenereres via KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.
Status for "udgivelse" af dette resultat#
Selve krydsvalideringen er færdig og ligger i træet. At indsende resultatet til eksterne fora (et fællesskabskatalog, en kort note, en post arkiveret med DOI (DOI: digital object identifier)) er en handling for vedligeholderne, som følges separat i køreplanen; dette dokument er den optegnelse i repositoryet, som disse indsendelser ville pege på.