Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breaking changes: runtime filtering of measurements and selection of processing for simultaneous measurements #379

Open
wants to merge 35 commits into
base: master
Choose a base branch
from

Conversation

ChristopherRabotin
Copy link
Member

@ChristopherRabotin ChristopherRabotin commented Nov 23, 2024

Summary

Orbit determination measurements are no longer their own type. Instead, they're all part of the Measurement structure which can store multiple simultaneous measurements in a HashMap. All tracking devices are represented as a BTreeMap. All tracking data is also represented as a BTreeMap.

This leads to significant code simplifications, along with runtime flexibility to enable or disable specific measurement types from specific ground stations (or trackers in general). This is an important requirement for operations where a specific measurement type by a given ground station may be unreliable.

Architectural Changes

  • OD Process no longer typed by the measurement type it should ingest.
  • OD Process now typed by the number of measurements to process at once.
  • Replacement of Range, Doppler, and RangeDoppler structures with a single Measurement structure.
  • Replacement of EstimateFrom with Sensitivity trait, which must be implemented for the tracking device.
  • Removal of DynamicTrackingArc
  • Replacement of TrackingArcSim with TrackingDataArc, and it is no longer typed.

Closes #333

New Features

  • Runtime filtering of measurements by trackers (to be tested)
  • Add Azimuth/Elevation measurement type

Improvements

Bug Fixes

No change

Testing and validation

  • Update LRO example with filter ingesting range and Doppler simultaneously
  • Add integration test with filter ingesting range and Doppler sequentially
  • Add integration test with filter ingesting range only
  • Add integration test with filter ingesting Doppler only
  • Add integration test with azimuth and elevation only, comparing the results to az+range, el+Doppler
  • Add integration test comparing sequential to simultaneous range and doppler
  • Add integration test showing all four measurement kinds together with two-way (to test that the code doesn't compute two way for az/el)

Documentation

This PR does not primarily deal with documentation changes.

@ChristopherRabotin ChristopherRabotin changed the title Feat/gh 333 od msr jit filtering Breaking changes: runtime filtering of measurements and selection of processing for simultaneous measurements Nov 23, 2024
Copy link

github-actions bot commented Nov 23, 2024

Visit the preview URL for this PR (updated for commit 0937fe7):

https://nyx-rustdoc--pr379-feat-gh-333-od-msr-j-jlj40tik.web.app

(expires Mon, 09 Dec 2024 06:46:48 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: d8e2a55934352d850c15d11866c39eb2d2e029be

@ChristopherRabotin
Copy link
Member Author

ChristopherRabotin commented Nov 23, 2024

Executing the LRO example without any range data led to Error: SingularNoiseRk error.

Fixed by setting the default measurement noise to identity.

Doppler and some range

To test, simply remove the range_km entry in the measurement_types of Goldstone and Canberra, and run the LRO example. When there is ranging data injected, we can see the uncertainty on the range to rise because the postfit values are larger than the prefits (which are zero), and similarly the Doppler uncertainty drops because in our model the velocity does not suffer from the oscillation we see in the range (refer to https://nyxspace.com/nyxspace/showcase/04_lro_od/ for details).

lro-range-resid

lro-doppler-resid

lro-resid-ratios

lro-chi-square

Azimuth and Doppler

lro-azmuth-resid
lro-doppler-resid

Copy link

codecov bot commented Nov 23, 2024

Codecov Report

Attention: Patch coverage is 79.08951% with 271 lines in your changes missing coverage. Please review.

Project coverage is 66.27%. Comparing base (923aca9) to head (0937fe7).
Report is 32 commits behind head on master.

Files with missing lines Patch % Lines
src/od/ground_station/mod.rs 71.65% 70 Missing ⚠️
src/od/msr/data_arc.rs 79.47% 62 Missing ⚠️
src/od/msr/sensitivity.rs 65.81% 40 Missing ⚠️
src/od/simulator/arc.rs 76.19% 25 Missing ⚠️
src/od/msr/measurement.rs 48.83% 22 Missing ⚠️
src/od/process/mod.rs 84.61% 16 Missing ⚠️
src/od/noise/mod.rs 0.00% 9 Missing ⚠️
src/od/ground_station/trk_device.rs 90.69% 8 Missing ⚠️
src/od/msr/types.rs 82.92% 7 Missing ⚠️
src/od/process/export.rs 85.71% 4 Missing ⚠️
... and 5 more
Additional details and impacted files
@@             Coverage Diff             @@
##           master     #379       +/-   ##
===========================================
- Coverage   76.29%   66.27%   -10.02%     
===========================================
  Files          84       88        +4     
  Lines       13332    13386       +54     
===========================================
- Hits        10172     8872     -1300     
- Misses       3160     4514     +1354     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Currently have a bug where there are two elevation residuals at the same time. Not sure what is happening there.
With the code on master, the prefits are within the measurement noise bounds and running with range+doppler simultaneously or sequentially leads to very similar results.
Azimuth error is higher than elevation, which is
higher than range, and which is higher than Doppler.

Will try to improve
Residual ratios are still too optimistic as a denominator.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
1 participant