Машинний переклад, не перевірений носієм мови. Еталоном є англійська версія.

ОрбітиРедагувати на GitHubДжерело: docs/SGP4-VALIDATION.md

Перевірка SGP4/SDP4 за еталоном спільноти

Орбітальний пропагатор Kshana перевіряється за канонічним еталоном спільноти для SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): верифікаційними векторами, опублікованими разом зі статтею Vallado та ін. «Revisiting Spacetrack Report #3» (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), які розповсюджуються як SGP4-VER.TLE (тестові TLE (двострокові набори елементів)) і tcppver.out (очікуваний стан у системі TEME (true equator, mean equinox) на кожен момент часу). Це той самий еталон, за яким перевіряються публічні реалізації на C++/Python/MATLAB, тож збіг тут означає збіг із фактичним стандартом.

Результат#

Величина Значення
Порівняні еталонні стани 666 (усі рядки в tcppver.out, зафіксовано в тесті)
Найбільша похибка положення 4,12 mm (4.120e-6 km, супутник 23333; менше за допуск 2e-5 km)
Найбільша похибка швидкості 1.85e-9 km/s (супутник 23333; менше за допуск 1e-6 km/s)
Охоплені випадки навколоземний SGP4, далекокосмічний SDP4 (місячно-сонячні збурення + резонанс 12 h/24 h) і навмисні випадки з кодами помилок

Далекокосмічні та резонансні випадки важливі саме для цього проєкту: супутники GNSS (глобальна навігаційна супутникова система) рухаються орбітами періодом ~12 h, які є далекокосмічними та резонансними, чого модель двох тіл із вековим J2 відтворити не може, а SGP4/SDP4 може.

Метод#

  • Реалізація (src/sgp4.rs) — це порт публічного алгоритму Vallado на Rust без залежностей; епохи обробляються як кількість діб від 1950 року, використовується режим improved (а не afspc), а гравітаційні сталі WGS-72 (WGS: World Geodetic System) застосовуються так, як визначає еталон.
  • Тест (tests/sgp4_verification.rs) розбирає включені до репозиторію фікстури SGP4-VER.TLE і tcppver.out (tests/fixtures/sgp4/), пропагує кожен тестовий супутник на кожен еталонний момент часу та перевіряє, що положення й швидкість у TEME збігаються в межах наведених вище допусків. Кількість порівняних рядків зафіксовано рівно на 666, щоб регресія фікстури чи поведінки пропуску не могла непомітно зменшити покриття.

Відтворіть це#

cargo test --test sgp4_verification -- --nocapture

Тест виводить кількість порівняних рядків і найгірші похибки положення та швидкості. Фікстури закомічено в репозиторій, тому перевірка повністю офлайнова й детермінована.

Незалежна перехресна перевірка за крейтом sgp4#

Збіг з опублікованим еталоном доводить правильність щодо таблиці. Щоб довести правильність ще й щодо незалежної реалізації, tests/sgp4_crate_comparison.rs запускає широко вживану незалежну бібліотеку SGP4 на Rust — крейт sgp4 (neuromorphicsystems/sgp4, версія 2,4) — на тих самих 666 векторах AIAA і безпосередньо порівнює дві кодові бази. Обидві працюють із гравітаційною моделлю WGS72 (World Geodetic System 1972), у якій визначено вектори (типове значення from_elements у крейті використовує WGS84 (World Geodetic System 1984), що відрізняється від еталонної WGS72 приблизно на кілометри — це вибір моделювання, про який сказано відверто, а не помилка).

Режим kshana ↔ еталон крейт ↔ еталон kshana ↔ крейт
навколоземний (LEO/MEO (LEO: низька навколоземна орбіта; MEO: середня навколоземна орбіта)) 7.3e-9 km 7.3e-9 km 4.4e-10 km
далекокосмічний (нерезонансний) 4.1e-6 km 2.1e-7 km 4.1e-6 km
далекокосмічний резонанс (півдоби) 8.1e-9 km 7.7e-9 km 2.2e-9 km
далекокосмічний резонанс (1 доба) 8.2e-9 km 7.8e-9 km 2.2e-9 km

Дві незалежні реалізації збігаються з субмікронною точністю на навколоземних і резонансних орбітах та в межах 4,12 mm у найгіршому випадку для всіх режимів — це ті самі 4,12 mm, що становлять власне відхилення Kshana від еталона, тобто розбіжність і є тим одним далекокосмічним випадком, а крейт розташований між Kshana і таблицею. Повна таблиця (з кількістю рядків для кожного режиму та чотирма патологічними випадками, які крейт відхиляє на етапі побудови) закомічена в tests/fixtures/sgp4_comparison.md і перегенеровується через KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.

Стан «публікації» цього результату#

Сама перехресна перевірка завершена й міститься в репозиторії. Подання результату до зовнішніх майданчиків (каталог спільноти, коротка нотатка, запис в архіві з DOI (DOI: digital object identifier)) — це дія супровідника, яка відстежується окремо в дорожній карті; цей документ є внутрішньорепозиторним записом, на який такі подання посилалися б.