public class SequentialBatchLSEstimator extends BatchLSEstimator
When an orbit has already been estimated and new measurements are given, it is not efficient to re-optimize the whole problem. Only considering the new measures while optimizing will neither give good results as the old measurements will not be taken into account. Thus, a sequential estimator is used to estimate the orbit, which uses the old results of the estimation and the new measurements.
In order to perform a sequential optimization, the user must configure a
SequentialGaussNewtonOptimizer
.
Depending if its input data are an empty LeastSquaresProblem.Evaluation
, a complete Evaluation
or an a priori state and covariance, different configuration are possible.
1. No input data from a previous estimation
Then, the SequentialBatchLSEstimator
can be used like a BatchLSEstimator
to perform the estimation. The user can initialize the SequentialGaussNewtonOptimizer
using the default constructor.
final SequentialGaussNewtonOptimizer optimizer = new SequentialGaussNewtonOptimizer();
By default, a QRDecomposer
is used as decomposition algorithm. In addition, normal
equations are not form. It is possible to update these two default configurations by using:
withDecomposer
method:
optimizer.withDecomposer(newDecomposer);
withFormNormalEquations
method:
optimizer.withFormNormalEquations(newFormNormalEquations);
2. Initialization using a previous Evalutation
In this situation, it is recommended to use the second constructor of the optimizer class.
final SequentialGaussNewtonOptimizer optimizer = new SequentialGaussNewtonOptimizer(decomposer,
formNormalEquations,
evaluation);
Using this constructor, the user can directly configure the MatrixDecomposer and set the flag for normal equations without calling the two previous presented methods.
Note: This constructor can also be used to perform the initialization of 1.
In this case, the Evaluation evaluation
is null
.
3. Initialization using an a priori estimated state and covariance
These situation is a classical satellite operation need. Indeed, a classical action is to use
the results of a previous orbit determination (estimated state and covariance) performed a day before,
to improve the initialization and the results of an orbit determination performed the current day.
In this situation, the user can initialize the SequentialGaussNewtonOptimizer
using the default constructor.
final SequentialGaussNewtonOptimizer optimizer = new SequentialGaussNewtonOptimizer();
The MatrixDecomposer and the flag about normal equations can again be updated using the two previous presented methods. The a priori state and covariance matrix can be set using:
withAPrioriData
method:
optimizer.withAPrioriData(aPrioriState, aPrioriCovariance);
Constructor and Description |
---|
SequentialBatchLSEstimator(SequentialGaussNewtonOptimizer sequentialOptimizer,
OrbitDeterminationPropagatorBuilder... propagatorBuilder)
Simple constructor.
|
addMeasurement, estimate, getEvaluationsCount, getIterationsCount, getLastEstimations, getMeasurementsParametersDrivers, getOptimum, getOrbitalParametersDrivers, getPhysicalCovariances, getPropagatorParametersDrivers, setConvergenceChecker, setMaxEvaluations, setMaxIterations, setObserver, setParametersConvergenceThreshold
public SequentialBatchLSEstimator(SequentialGaussNewtonOptimizer sequentialOptimizer, OrbitDeterminationPropagatorBuilder... propagatorBuilder)
If multiple propagator builders
are set up, the
orbits of several spacecrafts will be used simultaneously. This is useful
if the propagators share some model or measurements parameters (typically
pole motion, prime meridian correction or ground stations positions).
Setting up multiple propagator builders
is also
useful when inter-satellite measurements are used, even if only one of
the orbit is estimated and the other ones are fixed. This is typically
used when very high accuracy GNSS measurements are needed and the
navigation bulletins are not considered accurate enough and the
navigation constellation must be propagated numerically.
The solver used for sequential least squares problem is a
sequential Gauss Newton optimizer
.
Details about how initialize it are given in the class JavaDoc.
sequentialOptimizer
- solver for sequential least squares problempropagatorBuilder
- builders to use for propagation.Copyright © 2002-2022 CS GROUP. All rights reserved.