Estimation with ParameterDriver

Hello,

I am trying to do orbit determination using the KalmanEstimator provided by Orekit. My objective is to estimate the orbit (the 6 orbital parameters) but also the drag coefficient of my satellite.
To do so, I select the parameterDriver “drag coefficient” of my numercialPropagatorBuilder as “true”. Then, I create my KalmanEstimatorBuilder using this numericalPropagatorBuilder. Finaly, I get the value of the drag coefficient after each estimation step.

// Drag force
double dragCoef = 1000.; //the dragCoeff used to generate the measures is equal to 2.2
IsotropicDrag dragModel = new IsotropicDrag(crossSectionMass, dragCoef);
DragForce dragForce = new DragForce(constants.atmosphere, dragModel);
numericalPropagatorBuilder.addForceModel(dragForce);
    	
// Parameter driver
ParameterDriver dragDriver = numericalPropagatorBuilder.getPropagationParametersDrivers().findByName("drag coefficient");
dragDriver.setSelected(true);

and :

for(ObservedMeasurement<?> measure : measurementsSetsList.get(0)) {
  Propagator[] propagatorEstimated = kalmanEstimator.estimationStep(measure);
  ParameterDriversList propagatorParameters = kalmanEstimator.getPropagationParametersDrivers(true);
  List<ParameterDriver> list = new ArrayList<>(propagatorParameters.getDrivers());
  for(ParameterDriver driver : list) {
    if (driver.getName().equals("drag coefficient")) {
      System.out.println(driver.getValue());
    }
}

However, it seems that the value of the drag coefficient is not estimated by the filter, as its value doesn’t change at all from its initial value, even when I set it with an aberrant value.

I suppose I made a mistake using the ParameterDriver class but I really don’t see where…

Thanks in advance for your help!

Paul

Hi @paul2

Welcome to the Orekit forum!

It’s just a test, could you try:

                DragForce dragForce = new DragForce(constants.atmosphere, dragModel);
                for (final ParameterDriver driver : dragForce.getParametersDrivers()) {
                    if (driver.getName().equals(DragSensitive.DRAG_COEFFICIENT)) {
                        driver.setSelected(true);
                    }
                }
               numericalPropagatorBuilder.addForceModel(dragForce);

Regards,
Bryan

Thank you for your quick answer!
I tried to use your code but it didn’t change, the value of the drag coefficient is always equal to its initial value.
Regards,
paul

Hi @paul2,

What is your initial orbit ?

Could you send us a runnable test case ?

Thanks,
Maxime

Hi,
For my initial orbit, I am using the ISS orbit :

    	double i = 51.6416*Math.PI/180;
    	double raan = 247.4627*Math.PI/180;
    	double e = 0.0006703;
    	double pa = 130.5360*Math.PI/180;
    	double anomaly = 61.6196828895407;
    	double rev_day = 15.72125391;
    	double T = 3600*24/rev_day;
    	double a = Math.cbrt(Math.pow(T, 2)*mu/(4*Math.pow(Math.PI,2)));

Please find a runnable case :
test_OD.java (9.6 KB)

Regards,
Paul

Hi everyone !

It seems that I have exactly the same problem !

I am performing an OD with a UKF, during which I would like the drag coefficient to be estimated.

For the measurements, I am using a tdm file with range, range rate ad AzEl measurements, which were generated using a drag coefficient of 2.20.

The timespan of the file is 1 month, and to initialize the UKF, I use a Least Square estimator, to which I give the first 3 days of measurements. In the begining, I set the Drag coefficient to 7.00 : the LS estimator finds 2.25, but then, the UKF keeps that value and doesn’t change it, causing the OD to diverge …

So, have you found any solution to this issue ?

Thank you very much for your help ! :smiley:

Hi @AlexisPrz

That’s related to the following issue: Improve estimation of propagation and measurement parameters with Unscented Kalman Filter (#1036) · Issues · Orekit / Orekit · GitLab

Best regards,
Bryan