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.
- 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 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
......
......@@ -196,7 +196,27 @@ class TimeDependentRotation:
the destination reference frame. The quaternions are in scalar
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
def quats(self, new_quats):
......
......@@ -339,10 +339,10 @@
],
"quaternions": [
[
-0.08339426680875163,
0.2825790922154143,
-0.2899354389711647,
0.9105667982826637
0.08339426680875163,
-0.2825790922154143,
0.2899354389711647,
-0.9105667982826637
],
[
-0.05753008804150366,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment