Hi Suleyman
It might not be related to your problem but I would like to share just my experience working with the BLS orbit estimator.
I was comparing results from some TM GPS data, evaluating the orbit using Orekit BLS and GMAT BLS.
I implemented what discussed in this thread:
Anyhow, for big dataset of TM data (so I suppose it is your case), I was facing either really bad results, either your convergence issues.
I just realized that I was not adding any perturbations to the Numerical Propagator used to orbit estimation.
//Build numerical propagator
DormandPrince853IntegratorBuilder integratorBuilder = new DormandPrince853IntegratorBuilder(
minIntegrationStep, maxIntegrationStepM, positionTolerance);
NumericalPropagatorBuilder propagatorBuilder = new NumericalPropagatorBuilder(iodCartesian,
integratorBuilder,
PositionAngle.TRUE,
positionScale);
PerturbationModel.addGravityFieldPerturbation(propagatorBuilder);
PerturbationModel.addThirdBodyPerturbation(propagatorBuilder);
PerturbationModel.addOceanTidesPerturbation(propagatorBuilder);
where
public static void addGravityFieldPerturbation(NumericalPropagatorBuilder propagatorBuilder) {
//Add Gravity field
val provider = GravityFieldFactory.getNormalizedProvider(Constants.harmonicDegree, Constants.harmonicOrder);
val gravityFieldForce = new HolmesFeatherstoneAttractionModel(Constants.earthShapeIERS.getBodyFrame(), provider);
propagatorBuilder.addForceModel(gravityFieldForce);
}
public static void addThirdBodyPerturbation(NumericalPropagatorBuilder propagatorBuilder) {
// Third Bodies
ThirdBodyAttraction thirdBodyMoon = new ThirdBodyAttraction(CelestialBodyFactory.getMoon());
ThirdBodyAttraction thirdBodySun = new ThirdBodyAttraction(CelestialBodyFactory.getSun());
propagatorBuilder.addForceModel(thirdBodyMoon);
propagatorBuilder.addForceModel(thirdBodySun);
}
public static void addOceanTidesPerturbation(NumericalPropagatorBuilder propagatorBuilder) {
val provider = GravityFieldFactory.getNormalizedProvider(Constants.harmonicDegree, Constants.harmonicOrder);
val oceanTides = new OceanTides(Constants.earthShapeIERS.getBodyFrame(),
provider.getAe(), provider.getMu(), 1, 1, IERSConventions.IERS_2010,
TimeScalesFactory.getUT1(IERSConventions.IERS_2010, true));
propagatorBuilder.addForceModel(oceanTides);
}
Especially for longer window, I guess, without the correct perturbation model, the estimation fails as the numerical propagator cannot match the data (real) you have.
Could it make sense?
Alberto