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

Merged
merged 39 commits into from
Dec 8, 2024

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 range+doppler+azimuth+elevation in that order, and 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)
  • Remove Chi square plot and update LRO documentation on website.

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 1ec99a9):

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

(expires Sun, 15 Dec 2024 15:32:42 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 78.60922% with 283 lines in your changes missing coverage. Please review.

Project coverage is 66.21%. Comparing base (923aca9) to head (1ec99a9).
Report is 74 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 80.35% 22 Missing ⚠️
src/od/ground_station/trk_device.rs 84.94% 14 Missing ⚠️
src/od/noise/mod.rs 0.00% 9 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.21%   -10.09%     
===========================================
  Files          84       88        +4     
  Lines       13332    13406       +74     
===========================================
- Hits        10172     8877     -1295     
- Misses       3160     4529     +1369     

☔ 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.
…tracker noises. Add sequential OD struct. Add error logs for incorrect filter config
@ChristopherRabotin ChristopherRabotin merged commit 16c4448 into master Dec 8, 2024
8 of 9 checks passed
@ChristopherRabotin ChristopherRabotin deleted the feat/gh-333-od-msr-jit-filtering branch December 8, 2024 21:48
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