eive-obsw/mission/controller/acs/Guidance.h

82 lines
4.0 KiB
C
Raw Normal View History

2022-09-19 15:17:39 +02:00
#ifndef GUIDANCE_H_
#define GUIDANCE_H_
#include <fsfw/datapool/PoolReadGuard.h>
#include <fsfw/globalfunctions/math/MatrixOperations.h>
#include <fsfw/globalfunctions/math/QuaternionOperations.h>
#include <fsfw/globalfunctions/math/VectorOperations.h>
2024-01-26 13:37:30 +01:00
#include <mission/controller/acs/AcsParameters.h>
#include <mission/controller/acs/SensorValues.h>
#include <mission/controller/acs/util/MathOperations.h>
#include <mission/controller/controllerdefinitions/AcsCtrlDefinitions.h>
#include <time.h>
2022-09-19 15:17:39 +02:00
#include <cmath>
#include <filesystem>
#include <string>
2022-09-19 15:17:39 +02:00
class Guidance {
public:
Guidance(AcsParameters *acsParameters_);
virtual ~Guidance();
2022-09-19 15:17:39 +02:00
2023-04-14 11:37:23 +02:00
void getTargetParamsSafe(double sunTargetSafe[3]);
2023-02-22 17:08:42 +01:00
ReturnValue_t solarArrayDeploymentComplete();
void resetValues();
2022-09-19 15:17:39 +02:00
// Function to get the target quaternion and reference rotation rate from gps position and
// position of the ground station
2023-10-16 17:01:42 +02:00
void targetQuatPtgSingleAxis(const timeval timeAbsolute, double posSatE[3], double velSatE[3],
2023-10-16 13:26:56 +02:00
double sunDirI[3], double refDirB[3], double quatBI[4],
double targetQuat[4], double targetSatRotRate[3]);
void targetQuatPtgThreeAxes(const timeval timeAbsolute, const double timeDelta, double posSatE[3],
double velSatE[3], double quatIX[4], double targetSatRotRate[3]);
void targetQuatPtgGs(const timeval timeAbsolute, const double timeDelta, double posSatE[3],
double sunDirI[3], double quatIX[4], double targetSatRotRate[3]);
2022-09-19 15:17:39 +02:00
// Function to get the target quaternion and reference rotation rate for sun pointing after ground
2022-12-13 11:51:03 +01:00
// station
2023-10-16 13:26:56 +02:00
void targetQuatPtgSun(const double timeDelta, double sunDirI[3], double targetQuat[4],
double targetSatRotRate[3]);
2022-12-13 11:51:03 +01:00
// Function to get the target quaternion and refence rotation rate from gps position for Nadir
// pointing
2023-10-16 17:01:42 +02:00
void targetQuatPtgNadirSingleAxis(const timeval timeAbsolute, double posSatE[3], double quatBI[4],
2023-02-21 10:44:02 +01:00
double targetQuat[4], double refDirB[3], double refSatRate[3]);
2023-10-16 13:26:56 +02:00
void targetQuatPtgNadirThreeAxes(const timeval timeAbsolute, const double timeDelta,
double posSatE[3], double velSatE[3], double targetQuat[4],
double refSatRate[3]);
2022-11-14 17:16:47 +01:00
// @note: Calculates the error quaternion between the current orientation and the target
// quaternion, considering a reference quaternion. Additionally the difference between the actual
// and a desired satellite rotational rate is calculated, again considering a reference rotational
// rate. Lastly gives back the error angle of the error quaternion.
void comparePtg(double currentQuat[4], double currentSatRotRate[3], double targetQuat[4],
double targetSatRotRate[3], double refQuat[4], double refSatRotRate[3],
double errorQuat[4], double errorSatRotRate[3], double &errorAngle);
2023-02-20 15:59:01 +01:00
void comparePtg(double currentQuat[4], double currentSatRotRate[3], double targetQuat[4],
double targetSatRotRate[3], double errorQuat[4], double errorSatRotRate[3],
double &errorAngle);
2023-10-16 13:26:56 +02:00
void targetRotationRate(const int8_t timeElapsedMax, const double timeDelta,
double quatInertialTarget[4], double *targetSatRotRate);
2023-02-17 15:57:07 +01:00
// @note: will give back the pseudoinverse matrix for the reaction wheel depending on the valid
// reation wheel maybe can be done in "commanding.h"
ReturnValue_t getDistributionMatrixRw(ACS::SensorValues *sensorValues, double *rwPseudoInv);
private:
const AcsParameters *acsParameters;
static constexpr double ZERO_VEC3[3] = {0, 0, 0};
2024-01-26 13:37:30 +01:00
static constexpr double ZERO_VEC4[4] = {0, 0, 0, 0};
bool strBlindAvoidFlag = false;
double quatIXprev[4] = {0, 0, 0, 0};
static constexpr char SD_0_SKEWED_PTG_FILE[] = "/mnt/sd0/conf/acsDeploymentConfirm";
static constexpr char SD_1_SKEWED_PTG_FILE[] = "/mnt/sd1/conf/acsDeploymentConfirm";
2022-09-19 15:17:39 +02:00
};
#endif /* ACS_GUIDANCE_H_ */