Перевірка 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)) — це дія супровідника, яка відстежується окремо в дорожній карті; цей документ є внутрішньорепозиторним записом, на який такі подання посилалися б.