diff --git a/mission/controller/acs/Navigation.cpp b/mission/controller/acs/Navigation.cpp index 59803f0f..c6310302 100644 --- a/mission/controller/acs/Navigation.cpp +++ b/mission/controller/acs/Navigation.cpp @@ -14,37 +14,37 @@ Navigation::Navigation(AcsParameters *acsParameters_) : multiplicativeKalmanFilt Navigation::~Navigation() {} -void Navigation::useMekf(ACS::SensorValues *sensorValues, - acsctrl::GyrDataProcessed *gyrDataProcessed, - acsctrl::MgmDataProcessed *mgmDataProcessed, - acsctrl::SusDataProcessed *susDataProcessed, acsctrl::MekfData *mekfData, - ReturnValue_t *mekfValid) { - double quatJB[4] = {sensorValues->strSet.caliQx.value, sensorValues->strSet.caliQy.value, +ReturnValue_t Navigation::useMekf(ACS::SensorValues *sensorValues, + acsctrl::GyrDataProcessed *gyrDataProcessed, + acsctrl::MgmDataProcessed *mgmDataProcessed, + acsctrl::SusDataProcessed *susDataProcessed, + acsctrl::MekfData *mekfData) { + double quatIB[4] = {sensorValues->strSet.caliQx.value, sensorValues->strSet.caliQy.value, sensorValues->strSet.caliQz.value, sensorValues->strSet.caliQw.value}; - bool quatJBValid = sensorValues->strSet.caliQx.isValid() && + bool quatIBValid = sensorValues->strSet.caliQx.isValid() && sensorValues->strSet.caliQy.isValid() && sensorValues->strSet.caliQz.isValid() && sensorValues->strSet.caliQw.isValid(); if (kalmanInit) { - *mekfValid = multiplicativeKalmanFilter.mekfEst( - quatJB, quatJBValid, gyrDataProcessed->gyrVecTot.value, + return multiplicativeKalmanFilter.mekfEst( + quatIB, quatIBValid, gyrDataProcessed->gyrVecTot.value, gyrDataProcessed->gyrVecTot.isValid(), mgmDataProcessed->mgmVecTot.value, mgmDataProcessed->mgmVecTot.isValid(), susDataProcessed->susVecTot.value, susDataProcessed->susVecTot.isValid(), susDataProcessed->sunIjkModel.value, susDataProcessed->sunIjkModel.isValid(), mgmDataProcessed->magIgrfModel.value, - mgmDataProcessed->magIgrfModel.isValid(), acsParameters.onBoardParams.sampleTime, - mekfData); // VALIDS FOR QUAT AND RATE ?? + mgmDataProcessed->magIgrfModel.isValid(), acsParameters.onBoardParams.sampleTime, mekfData); } else { - multiplicativeKalmanFilter.init( + ReturnValue_t result; + result = multiplicativeKalmanFilter.init( mgmDataProcessed->mgmVecTot.value, mgmDataProcessed->mgmVecTot.isValid(), susDataProcessed->susVecTot.value, susDataProcessed->susVecTot.isValid(), susDataProcessed->sunIjkModel.value, susDataProcessed->sunIjkModel.isValid(), mgmDataProcessed->magIgrfModel.value, mgmDataProcessed->magIgrfModel.isValid(), mekfData); kalmanInit = true; - *mekfValid = returnvalue::OK; - - // Maybe we need feedback from kalmanfilter to identify if there was a problem with the - // init of kalman filter where does this class know from that kalman filter was not - // initialized ? + return result; } } + +void Navigation::resetMekf(acsctrl::MekfData *mekfData) { + multiplicativeKalmanFilter.reset(mekfData); +} diff --git a/mission/controller/acs/Navigation.h b/mission/controller/acs/Navigation.h index 2474cb67..e054bfbf 100644 --- a/mission/controller/acs/Navigation.h +++ b/mission/controller/acs/Navigation.h @@ -1,10 +1,3 @@ -/* - * Navigation.h - * - * Created on: 19 Apr 2022 - * Author: Robin Marquardt - */ - #ifndef NAVIGATION_H_ #define NAVIGATION_H_ @@ -16,14 +9,14 @@ class Navigation { public: - Navigation(AcsParameters *acsParameters_); // Input mode ? + Navigation(AcsParameters *acsParameters_); virtual ~Navigation(); - void useMekf(ACS::SensorValues *sensorValues, acsctrl::GyrDataProcessed *gyrDataProcessed, - acsctrl::MgmDataProcessed *mgmDataProcessed, - acsctrl::SusDataProcessed *susDataProcessed, acsctrl::MekfData *mekfData, - ReturnValue_t *mekfValid); - void processSensorData(); + ReturnValue_t useMekf(ACS::SensorValues *sensorValues, + acsctrl::GyrDataProcessed *gyrDataProcessed, + acsctrl::MgmDataProcessed *mgmDataProcessed, + acsctrl::SusDataProcessed *susDataProcessed, acsctrl::MekfData *mekfData); + void resetMekf(acsctrl::MekfData *mekfData); protected: private: