Draft: Issue 1745 - Abstract out receiver type (satellite, ground station) from measurements

Removes dependency of measurement generation classes on whether the receiver of the measurement information is a satellite or a ground station. Addresses #1745.

Change summary:

  • Created abstract master class org.orekit.estimation.measurements.MeasurementObject to serve as master class for all observing objects (satellites and ground stations) and observed objects ( ObservableSatellite ). This object creates and holds the QuadraticClockModel as well as storing all ParameterDrivers for the MeasurementObject in an accessible list.
  • Altered ObservableSatellite to inherit from the master abstract class MeasurementObject
  • Created abstract child class ObservationObject to serve as the abstract parent class for all observing objects.
  • Created child classes of ObservationObject to hold satellite propagation data (ObservationSatellite) and groundpoint information (ObservationStation, formerly GroundStation).
  • Adapted all measurement generation classes to accept one of the ObservationObject child classes as an input and moved the generation of the CommonParametrsWIthoutDerivatives and CommonParametersWithDerivatives values from the measurement classes to the receiver classes.
  • Removed GroundStationCommonParameters and OnBoardCommonParameters classes and modified all measurement classes to simply accept and use CommonParametersWithDerivatives and CommonParametersWithoutDerivatives
  • Modified the IonosphericModel classes to take in a OneAxisEllipsoid input, so that the use of the ionospheric models could be made agnostic w.r.t. whether the observation object was in space or on the ground.
  • Updated unit tests to comply with new measurement format (some measurements that previously only accepted GroundStation values as inputs had to be upcast in places because they depend on being on the ground to calculate ionospheric and trophospheric measurements)
  • Verified correct functioning of all existing unit tests.
  • Added function to FDOA measurement class to allow the user to get the centre frequency value.

Notes:

  • Certain measurement classes still receiver ObservationStation or ObservationSatellite inputs specifically, because the measurement types can only be made from ground stations or satellites, respectively
    • ObservationStation classes:
      • AngularAzEl
      • AngularRaDec
    • ObservationSatellite classes
      • OneWayGNSSPhase
      • OneWayGNSSRange
      • OneWayGNSSRangeRate
    • (Note: the GNSS measurement classes are functionally repetitions of the Phase, Range and RangeRate measurement classes, and therefore should possibly be deprecated in future versions of Orekit)
  • Several intermediary abstraction classes between the parent AbstractMeasurement and the relative child classes have been removed because their interface values have been rendered unnecessary by the code changes. In some cases the functions previously handled by these classes moved to ObservationSatellite or ObservationStation; in others they devolved on the child measurement classes themselves (e.g. the twoWay value in Range and RangeRate).
  • The ionospheric modeling classes have all been modified to accept a generic ObservationObject, but the tropospheric modifiers have not. In order to handle this, the functions have been abstracted to accept the higher class, but warning checks have been added to the actual tropospheric delay functions to check that the input is an ObservationStation and not an ObservationSatellite
  • While the code of the ionospheric models has been updated to handle observer platform abstraction, the math has not been updated for the satellite-satellite case. That will get taken care of shortly.
  • Some function/variable names have been changed in the estimation.measurements classes to reflect the abstracting out of the measuring object type.

I believe the required modifications to the code base itself are done, and all existing unit tests have successfully passed. However, I still have to write unit tests to prove out the behavior of the space-based observers for classes that previously only took ground observers, and vice versa.

Edited by Brianna Aubin

Merge request reports

Loading