Use of Kalman filters in the orbit determination process

I have been using Orekit’s laser orbit determination tutorial which uses least squares.

I would like to know what modifications would have to be implemented to use the Kalman procedure. Could someone help me to apply this technique?

The tutorial mentioned use this commands:

from org.orekit.estimation.leastsquares import BatchLSEstimator
estimator = BatchLSEstimator(optimizer, propagatorBuilder)

I am not sure what modifications should be implemented.
Thanks in advance

Hello @Msanpie,

In the Orekit tutorials Java project there is a package estimation where you can find implementations of both batch least-square and Kalman orbit determinations.

In particular, the class estimation.common.AbstractOrbitDetermination contains two methods:

  • run : Batch least-square orbit determination method
  • runKalman: Kalman orbit determination

Although it is written in Java, the second method should help you set up a Kalman filter.
Both methods use an input file written in Yaml, you can find the file used for the Kalman OD in src/main/resources/KalmanOrbitDetermination.yaml.
At the end of this file you will find the main specificity of the Kalman filter: it needs in input an initial covariance matrix and a process noise matrix.

The equivalent for Kalman would be (in Java):

KalmanEstimatorBuilder kalmanBuilder = new KalmanEstimatorBuilder().
                            addPropagationConfiguration(propagatorBuilder, new ConstantProcessNoise(initialP, Q));

Where initialP is your initial covariance matrix and Q the process noise matrix (I suggest you set this one to a zero matrix to begin with) mentioned earlier.
Setting up these matrices is done and explained in the tutorial mentioned at the top of my answer.

One of the main difference of the Kalman OD with the batch LS OD is that you will get an estimate of the orbital state for each measurement. To get this estimate, we generally use the KalmanObserver interface.
In the tutorials, you will find an implementation of this interface: the KalmanOrbitDeterminationObserver class; that you could translate in Python and adapt to your own needs.

I hope this will help you getting started,