Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
e51dd33d82 | |||
262cc78e7e
|
|||
26b9343ca4 | |||
4701276523 | |||
9833a4e043 | |||
51ccbc6898 | |||
9ceaa6817c
|
|||
5cdb8db42a
|
|||
8ab6296abf | |||
d8bd52b4e3 | |||
1e58de635c | |||
be2c4379a7 | |||
f9b56d206e | |||
1dfcc238ed | |||
795b63c34f
|
|||
a13fbe6f54 | |||
9723bf70a0 | |||
4858c1ea57 | |||
8a50746251 | |||
46ffee3e5d | |||
efc4e83857 | |||
cda88cdc56 |
19
CHANGELOG.md
19
CHANGELOG.md
@ -16,6 +16,25 @@ will consitute of a breaking change warranting a new major release:
|
||||
|
||||
# [unreleased]
|
||||
|
||||
# [v7.5.2] 2023-12-14
|
||||
|
||||
## Fixed
|
||||
|
||||
- Fixed faulty scaling within the QUEST algorithm.
|
||||
|
||||
# [v7.5.1] 2023-12-13
|
||||
|
||||
- `eive-tmtc` v5.12.1
|
||||
|
||||
## Changed
|
||||
|
||||
- Increased the maximum number of scheduled telecommands from 500 to 4000. Merry Christmas!
|
||||
|
||||
## Fixed
|
||||
|
||||
- Faulty mapping of input values for QUEST algorithm.
|
||||
- Fixed validity check for QUEST algorithm.
|
||||
|
||||
# [v7.5.0] 2023-12-06
|
||||
|
||||
- `eive-tmtc` v5.12.0
|
||||
|
@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(OBSW_VERSION_MAJOR 7)
|
||||
set(OBSW_VERSION_MINOR 5)
|
||||
set(OBSW_VERSION_REVISION 0)
|
||||
set(OBSW_VERSION_REVISION 2)
|
||||
|
||||
# set(CMAKE_VERBOSE TRUE)
|
||||
|
||||
@ -64,7 +64,7 @@ include(EiveHelpers)
|
||||
option(EIVE_ADD_ETL_LIB "Add ETL library" ON)
|
||||
option(EIVE_ADD_JSON_LIB "Add JSON library" ON)
|
||||
|
||||
set(OBSW_MAX_SCHEDULED_TCS 500)
|
||||
set(OBSW_MAX_SCHEDULED_TCS 4000)
|
||||
|
||||
if(EIVE_Q7S_EM)
|
||||
set(OBSW_Q7S_EM
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @brief Auto-generated event translation file. Contains 318 translations.
|
||||
* @details
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateEvents.h"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @brief Auto-generated object translation file.
|
||||
* @details
|
||||
* Contains 175 translations.
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateObjects.h"
|
||||
|
||||
|
2
fsfw
2
fsfw
Submodule fsfw updated: 7105e199c6...e64e8b274d
@ -387,6 +387,7 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
|
||||
0x4304;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4305;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4306;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4307;PUS11_MapIsFull;No description;7;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4400;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
0x4401;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
0x4402;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
|
|
@ -387,6 +387,7 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
|
||||
0x4304;PUS11_InvalidRelativeTime;No description;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4305;PUS11_ContainedTcTooSmall;No description;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4306;PUS11_ContainedTcCrcMissmatch;No description;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4307;PUS11_MapIsFull;No description;7;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
|
||||
0x4400;FILS_GenericFileError;No description;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
0x4401;FILS_GenericDirError;No description;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
0x4402;FILS_FilesystemInactive;No description;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
|
||||
|
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @brief Auto-generated event translation file. Contains 318 translations.
|
||||
* @details
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateEvents.h"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @brief Auto-generated object translation file.
|
||||
* @details
|
||||
* Contains 179 translations.
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateObjects.h"
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @brief Auto-generated event translation file. Contains 318 translations.
|
||||
* @details
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateEvents.h"
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @brief Auto-generated object translation file.
|
||||
* @details
|
||||
* Contains 179 translations.
|
||||
* Generated on: 2023-12-06 17:19:38
|
||||
* Generated on: 2023-12-13 11:29:45
|
||||
*/
|
||||
#include "translateObjects.h"
|
||||
|
||||
|
@ -8,14 +8,14 @@ AttitudeEstimation::~AttitudeEstimation() {}
|
||||
|
||||
void AttitudeEstimation::quest(acsctrl::SusDataProcessed *susData,
|
||||
acsctrl::MgmDataProcessed *mgmData,
|
||||
acsctrl::AttitudeEstimationData *attitudeEstimation) {
|
||||
acsctrl::AttitudeEstimationData *attitudeEstimationData) {
|
||||
if (not(susData->susVecTot.isValid() and susData->sunIjkModel.isValid() and
|
||||
mgmData->mgmVecTot.value and mgmData->magIgrfModel.isValid())) {
|
||||
mgmData->mgmVecTot.isValid() and mgmData->magIgrfModel.isValid())) {
|
||||
{
|
||||
PoolReadGuard pg{attitudeEstimation};
|
||||
PoolReadGuard pg{attitudeEstimationData};
|
||||
if (pg.getReadResult() == returnvalue::OK) {
|
||||
std::memcpy(attitudeEstimation->quatQuest.value, ZERO_VEC4, 4 * sizeof(double));
|
||||
attitudeEstimation->quatQuest.setValid(false);
|
||||
std::memcpy(attitudeEstimationData->quatQuest.value, ZERO_VEC4, 4 * sizeof(double));
|
||||
attitudeEstimationData->quatQuest.setValid(false);
|
||||
}
|
||||
}
|
||||
return;
|
||||
@ -24,10 +24,10 @@ void AttitudeEstimation::quest(acsctrl::SusDataProcessed *susData,
|
||||
// Normalize Data
|
||||
double normMgmB[3] = {0, 0, 0}, normMgmI[3] = {0, 0, 0}, normSusB[3] = {0, 0, 0},
|
||||
normSusI[3] = {0, 0, 0};
|
||||
VectorOperations<double>::normalize(susData->susVecTot.value, normMgmB, 3);
|
||||
VectorOperations<double>::normalize(susData->sunIjkModel.value, normMgmI, 3);
|
||||
VectorOperations<double>::normalize(mgmData->mgmVecTot.value, normSusB, 3);
|
||||
VectorOperations<double>::normalize(mgmData->magIgrfModel.value, normSusI, 3);
|
||||
VectorOperations<double>::normalize(susData->susVecTot.value, normSusB, 3);
|
||||
VectorOperations<double>::normalize(susData->sunIjkModel.value, normSusI, 3);
|
||||
VectorOperations<double>::normalize(mgmData->mgmVecTot.value, normMgmB, 3);
|
||||
VectorOperations<double>::normalize(mgmData->magIgrfModel.value, normMgmI, 3);
|
||||
|
||||
// Create Helper Vectors
|
||||
double normHelperB[3] = {0, 0, 0}, normHelperI[3] = {0, 0, 0}, helperCross[3] = {0, 0, 0},
|
||||
@ -77,24 +77,22 @@ void AttitudeEstimation::quest(acsctrl::SusDataProcessed *susData,
|
||||
qBI[3] = (gamma + alpha) * (1 + VectorOperations<double>::dot(normHelperB, normHelperI));
|
||||
// Rotational Vector Part
|
||||
VectorOperations<double>::mulScalar(helperCross, gamma + alpha, qRotVecPt0, 3);
|
||||
VectorOperations<double>::add(normHelperB, normHelperI, qRotVecPt1, 3);
|
||||
VectorOperations<double>::mulScalar(qRotVecPt1, beta, qRotVecPt1, 3);
|
||||
VectorOperations<double>::mulScalar(helperSum, beta, qRotVecPt1, 3);
|
||||
VectorOperations<double>::add(qRotVecPt0, qRotVecPt1, qRotVecTot, 3);
|
||||
std::memcpy(qBI, qRotVecTot, sizeof(qRotVecTot));
|
||||
|
||||
VectorOperations<double>::mulScalar(qBI, constPlus, qBI, 3);
|
||||
VectorOperations<double>::mulScalar(qBI, constPlus, qBI, 4);
|
||||
QuaternionOperations::normalize(qBI, qBI);
|
||||
} else {
|
||||
// Scalar Part
|
||||
qBI[3] = (beta) * (1 + VectorOperations<double>::dot(normHelperB, normHelperI));
|
||||
// Rotational Vector Part
|
||||
VectorOperations<double>::mulScalar(helperCross, beta, qRotVecPt0, 3);
|
||||
VectorOperations<double>::add(normHelperB, normHelperI, qRotVecPt1, 3);
|
||||
VectorOperations<double>::mulScalar(qRotVecPt1, gamma - alpha, qRotVecPt1, 3);
|
||||
VectorOperations<double>::mulScalar(helperSum, gamma - alpha, qRotVecPt1, 3);
|
||||
VectorOperations<double>::add(qRotVecPt0, qRotVecPt1, qRotVecTot, 3);
|
||||
std::memcpy(qBI, qRotVecTot, sizeof(qRotVecTot));
|
||||
|
||||
VectorOperations<double>::mulScalar(qBI, constMinus, qBI, 3);
|
||||
VectorOperations<double>::mulScalar(qBI, constMinus, qBI, 4);
|
||||
QuaternionOperations::normalize(qBI, qBI);
|
||||
}
|
||||
// Low Pass
|
||||
@ -102,10 +100,10 @@ void AttitudeEstimation::quest(acsctrl::SusDataProcessed *susData,
|
||||
QuaternionOperations::slerp(qBI, qOld, acsParameters->onBoardParams.questFilterWeight, qBI);
|
||||
}
|
||||
{
|
||||
PoolReadGuard pg{attitudeEstimation};
|
||||
PoolReadGuard pg{attitudeEstimationData};
|
||||
if (pg.getReadResult() == returnvalue::OK) {
|
||||
std::memcpy(attitudeEstimation->quatQuest.value, qBI, 4 * sizeof(double));
|
||||
attitudeEstimation->quatQuest.setValid(true);
|
||||
std::memcpy(attitudeEstimationData->quatQuest.value, qBI, 4 * sizeof(double));
|
||||
attitudeEstimationData->quatQuest.setValid(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
2
tmtc
2
tmtc
Submodule tmtc updated: f63a834d9a...747ad34eec
Reference in New Issue
Block a user