Fix 3x3 covariance matrix rotation/transformation#1998
Merged
vooon merged 2 commits intomavlink:ros2from Oct 10, 2024
leocencetti:fix-wrong-covariance-rotation
Merged
Fix 3x3 covariance matrix rotation/transformation#1998vooon merged 2 commits intomavlink:ros2from leocencetti:fix-wrong-covariance-rotation
vooon merged 2 commits intomavlink:ros2from
leocencetti:fix-wrong-covariance-rotation
Conversation
Contributor
Author
|
This PR is currently targeting the |
vooon
approved these changes
Oct 10, 2024
Contributor
Author
|
@vooon FYI there were 4 errors in the test code (reason for the failing CI). I hadn't built the tests locally so they slipped through... Since you merged already, I'll open a second PR to patch them. |
Member
|
I'm on release process, though to fix myself. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The template specializations of
transform_static_frame()andtransform_frame()for the typeCovariance3dimproperly rotate the covariance matrix.Implementation details
Old (broken) implementation
The old implementation is wrong and returns an ill-conditioned covariance matrix, breaking symmetry and positive-semi-definitiveness.
Taking for example the following covariance matrix
Pand quaternionq:The old implementation would return the matrix
P':which is clearly invalid (asymmetric and negative).
New (proper) implementation
The new implementation correctly rotates the 3x3 covariance matrix by left- and right-multiplying by the rotation quaternion (as done for the 6x6 and 9x9 cases):
which is a valid covariance matrix.
Useful resources
GodBolt example: link
Covariance matrix rotation derivation: https://robotics.stackexchange.com/questions/2556/how-to-rotate-covariance
Edit: Updated GodBolt link to use un-shortened version for posterity