Class KalmanEstimator


  • public class KalmanEstimator
    extends Object
    Implementation of a Kalman filter to perform orbit determination.

    The filter uses a NumericalPropagatorBuilder to initialize its reference trajectory NumericalPropagator.

    The estimated parameters are driven by ParameterDriver objects. They are of 3 different types:

    1. Orbital parameters:The position and velocity of the spacecraft, or, more generally, its orbit.
      These parameters are retrieved from the reference trajectory propagator builder when the filter is initialized.
    2. Propagation parameters: Some parameters modelling physical processes (SRP or drag coefficients etc...).
      They are also retrieved from the propagator builder during the initialization phase.
    3. Measurements parameters: Parameters related to measurements (station biases, positions etc...).
      They are passed down to the filter in its constructor.

    The total number of estimated parameters is m, the size of the state vector.

    The Kalman filter implementation used is provided by the underlying mathematical library Hipparchus. All the variables seen by Hipparchus (states, covariances, measurement matrices...) are normalized using a specific scale for each estimated parameters or standard deviation noise for each measurement components.

    A KalmanEstimator object is built using the build method of a KalmanEstimatorBuilder.

    Since:
    9.2
    Author:
    Romain Gerbaud, Maxime Journot, Luc Maisonobe
    • Method Detail

      • setObserver

        public void setObserver​(KalmanObserver observer)
        Set the observer.
        Parameters:
        observer - the observer
      • getCurrentMeasurementNumber

        public int getCurrentMeasurementNumber()
        Get the current measurement number.
        Returns:
        current measurement number
      • getCurrentDate

        public AbsoluteDate getCurrentDate()
        Get the current date.
        Returns:
        current date
      • getPhysicalEstimatedState

        public org.hipparchus.linear.RealVector getPhysicalEstimatedState()
        Get the "physical" estimated state (i.e. not normalized)
        Returns:
        the "physical" estimated state
      • getPhysicalEstimatedCovarianceMatrix

        public org.hipparchus.linear.RealMatrix getPhysicalEstimatedCovarianceMatrix()
        Get the "physical" estimated covariance matrix (i.e. not normalized)
        Returns:
        the "physical" estimated covariance matrix
      • getOrbitalParametersDrivers

        public ParameterDriversList getOrbitalParametersDrivers​(boolean estimatedOnly)
        Get the orbital parameters supported by this estimator.

        If there are more than one propagator builder, then the names of the drivers have an index marker in square brackets appended to them in order to distinguish the various orbits. So for example with one builder generating Keplerian orbits the names would be simply "a", "e", "i"... but if there are several builders the names would be "a[0]", "e[0]", "i[0]"..."a[1]", "e[1]", "i[1]"...

        Parameters:
        estimatedOnly - if true, only estimated parameters are returned
        Returns:
        orbital parameters supported by this estimator
      • getPropagationParametersDrivers

        public ParameterDriversList getPropagationParametersDrivers​(boolean estimatedOnly)
        Get the propagator parameters supported by this estimator.
        Parameters:
        estimatedOnly - if true, only estimated parameters are returned
        Returns:
        propagator parameters supported by this estimator
      • getEstimatedMeasurementsParameters

        public ParameterDriversList getEstimatedMeasurementsParameters()
        Get the list of estimated measurements parameters.
        Returns:
        the list of estimated measurements parameters
      • estimationStep

        public NumericalPropagator[] estimationStep​(ObservedMeasurement<?> observedMeasurement)
        Process a single measurement.

        Update the filter with the new measurement by calling the estimate method.

        Parameters:
        observedMeasurement - the measurement to process
        Returns:
        estimated propagators
      • processMeasurements

        public NumericalPropagator[] processMeasurements​(Iterable<ObservedMeasurement<?>> observedMeasurements)
        Process several measurements.
        Parameters:
        observedMeasurements - the measurements to process in chronologically sorted order
        Returns:
        estimated propagators