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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 

+21 −1
Original line number Diff line number Diff line
@@ -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):
+4 −4
Original line number Diff line number Diff line
@@ -339,10 +339,10 @@
    ],
    "quaternions": [
      [
        -0.08339426680875163,
        0.2825790922154143,
        -0.2899354389711647,
        0.9105667982826637
        0.08339426680875163,
        -0.2825790922154143,
        0.2899354389711647,
        -0.9105667982826637
      ],
      [
        -0.05753008804150366,