Interpolation of covariance matrices

Hi there,

I was wondering if there was any native ways in Orekit to interpolate (in time) covariance matrices (basically position and velocity) among a list of dated ones, typically from an OEM file. I couldn’t find that in the tutorials.

Cheers,
Romain.

Hi @Serrof

Currently, there is nothing in Orekit for interpolating covariance matrices. However, we must have features for that.
To my mind, two new features can be added:

  1. A static method intepolate() in CartesianCovariance class for interpolating covariance matrices read from CCSDS files.
    The inputs can be: interpolationEpoch (AbsoluteDate), data ( Stream<CartesianCovariance>), and interpolationDegree (int).
    The output can be a CartesianCovariance representing the interpolated covariance matrix.
    The implementation can just convert the covariances to arrays and interpolate thanks to an HermiteInterpolator.

  2. A more generic feature can be to add List<RealMatrix> covariances in OrekitEphemerisFile#OrekitEphemerisSegment. Thanks to that, the interpolation can be perfomed thanks to an EphemerisSegmentPropagator using a new method getCovariance(date). This would need to put the EphemerisSegmentPropagator as a public class.

What do you think?
If you think these features are interesting, could you open feature requests in our issue tracker?

Best regards,
Bryan

Hi Bryan.

Thanks for these suggestions. Unfortunately don’t think I know Orekit enough to fully understand the second option…
Regarding the first one, does the “Stream” mean that it would only work on data from a file?

Cheers,
Romain.

Romain,

For the first feature the answer is yes. Its purpose is to interpolate parsed covariance matrices from a CCSDS file, like an OEM.
The purpose of the second feature is to be more generic in order to have an interpolation method working for ephemeris that not necessary come from CCSDS files.

Best regards,
Bryan

Hi Bryan,

I don’t think this will always produce covariance matrices. See [1] for why and some other ideas.

Regards,
Evan

[1] https://comspoc.com/Resources/Papers/Efficient-Covariance-Interpolation-using-Blending-of-Approximate-State-Error-Transitions.pdf

Thank you Evan for the reference.

Interpolating covariance matrices is not as simple as I thought.
I think we should have a look on these interpolation methods because interpolating covariance matrices can be very useful for Orekit’s users.

Best regards,
Bryan

1 Like

Hi Brian, and co-devs!

I am new to the Orekit forum and the discourse community. I was wondering if there is an open Issue within Gitlab that is implementing the covariance interpolation. If so, could you point me to it please?

I am trying to implement the concept in one of my personal projects, and I think if Orekit is already in the process of implementing it, then I might gain some more visibility.

Thank you for your time!

Regards!

Hi @abhiuk93

Welcome to the Orekit forum! :slight_smile:

We have one issue open for the need of interpolating covariance matrices.
https://gitlab.orekit.org/orekit/orekit/-/issues/914

I think we should add a comment in the issue with the current forum thread.

Currently, Orekit only has a class to perform the covariance propagation (i.e., computation of a propagated covariance based on an input one and the state transition matrix). The classe is StateCovarianceMatrixProvider However, there is nothing to interpolate a set of covariances.

That’s cool if you are implementing it in a personal project. I just ask the question, but are you interested in contributing it to Orekit once finished?

Please note that we wrote a contribution guide: https://www.orekit.org/site-orekit-latest/contributing.html

Best regards,
Bryan

Hi Brian,

Thank you for the quick response and the Issue link!

It is my first time doing covariance interpolation. Therefore, if I can successfully implement the covariance interpolation now, I would be happy to port that & contribute to Orekit development as well. However, I will go through the guide to familiarise myself with the rules first. I will post in this thread as I progress.

Kind regards

Great! Thank you!