Hello!
It has been a while since the last time I wrote something on this forum. But I am still using Orekit everyday and I am always glad to interact with you
I am still working on the orbit determination problem described here. As @MaximeJ told me, since the derivatives of my measurements (in Cartesian coordinates) are constant ([n_1, n_2, n_3, 0, 0, 0], where n_i is a constant value), the lines of the Jacobian are almost identical,
which is also a classic cause of singular problem (non pseudo-inversible matrix) exception. Therefore, I was asking myself if it was possible to compute the derivatives of my measurements in terms of Keplerian parameters instead of the Cartesian ones. So also the last three elements of my derivative array (i.e. the ones linked to the satellite velocity in the Cartesian case) won’t be zero, which I think could help.
The measurement, in my case, is defined as (I am extending the Range class):
tau = Gradient.cast_(self.signalTimeOfFlight(pvaSSB, pvaDS.getPosition(), pvaDS.getDate()).multiply(projection_factor))
where pvaSSB is the pva triplet for the Solar System Barycentre (assumed to be constant in time) and projection_factor accounts for the fact that my Range refers to the projection of the SSB-SAT range along the direction which is given by [n_1, n_2, n_3].
Then, I get the derivative array as:
derivative_array = tau.getGradient()
which is given to the EstimatedMeasurement object as
estimated_measurement.setStateDerivatives(0, derivative_array).
Is there a way to give to estimated_measurement the derivatives with respect to the Keplerian parameters and then to solve a least square problem (I am using a SequentialBatchLSEstimator) in this way? I am asking this since I always get a singular matrix error when running the filter with a SequentialGaussNewtonOptimizer(QRDecomposer, False, evaluation). It works if I make use of a pseudo-inversion by replacing False with True, but I was interested in trying also this alternative way!
Best regards,
Samuele