Tradução automática, não revista por um falante nativo. O inglês é a referência.

ÓrbitasEditar no GitHubFonte: docs/SGP4-VALIDATION.md

Validação do SGP4/SDP4 em relação à referência da comunidade

O propagador de órbita do Kshana é validado em relação à referência canônica da comunidade para SGP4/SDP4 (SGP4: Simplified General Perturbations 4; SDP4: Simplified Deep-space Perturbations 4): os vetores de verificação publicados com Vallado et al., "Revisiting Spacetrack Report #3" (AIAA (American Institute of Aeronautics and Astronautics) 2006-6753), distribuídos como SGP4-VER.TLE (os TLEs de teste (conjuntos de elementos de duas linhas)) e tcppver.out (o estado TEME (true equator, mean equinox) esperado em cada instante). Esta é a mesma referência com a qual as implementações públicas em C++/Python/MATLAB se validam; portanto, a concordância aqui é concordância com o padrão de fato.

Resultado#

Grandeza Valor
Estados de referência comparados 666 (todas as linhas em tcppver.out, fixadas no teste)
Pior erro de posição 4,12 mm (4.120e-6 km, satélite 23333; < 2e-5 km de tolerância)
Pior erro de velocidade 1.85e-9 km/s (satélite 23333; < 1e-6 km/s de tolerância)
Casos cobertos SGP4 de órbita próxima à Terra, SDP4 de espaço profundo (lunissolar + ressonância de 12 h/24 h) e os casos deliberados de código de erro

Os casos de espaço profundo e de ressonância importam especificamente para este projeto: os satélites GNSS (global navigation satellite system) ficam em órbitas de ~12 h que são de espaço profundo e ressonantes, o que um modelo de dois corpos + J2 secular não consegue reproduzir — o SGP4/SDP4 consegue.

Método#

  • A implementação (src/sgp4.rs) é uma portagem em Rust, sem dependências, do algoritmo de Vallado, de domínio público; o tratamento de época é em dias desde 1950, usa-se o modo improved (e não afspc), e as constantes gravitacionais do WGS-72 (WGS: World Geodetic System) são aplicadas como a referência especifica.
  • O teste (tests/sgp4_verification.rs) analisa as fixtures SGP4-VER.TLE e tcppver.out incorporadas ao repositório (tests/fixtures/sgp4/), propaga cada satélite de teste até cada instante de referência e verifica que a posição e a velocidade TEME coincidem dentro das tolerâncias acima. A contagem de linhas comparadas é fixada em exatamente 666, para que uma regressão na fixture ou no comportamento de omissão não possa reduzir a cobertura silenciosamente.

Reproduza#

cargo test --test sgp4_verification -- --nocapture

O teste imprime o número de linhas comparadas e os erros de posição e de velocidade no pior caso. As fixtures estão versionadas, de modo que a verificação é totalmente offline e determinística.

Verificação cruzada independente com o crate sgp4#

Coincidir com a referência publicada demonstra correção em relação a uma tabela. Para demonstrar também a correção em relação a uma implementação independente, tests/sgp4_crate_comparison.rs executa uma biblioteca SGP4 independente em Rust, amplamente usada, o crate sgp4 (neuromorphicsystems/sgp4, versão 2,4), sobre os mesmos 666 vetores da AIAA e compara as duas bases de código diretamente. Ambas são executadas com o modelo gravitacional WGS72 (World Geodetic System 1972) em que os vetores são definidos (o from_elements padrão do crate usa o WGS84 (World Geodetic System 1984), que difere da referência WGS72 em ~km — uma escolha de modelagem, exposta com honestidade, não um erro).

Regime kshana ↔ referência crate ↔ referência kshana ↔ crate
próximo à Terra (LEO/MEO (LEO: órbita baixa da Terra; MEO: órbita média da Terra)) 7.3e-9 km 7.3e-9 km 4.4e-10 km
espaço profundo (não ressonante) 4.1e-6 km 2.1e-7 km 4.1e-6 km
ressonância de espaço profundo (½ dia) 8.1e-9 km 7.7e-9 km 2.2e-9 km
ressonância de espaço profundo (1 dia) 8.2e-9 km 7.8e-9 km 2.2e-9 km

Duas implementações independentes concordam em nível submicrométrico em órbitas próximas à Terra e ressonantes e em 4,12 mm no pior caso em todos os regimes — os mesmos 4,12 mm que são o desvio do próprio Kshana em relação à referência, isto é, a discordância é esse único caso de espaço profundo, com o crate situando-se entre o Kshana e a tabela. A tabela completa (com as contagens de linhas por regime e os quatro casos patológicos que o crate rejeita na construção) está versionada em tests/fixtures/sgp4_comparison.md e é regenerada por meio de KSHANA_REGEN_FIXTURES=1 cargo test --test sgp4_crate_comparison.

Situação da "publicação" deste resultado#

A validação cruzada em si está concluída e incorporada ao repositório. Submeter o resultado a veículos externos (um catálogo da comunidade, uma nota breve, um registro arquivado com DOI (DOI: digital object identifier)) é uma ação dos mantenedores, acompanhada separadamente no roteiro; este documento é o registro dentro do repositório para o qual essas submissões apontariam.