Tłumaczenie maszynowe, niezweryfikowane przez osobę, dla której polski jest językiem ojczystym. Wzorcem jest wersja angielska.

OrbityEdytuj na GitHubieŹródło: docs/SGP4-VALIDATION.md

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 tryb improved (nie afspc), 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 wzorcowe SGP4-VER.TLE i tcppver.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.