Measurements provided to KalmanEstimator

Hello,
I have a question about the measurements provided to a KalmanEstimator. I have built a KalmanEstimator and understand how to use KalmanEstimator.estimationStep(observedMeasurement) with one measurement or KalmanEstimator.processMeasurements(observedMeasurements) with multiple measurements. My understanding is that if I provide measurements to the KalmanEstimator which are relevant to the PropagatorBuilders that I used to create the KalmanEstimatorBuilder which created the KalmanEstimator, these measurements will affect the Propagators which are produced by KalmanEstimator.estimationStep or KalmanEstimator.processMeasurements, BUT if I provide measurements which are NOT relevant to those PropagatorBuilders included in the KalmanEstimator (for instance, an AngularRaDec measurement in which the ObservableSatellite is not associated with any of the PropagatorBuilders in the KalmanEstimator), the Propagators produced by KalmanEstimator.estimationStep or KalmanEstimator.processMeasurements will just be the same Propagators as though no measurement was provided at all. Is this true?

If this is true, can you suggest a straightforward way to check whether a measurement involves an ObservableSatellite which is relevant to the KalmanEstimator or not? In other words, is there an easy way to check whether the ObservableSatellite in a measurement is the same ObservableSatellite associated with a PropagatorBuilder that was used to produce the KalmanEstimator via KalmanEstimatorBuilder.addPropagationConfiguration(PropagatorBuilder, CovarianceMatrixProvider)?

Thanks for any thoughts!

You will have to count by yourself the number of times you call addPropagationConfiguration and compare the index returned by the getPropagatorIndex() method from ObservableSatellite with this count. In fact, the index is really just the index in the list that was built progressively as you added each propagator configuration.

I guess I’m still a little confused. What if I use the constructor for ObservableSatellite as follows: ObservableSatellite(int propagatorIndex), where propagatorIndex is 9, but I actually have constructed no propagators at all?
Then, if I later create some propagators and add them to an estimator, is the ObservableSatellite I created above automatically associated with the tenth propagator that I have added to the estimator?
Thank you,
Erin

Hi @luc -
I thought I could try to better explain what I’m trying to do and get a feeling from you for whether or not Orekit can do what I’m trying to do.

What I would like to do is to use a KalmanEstimator to produce new estimates (propagators) at every time step to some horizon time. BUT I want to be able to change two features of the code during some of the time steps:

  1. I would like to be able to add maneuvers to some of the propagators at certain time steps, but I don’t see a way to edit the PropagatorBuilders that the KalmanEstimator is trying to estimate so that they include the maneuvers but still match the ObservableSatellites in the measurements produced by the measurement generator.
  2. I would like to be able to change certain parameters of the measurements produced by the measurement generator at certain time steps, for instance the sigma for an intersatellitesrange measurement, but I think the only way to do this is to create a new measurement generator. I can’t tell whether the measurements produced by a new measurement generator are still recognized as relevant to the propagators in the KalmanEstimator.

I have also tried creating a new KalmanEstimator at each time step and providing the new KalmanEstimator with a PropagatorBuilder based on the estimated propagators produced by the previous step’s KalmanEstimator, but this doesn’t seem to work either.
Do you think there is anything fundamental about the code that won’t allow me to do this kind of thing, or do you have a suggestion for how you would proceed?
Thank you,
Erin