Skip to content

v0.6.0

@neilberkman neilberkman tagged this 08 Apr 02:01
Drops the `sgp4 = "2"` dependency in `native/orbis_nif/` and replaces
both call sites with our own pure-Rust SGP4 port shipped in
`astrodynamics 0.6.2` — bit-exact to non-FMA Vallado at 0 ULP across
the canonical 33-satellite verification corpus.

Both call sites use AFSPC opsmode to preserve compatibility with the
historical orbis behavior (the third-party crate's
`_afspc_compatibility_mode` functions). The Skyfield reference values
in oracle_test.exs were calibrated to AFSPC, so the 1mm tolerance
holds without recalibration.

Changes:
- propagation.rs: rewritten to build an `ElementSet`, construct a
  `Satellite::from_elements_with_opsmode(.., Afspc)`, then call
  `propagate_jd` with the target UTC converted to a split JulianDate.
  Going through propagate_jd lets the satrec subtract its own *cached*
  exact epoch internally, eliminating the precision drift that would
  otherwise come from computing the epoch JD a second time on the
  caller side.
- conjunction.rs: rewritten to use `Satellite::from_tle_with_opsmode`
  + `Satellite::epoch_jd()` for the epoch-offset computation. Same
  golden-section refinement loop, just backed by our propagator.
- mix.exs: bumps the wrapper Hex package dep to `~> 0.6.0` (matching
  the new astrodynamics_native release) and bumps Orbis itself to
  0.6.0.

Verified with `mix test --include skyfield_parity`: 184 tests,
0 failures.
Assets 2
Loading