Skip to content
Snippets Groups Projects
Unverified Commit 5605b499 authored by Austin Sanders's avatar Austin Sanders Committed by GitHub
Browse files

Update quaternions to prevent sign flipping (#623)


* Updated quaternion accessor to prevent unwanted sign flip

* Updated changelog

* flipped quaternion signs to follow new logic

---------

Co-authored-by: default avatarSanders <arsanders@igswza281l2314.gs.doi.net>
parent 396524c2
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,7 @@ release. ...@@ -58,6 +58,7 @@ release.
- Fixed incorrect distortion look up in Orex camera when working with PolyCam images [#583](https://github.com/DOI-USGS/ale/pull/583) - Fixed incorrect distortion look up in Orex camera when working with PolyCam images [#583](https://github.com/DOI-USGS/ale/pull/583)
- Brought timing in line with ISIS for the KaguyaMiIsisLabelNaifSpiceDriver [#599](https://github.com/DOI-USGS/ale/pull/599) - Brought timing in line with ISIS for the KaguyaMiIsisLabelNaifSpiceDriver [#599](https://github.com/DOI-USGS/ale/pull/599)
- Brought timing in line with ISIS for the MroMarciIsisLabelNaifSpiceDriver [#600](https://github.com/DOI-USGS/ale/pull/600) - Brought timing in line with ISIS for the MroMarciIsisLabelNaifSpiceDriver [#600](https://github.com/DOI-USGS/ale/pull/600)
- Fixed a bug in which quaternions would flip sign in a way that caused interpolation errors [#603](https://github.com/DOI-USGS/ale/issues/603)
## [0.10.0] - 2024-01-08 ## [0.10.0] - 2024-01-08
......
...@@ -196,7 +196,27 @@ class TimeDependentRotation: ...@@ -196,7 +196,27 @@ class TimeDependentRotation:
the destination reference frame. The quaternions are in scalar the destination reference frame. The quaternions are in scalar
last format (x, y, z, w). last format (x, y, z, w).
""" """
return self._rots.as_quat() quats = self._rots.as_quat()
# First find the largest magnitude quaternion coefficient and its coordinate
num_quats = len(quats)
max_q = 0.0
max_j = 0
for i in range(num_quats):
for j in range(4):
if abs(quats[i][j]) > abs(max_q):
max_q = quats[i][j]
max_j = j
# Ensure the signs are consistent
qcnt = 0
for i in range(num_quats):
if quats[i][max_j] * max_q < 0:
qcnt = qcnt + 1
for j in range(4):
quats[i][j] *= -1.0
return quats
@quats.setter @quats.setter
def quats(self, new_quats): def quats(self, new_quats):
......
...@@ -339,10 +339,10 @@ ...@@ -339,10 +339,10 @@
], ],
"quaternions": [ "quaternions": [
[ [
-0.08339426680875163, 0.08339426680875163,
0.2825790922154143, -0.2825790922154143,
-0.2899354389711647, 0.2899354389711647,
0.9105667982826637 -0.9105667982826637
], ],
[ [
-0.05753008804150366, -0.05753008804150366,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment