Establishment of different Kalman Filters (LKF, EKF, UKF, ESKF, BSEKF)

Hi guys,

After some weeks of suffering with Orekit I finally succeded to put in place a suitable simulator, some IOD methods, a Batch Least Square and a Kalman Filter. For the moment my propagator is just a Keplerian Propagator but I’ll put in place better propagators later.

For the moment I’m just looking for informations about the usage of the differents Kalman filter methods for OD in Orekit.

  • Is the Default Kalman estimator in Orekit a Extended Kalman Filter (EKF) ?
  • Are the other methods available easely in the library ? I’m thinking especially about Linearized Kalman Filter (LKF), Unscented Kalman Filter (UKF) and if possible Error-State Kalman Filter (ESKF) and Backward Smoothing Extended Kalman Filter (BSEKF).

Any information about that is welcomed because I did not found anything for the moment on the forum of documentation.

Also, I’d like to avoid to pass to numpy matrixes and vectors in order to implement manually those algorithms.

Thank you in advance !
AD

Hi @adelalla

Yes it is. Indeed, the KalmanODModel interface in Orekit implements the NonLinearProcess interface of Hipparchus. Furthermore, an ExtendedKalmanFilter is built in the Orekit’s KalmanEstimator constructor.

this.filter = new ExtendedKalmanFilter<>(decomposer, processModel, processModel.getEstimate());

Hipparchus library implements both the EKF and the LKF (see org.hipparchus.filtering.kalman). However, Orekit only considers the EKF of Hipparchus.

Hipparchus implements the mathematical point of view of the filter (i.e. matrix computations and orchestration of the different steps of a Kalman Filter). It also provides the different interfaces to build your own filter depending your application. Orekit is linked to the EKF of Hipparchus. It provides the physical point of view of the filter (i.e. state transition matrix, measurement matrix, etc.).

Therefore, if you want to add a new KF (e.g. UKF, etc.) you have to follow two steps. First, you have to add the new filter into Hipparchus following what has been done for the EKF and LKF. The architecture is very similar between the different Kalman filters (i.e. only 3 classes in Hipparchus for each filter: XXXEvolution.java, XXXProcess.java and XXXKalmanFilter.java). Finally, you have to implement the physical computations into Orekit by interfacing with Hippachus. For this second step, you can see what has been done for the EKF (see org.orekit.estimation.sequential).

Regards,
Bryan

1 Like

All right @bcazabonne, Thank you a lot for the clarification here !

I’m working on python that’s why I did take a look to the constructor of the KalmanODModel, I’ll try to do that next time !

It’s really intersting ! I’m still not sure to implement those Filter via the usage of Hipparchus & Orekit, I thing in a first time to implement them manually in my code with numpy. But It’s really interessing to have those informations for the following steps of my development !

Thank you again for your help :wink: :wink:
Regards,
AD