diff --git a/CHANGELOG.md b/CHANGELOG.md index b71b353b..21ec3eb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,10 @@ will consitute of a breaking change warranting a new major release: # [unreleased] +## Fixed + +- Fixed calculation for target rotation rate during pointing modes. + ## Changed - Reworked MPSoC handler to be compatible to new MPSoC software image and use @@ -32,6 +36,8 @@ will consitute of a breaking change warranting a new major release: # [v7.8.1] 2024-04-11 +## Fixed + - Reverted fix for wrong order in quaternion multiplication for computation of the error quaternion. # [v7.8.0] 2024-04-10 diff --git a/mission/controller/acs/Guidance.cpp b/mission/controller/acs/Guidance.cpp index 2c1b3c63..7d931565 100644 --- a/mission/controller/acs/Guidance.cpp +++ b/mission/controller/acs/Guidance.cpp @@ -232,6 +232,7 @@ void Guidance::targetRotationRate(const double timeDelta, double quatIX[4], doub } if (timeDelta != 0.0) { QuaternionOperations::rotationFromQuaternions(quatIX, quatIXprev, timeDelta, refSatRate); + VectorOperations::mulScalar(refSatRate, -1, refSatRate, 3); } else { std::memcpy(refSatRate, ZERO_VEC3, 3 * sizeof(double)); } @@ -315,9 +316,9 @@ void Guidance::comparePtg(double currentQuat[4], double currentSatRotRate[3], do // Calculate error satellite rotational rate // Convert target rotational rate into body RF - double errorQuatInv[4] = {0, 0, 0, 0}, targetSatRotRateB[3] = {0, 0, 0}; - QuaternionOperations::inverse(errorQuat, errorQuatInv); - QuaternionOperations::multiplyVector(errorQuatInv, targetSatRotRate, targetSatRotRateB); + double targetSatRotRateB[3] = {0, 0, 0}; + QuaternionOperations::multiplyVector(currentQuat, targetSatRotRate, targetSatRotRateB); + VectorOperations::copy(targetSatRotRateB, targetSatRotRate, 3); // Combine the target and reference satellite rotational rates double combinedRefSatRotRate[3] = {0, 0, 0}; VectorOperations::add(targetSatRotRate, refSatRotRate, combinedRefSatRotRate, 3);