Hi team,
I am having some issues with TLE-based orbit determination and was hoping you may be able to help.
I am trying to fit a TLE to a set of measurements of a GEO spacecraft using the BatchLeastSquares estimator, but in a scenario where I only have an initial state vector to begin the OD rather than a prior TLE. In this case, I am using the TLEGenerationAlgorithm generate method to create an initial guess TLE to begin the OD. I have found that the FixedPointTLEGenerationAlgorithm often fails on the osc2mean step, so I switched to using the LeastSquaresTLEGenerationAlgorithm and this seems to work more consistently to generate the initial TLE.
With this in mind, for the BatchLeastSquares estimator itself I have configured the TLEPropagatorBuilder to also use the LeastSquaresTLEGenerationAlgorithm. However, once the OD run has begun, it will frequently fail with an ‘org.orekit.errors.OrekitException: unable to compute TLE mean parameters after 101 iterations’ error. This error often occurs on the first iteration of the BLS estimator, suggesting that something is incorrect with the initial TLE, but it can also occur after several iterations.
Looking into the error stack trace (see below), it seems that the Batch Least Squares estimator is still using the FixedPointTLEGenerationAlgorithm somewhere behind the scenes, even though the TLEPropagatorBuilder was set up to use the LeastSquaresTLEGenerationAlgorithm.
I have checked the initial TLE is valid and can be propagated with the TLEPropagator, as well as using the same measurement set and a numerical propagator to fit a state vector and this works without issue, so the measurements also seem to be valid.
Do you have any ideas of what may cause this error to occur within the estimator and if there is any way to avoid it? Many thanks in advance.
org.orekit.errors.OrekitException: unable to compute TLE mean parameters after 101 iterations
at org.orekit.propagation.conversion.osc2mean.FixedPointConverter.convertToMean(FixedPointConverter.java:335)
at org.orekit.propagation.analytical.tle.generation.FixedPointTleGenerationAlgorithm.generate(FixedPointTleGenerationAlgorithm.java:134)
at org.orekit.propagation.analytical.tle.TLEGradientConverter.getPropagator(TLEGradientConverter.java:93)
at org.orekit.propagation.analytical.tle.TLEGradientConverter.getPropagator(TLEGradientConverter.java:35)
at org.orekit.propagation.analytical.AbstractAnalyticalMatricesHarvester.setReferenceState(AbstractAnalyticalMatricesHarvester.java:167)
at org.orekit.propagation.analytical.AbstractAnalyticalMatricesHarvester.updateDerivativesIfNeeded(AbstractAnalyticalMatricesHarvester.java:229)
at org.orekit.propagation.analytical.AbstractAnalyticalMatricesHarvester.getAdditionalData(AbstractAnalyticalMatricesHarvester.java:111)
at org.orekit.propagation.analytical.AbstractAnalyticalMatricesHarvester.getAdditionalData(AbstractAnalyticalMatricesHarvester.java:47)
at org.orekit.propagation.AdditionalDataProvider.update(AdditionalDataProvider.java:135)
at org.orekit.propagation.AbstractPropagator.updateAdditionalData(AbstractPropagator.java:249)
at org.orekit.propagation.analytical.AbstractAnalyticalPropagator.propagate(AbstractAnalyticalPropagator.java:135)
at org.orekit.propagation.PropagatorsParallelizer.propagate(PropagatorsParallelizer.java:157)
at org.orekit.estimation.leastsquares.AbstractBatchLSModel.value(AbstractBatchLSModel.java:299)
at org.hipparchus.optim.nonlinear.vector.leastsquares.LeastSquaresFactory$LocalLeastSquaresProblem.evaluate(LeastSquaresFactory.java:440)
at org.orekit.estimation.leastsquares.BatchLSEstimator$TappedLSProblem.evaluate(BatchLSEstimator.java:645)
at org.hipparchus.optim.nonlinear.vector.leastsquares.LevenbergMarquardtOptimizer.optimize(LevenbergMarquardtOptimizer.java:446)
at org.orekit.estimation.leastsquares.BatchLSEstimator.estimate(BatchLSEstimator.java:459)