/* * Detumble.cpp * * Created on: 17 Aug 2022 * Author: Robin Marquardt */ #include #include #include #include #include #include #include #include Detumble::Detumble(AcsParameters *acsParameters_){ loadAcsParameters(acsParameters_); } Detumble::~Detumble(){ } void Detumble::loadAcsParameters(AcsParameters *acsParameters_){ detumbleCtrlParameters = &(acsParameters_->detumbleCtrlParameters); magnetorquesParameter = &(acsParameters_->magnetorquesParameter); } ReturnValue_t Detumble::bDotLaw(const double *magRate, const bool *magRateValid, const double *magField, const bool *magFieldValid, double *magMom) { if (!magRateValid || !magFieldValid) { return DETUMBLE_NO_SENSORDATA; } double gain = detumbleCtrlParameters->gainD; double factor = -gain / pow(VectorOperations::norm(magField,3),2); VectorOperations::mulScalar(magRate, factor, magMom, 3); return RETURN_OK; } ReturnValue_t Detumble::bangbangLaw(const double *magRate, const bool *magRateValid, double *magMom) { if (!magRateValid) { return DETUMBLE_NO_SENSORDATA; } double dipolMax = magnetorquesParameter->DipolMax; for (int i = 0; i<3; i++) { magMom[i] = - dipolMax * sign(magRate[i]); } return RETURN_OK; }