This merge request aims to close the Issue #964 (closed).
It is now possible to do the following covariance matrix conversion :
- Frame (pseudo-inertial or not) -> Frame (pseudo-inertial or not)
- LOFType -> Frame (pseudo-inertial or not)
- Frame (pseudo-inertial or not) -> LOFType
- LOFType -> LOFType
I only modified the internal behaviour of the
changeCovarianceFrame(frame -> frame) and not its API.
- The output covariance frame will necessarily be in cartesian elements if the output frame is not pseudo-inertial.
- The method will throw an error if the input frame is not inertial and the covariance matrix is given in another type that cartesian.
Finally each new method will have its own arguments, possibly different from the
changeCovarianceFrame(frame -> frame) depending on the case we're dealing with.
Unexpected added features
While working on this issue, I also added the following features:
To implement these methods I added a new static method
rotationFromLOFInToLOFOutas well as another method
rotationFromLOFInToLOFOutuses the QSW local orbital frame as a pivot to define every possible combinations then the
rotationFromLOFTypemethod use this static method to return the correct rotation to the specific
Furthermore, I noticed that @bryan had implemented the full version of the conversion which allowed for conversion from/to non pseudo-inertial frame but an unnecessary line prevented the user from using non pseudo-inertial frames. After careful examination, it turns out that removing this unnecessary line didn't modify the expected results of the frame conversion method.
Several tests were added and are based on the following paper from David A. Vallado: Covariance Transformations for Satellite Flight Dynamics Operations. Thanks to these tests, the
StateCovarianceMatrixProvider class has a code coverage of 100%.