Getting the correct kalman estimate for orbit determination

Hi all,

I’m implementing a kalman filter for orbit determination using the Python wrapper. I have managed to set everything up, but wanted some clarification a few things. I’m having trouble interpreting some of the results, and really wanted to make sure I’m using it correctly.

Kalman Observer: would it be correct to say that the use of this class is solely so that a user can access the KalmanModel and get the various states, matrices etc?

On the other hand, the Propagator which is returned when you run KalmanEstimator.estimationStep(): What does this propagator actually signify? Is it a corrected trajectory based on only the latest kalman estimate?

The doubt: Based on my understanding of the propagator, if we have a measurement at time “t”, and the we get an updated propagator “prop” when passing this measurement in estimationStep(), then:

  • KalmanModel.getCorrectedMeasurement().getEstimatedValue(); and
  • prop.propagate(t).getPVCoordinates()

Should give the exact same state (or PV), which is the latest Kalman estimate? However, when I use both methods, I get different results. Both converge, but their behavior in the start varies quite a bit, with the getEstimatedValue() value shooting up before settling down.

Based on the documentation, I know that the first way is the correct way to get the latest kalman estimate. I just wanted to understand how the updated propagator is different, and why exactly it would be wrong to use it to get a kalman estimate. Am I missing something?

My last question is on a related note: what does getPredictedMeasurement() perform? What is the difference in predicted/corrected in this case, and how do they both differ from using the propagator itself?

Thanks in advance for any help.

Sincerely,
Spike

Hi @spike,

Welcome to the Orekit forum! :slight_smile:

The Kalman observer is called after the processing of the measurement. In other words, it is called just after the correction step of the Kalman Filter.

As you said, it provides the KalmanModel to enable the user accessing different parameters and values like the predicted and corrected orbital parameters, the corrected covariance matrix, the state transition matrix, etc. It is a very useful object to print informations during the estimation process, like the ones previously enumerated.

You can find examples of implementations of the KalmanObserver in the tutorials. For instance, you can look at the KalmanOrbitDeterminationObserver.java. Another example is available here to log the statistics of the measurement residuals after processing all the measurements.

It is a ready-to-use orbit propagator built with the corrected state of the latest kalman estimate. The force model used to define this orbit propagator are the same than the ones used to initialize the Kalman filter. The only difference is if you estimate propagation parameters like the drag coefficient or the satellite’s reflection coefficient. Indeed, the propagator returned by the estimationStep() method will take into account the estimated values of these parameters.

No, the results will be different. The estimation process of the Kalman filter is based on two step: a prediction step and a correction step, The prediction step is like an orbit propagation. However, the purpose of the correction step is the improve the knowledge of the orbital state using the measurement information. In other words, the correction step improve the predicted state using the measurement.

Also, please note that getCorrectedMeasurement().getEstimatedValue() will give you a PV only if your measurement is a PV measurement. If you have a range measurement, you will have only one value, which is the value of the corrected range measurement compute with the corrected state.

Let propagator be the orbit propagator returned by the estimationStep() method. You should have same results if you do propagator.getInitialState().getPVCoordinates() or KalmanModel.getCorrectedSpacecraftState()[0].getPVCoordinates() or KalmanModel.getCorrectedMeasurement().getEstimatedValue() (if your measurement is a PV measurement).

Interesting to verify.

The predicted measurement is the measurement estimated using the predicted state and the corrected measurement is the one estimated using the corrected state (taking into account the Kalman gain). Please find below the algorithm of the extended Kalman FIlter.

The method getPredictedMeasurement() gives the results of h(X_k|k-1) while getCorrectedMeasurement() gives the results of h(X_k|k) (not represented in the algorithm), where h() is the measurement model.

I hope that these answers will help you.

Best regards,
Bryan

2 Likes