Hello,
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
Manuel
Hello @Msanpie,
In the Orekit tutorials Java project there is a package estimation
where you can find implementations of both batch leastsquare and Kalman orbit determinations.
In particular, the class estimation.common.AbstractOrbitDetermination contains two methods:

run : Batch leastsquare 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,
Maxime