Hello everyone,
This merge request aims to close the Issue #964 (closed).
What's new
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.
However :
- 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
rotationFromLOFInToLOFOut
as well as another methodrotationFromLOFType
in theLOFType
class. TherotationFromLOFInToLOFOut
uses the QSW local orbital frame as a pivot to define every possible combinations then therotationFromLOFType
method use this static method to return the correct rotation to the specificLOFType
instance. -
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.
Tests
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%.