Sprawdzenie SGP4/SDP4 względem wzorca społeczności
Propagator orbit Kshana jest sprawdzony względem kanonicznego wzorca społeczności dla SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): wektorów weryfikacyjnych opublikowanych z Vallado et al., „Revisiting Spacetrack Report #3” (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), rozpowszechnianych jako SGP4-VER.TLE (testowe TLE (zestawy elementów dwuwierszowych)) i tcppver.out (oczekiwany stan TEME (true equator, mean equinox) w każdej chwili). Jest to ten sam wzorzec, względem którego sprawdzają się publiczne implementacje w C++/Pythonie/MATLAB-ie, więc zbieżność wyników tutaj oznacza zbieżność z de facto standardem.
Wynik#
| Wielkość | Wartość |
|---|---|
| Porównane stany wzorcowe | 666 (wszystkie wiersze w tcppver.out, przypięte w teście) |
| Najgorszy błąd pozycji | 4,12 mm (4.120e-6 km, satelita 23333; < 2e-5 km tolerancji) |
| Najgorszy błąd prędkości | 1.85e-9 km/s (satelita 23333; < 1e-6 km/s tolerancji) |
| Objęte przypadki | SGP4 dla bliskiej Ziemi, SDP4 dla głębokiego kosmosu (księżycowo-słoneczne + rezonans 12 h/24 h) oraz celowe przypadki kodów błędów |
Przypadki głębokiego kosmosu i rezonansowe mają szczególne znaczenie dla tego projektu: satelity GNSS (globalnego systemu nawigacji satelitarnej) krążą po orbitach ~12 h, które są orbitami głębokiego kosmosu i rezonansowymi, czego nie odtworzy model dwóch ciał + wiekowy J2, a SGP4/SDP4 potrafi.
Metoda#
- Implementacja (
src/sgp4.rs) to pozbawiony zależności port Rust algorytmu Vallado z domeny publicznej; epoki liczone są w dniach od 1950, używany jest trybimproved(nieafspc), a stałe grawitacyjne WGS-72 (WGS: World Geodetic System) są stosowane tak, jak określa wzorzec. - Test (
tests/sgp4_verification.rs) przetwarza dołączone pliki wzorcoweSGP4-VER.TLEitcppver.out(tests/fixtures/sgp4/), propaguje każdego satelitę testowego do każdej chwili odniesienia i stwierdza, że pozycja i prędkość TEME zgadzają się w granicach powyższych tolerancji. Liczba porównanych wierszy jest przypięta dokładnie na 666, aby regresja pliku wzorcowego lub pomijania nie mogła po cichu zmniejszyć pokrycia.
Odtwórz to#
cargo test --test sgp4_verification -- --nocapture
Test wypisuje liczbę porównanych wierszy oraz najgorsze błędy pozycji i prędkości. Pliki wzorcowe są zatwierdzone w repozytorium, więc sprawdzenie jest w pełni offline i deterministyczne.
Niezależne sprawdzenie krzyżowe względem crate sgp4#
Zbieżność z opublikowanym wzorcem dowodzi poprawności względem tabeli. Aby dowieść też poprawności względem niezależnej implementacji, tests/sgp4_crate_comparison.rs uruchamia powszechnie używaną niezależną bibliotekę SGP4 w Rust, crate sgp4 (neuromorphicsystems/sgp4, wersja 2,4), na tych samych 666 wektorach AIAA i porównuje obie bazy kodu bezpośrednio. Obie są sterowane modelem grawitacji WGS72 (World Geodetic System 1972), w którym zdefiniowano wektory (domyślne from_elements tego crate używa WGS84 (World Geodetic System 1984), co różni się od wzorca WGS72 o ~km: to wybór modelowania, ujawniony uczciwie, a nie błąd).
| Reżim | kshana ↔ wzorzec | crate ↔ wzorzec | kshana ↔ crate |
|---|---|---|---|
| bliska Ziemi (LEO/MEO (LEO: niska orbita okołoziemska; MEO: średnia orbita okołoziemska)) | 7.3e-9 km | 7.3e-9 km | 4.4e-10 km |
| głęboki kosmos (nierezonansowe) | 4.1e-6 km | 2.1e-7 km | 4.1e-6 km |
| rezonans głębokiego kosmosu (półdobowy) | 8.1e-9 km | 7.7e-9 km | 2.2e-9 km |
| rezonans głębokiego kosmosu (1-dniowy) | 8.2e-9 km | 7.8e-9 km | 2.2e-9 km |
Dwie niezależne implementacje zgadzają się z dokładnością submikronową na orbitach bliskich Ziemi i rezonansowych oraz do 4,12 mm w najgorszym przypadku we wszystkich reżimach: to ten sam 4,12 mm, który jest własnym odchyleniem Kshana od wzorca, czyli rozbieżność jest tym jednym przypadkiem głębokiego kosmosu, przy czym crate leży między Kshana a tabelą. Pełna tabela (z liczbą wierszy dla każdego reżimu i czterema patologicznymi przypadkami, które crate odrzuca przy konstrukcji) jest zatwierdzona w tests/fixtures/sgp4_comparison.md i odtwarzana przez KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.
Stan „publikacji” tego wyniku#
Sama walidacja krzyżowa jest ukończona i znajduje się w repozytorium. Przesłanie wyniku do zewnętrznych miejsc (katalogu społeczności, krótkiej noty, zarchiwizowanego pod DOI (DOI: cyfrowy identyfikator obiektu) zapisu) jest działaniem opiekuna, śledzonym osobno w planie rozwoju; ten dokument to zapis w repozytorium, do którego te zgłoszenia by odsyłały.