/******************************* * EIVE Flight Software Framework (FSFW) * (c) 2022 IRS, Uni Stuttgart *******************************/ #ifndef ACSPARAMETERS_H_ #define ACSPARAMETERS_H_ #include typedef unsigned char uint8_t; class AcsParameters:public HasParametersIF{ public: AcsParameters(); virtual ~AcsParameters(); virtual ReturnValue_t getParameter(uint8_t domainId, uint16_t parameterId, ParameterWrapper *parameterWrapper, const ParameterWrapper *newValues, uint16_t startAtIndex); struct OnBoardParams { double sampleTime; // [s] } onBoardParams; struct InertiaEIVE { double inertiaMatrix[3][3]; double inertiaMatrixInverse[3][3]; } inertiaEIVE; struct MgmHandlingParameters { float mgm0orientationMatrix[3][3]; float mgm1orientationMatrix[3][3]; float mgm2orientationMatrix[3][3]; float mgm3orientationMatrix[3][3]; float mgm4orientationMatrix[3][3]; } mgmHandlingParameters; struct SusHandlingParameters { float sus0orientationMatrix[3][3]; float sus1orientationMatrix[3][3]; float sus2orientationMatrix[3][3]; float sus3orientationMatrix[3][3]; float sus4orientationMatrix[3][3]; float sus5orientationMatrix[3][3]; float sus6orientationMatrix[3][3]; float sus7orientationMatrix[3][3]; float sus8orientationMatrix[3][3]; float sus9orientationMatrix[3][3]; float sus10orientationMatrix[3][3]; float sus11orientationMatrix[3][3]; float filterAlpha; float sunThresh; } susHandlingParameters; struct RmuHandlingParameters { double rmu0orientationMatrix[3][3]; double rmu1orientationMatrix[3][3]; double rmu2orientationMatrix[3][3]; } rmuHandlingParameters; struct RwHandlingParameters { double rw0orientationMatrix[3][3]; double rw1orientationMatrix[3][3]; double rw2orientationMatrix[3][3]; double rw3orientationMatrix[3][3]; double inertiaWheel; double maxTrq; } rwHandlingParameters; struct SafeModeControllerParameters { double k_rate_mekf; double k_align_mekf; double k_rate_no_mekf; double k_align_no_mekf; double sunMagAngleMin; double sunTargetDir[3]; //Body frame double satRateRef[3]; //Body frame } safeModeControllerParameters; struct DetumbleCtrlParameters { double gainD; } detumbleCtrlParameters; struct PointingModeControllerParameters { double updtFlag; double A_rw[3][12]; double refDirection[3]; double refRotRate[3]; double quatRef[4]; bool avoidBlindStr; double blindAvoidStart; double blindAvoidStop; double blindRotRate; double zeta; double zetaLow; double om; double omLow; double qiMin; double omMax; double gainNullspace; double desatMomentumRef[3]; double deSatGainFactor; bool desatOn; double omegaEarth; } inertialModeControllerParameters, nadirModeControllerParameters, targetModeControllerParameters; struct RWMatrices { double alignmentMatrix[3][4]; double pseudoInverse[4][3]; double without0[4][3]; double without1[4][3]; double without2[4][3]; double without3[4][3]; double nullspace[4]; } rwMatrices; struct StrParameters { double exclusionAngle; // double strOrientationMatrix[3][3]; double boresightAxis[3]; //in body/geometry frame } strParameters; struct GpsParameters { } gpsParameters; struct GroundStationParameters { double latitudeGs; // [rad] Latitude double longitudeGs; // [rad] Longitude double altitudeGs; // [m] Altitude double earthRadiusEquat; // [m] double earthRadiusPolar; // [m] } groundStationParameters; struct SunModelParameters { enum UseSunModel { NO = 0, YES = 3 }; uint8_t useSunModel; float domega; float omega_0; //Rektaszension des Aufsteigenden Knotens plus Argument des Perigäums float m_0; //coefficients for mean anomaly float dm; //coefficients for mean anomaly float e; //angle of earth's rotation axis float e1; float p1; //some parameter float p2; //some parameter } sunModelParameters; struct KalmanFilterParameters { uint8_t activateKalmanFilter; uint8_t requestResetFlag; double maxToleratedTimeBetweenKalmanFilterExecutionSteps; double processNoiseOmega[3]; double processNoiseQuaternion[4]; double sensorNoiseSTR; double sensorNoiseSS; double sensorNoiseMAG; double sensorNoiseRMU[3]; double sensorNoiseArwRmu; //Angular Random Walk double sensorNoiseBsRMU; // Bias Stability } kalmanFilterParameters; struct MagnetorquesParameter { double mtq0orientationMatrix[3][3]; double mtq1orientationMatrix[3][3]; double mtq2orientationMatrix[3][3]; double alignmentMatrixMtq[3][3]; double inverseAlignment[3][3]; double DipolMax; // [Am^2] } magnetorquesParameter; struct DetumbleParameter { uint8_t detumblecounter; double omegaDetumbleStart; double omegaDetumbleEnd; } detumbleParameter; }; #endif /* ACSPARAMETERS_H_ */