chonky #670
@ -51,6 +51,8 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
reason.
|
reason.
|
||||||
- OFF mode is ignores in TM store for determining whether a store will be written. The modes will
|
- OFF mode is ignores in TM store for determining whether a store will be written. The modes will
|
||||||
only be used to cancel a transfer.
|
only be used to cancel a transfer.
|
||||||
|
- Handling of multiple RWs in the ACS Controller is improved and can be changed by parameter
|
||||||
|
commands.
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
@ -92,6 +94,8 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
- Prevent spam of TCS controller heater unavailability event if all heaters are in external control.
|
- Prevent spam of TCS controller heater unavailability event if all heaters are in external control.
|
||||||
- TCS heater switch info set contained invalid values because of a faulty `memcpy` in the TCS
|
- TCS heater switch info set contained invalid values because of a faulty `memcpy` in the TCS
|
||||||
controller. There is not crash risk but the heater states were invalid.
|
controller. There is not crash risk but the heater states were invalid.
|
||||||
|
- Fixed usage of quaternion valid flag, which does not actually represent the validity of the
|
||||||
|
quaternion.
|
||||||
- Various fixes for the pointing modes of the `ACS Controller`. All modes should work now as
|
- Various fixes for the pointing modes of the `ACS Controller`. All modes should work now as
|
||||||
intended.
|
intended.
|
||||||
|
|
||||||
|
@ -353,8 +353,10 @@ void AcsController::performPointingCtrl() {
|
|||||||
double rwPseudoInv[4][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
|
double rwPseudoInv[4][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
|
||||||
result = guidance.getDistributionMatrixRw(&sensorValues, *rwPseudoInv);
|
result = guidance.getDistributionMatrixRw(&sensorValues, *rwPseudoInv);
|
||||||
if (result == returnvalue::FAILED) {
|
if (result == returnvalue::FAILED) {
|
||||||
if (multipleRwUnavailableCounter == 5) {
|
if (multipleRwUnavailableCounter >=
|
||||||
|
acsParameters.rwHandlingParameters.multipleRwInvalidTimeout) {
|
||||||
triggerEvent(acs::MULTIPLE_RW_INVALID);
|
triggerEvent(acs::MULTIPLE_RW_INVALID);
|
||||||
|
multipleRwUnavailableCounter = 0;
|
||||||
}
|
}
|
||||||
multipleRwUnavailableCounter++;
|
multipleRwUnavailableCounter++;
|
||||||
return;
|
return;
|
||||||
|
@ -290,6 +290,9 @@ ReturnValue_t AcsParameters::getParameter(uint8_t domainId, uint8_t parameterId,
|
|||||||
case 0x6:
|
case 0x6:
|
||||||
parameterWrapper->set(rwHandlingParameters.rampTime);
|
parameterWrapper->set(rwHandlingParameters.rampTime);
|
||||||
break;
|
break;
|
||||||
|
case 0x7:
|
||||||
|
parameterWrapper->set(rwHandlingParameters.multipleRwInvalidTimeout);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return INVALID_IDENTIFIER_ID;
|
return INVALID_IDENTIFIER_ID;
|
||||||
}
|
}
|
||||||
|
@ -798,6 +798,8 @@ class AcsParameters : public HasParametersIF {
|
|||||||
double stictionTorque = 0.0006;
|
double stictionTorque = 0.0006;
|
||||||
|
|
||||||
uint16_t rampTime = 10;
|
uint16_t rampTime = 10;
|
||||||
|
|
||||||
|
uint32_t multipleRwInvalidTimeout = 25;
|
||||||
} rwHandlingParameters;
|
} rwHandlingParameters;
|
||||||
|
|
||||||
struct RwMatrices {
|
struct RwMatrices {
|
||||||
|
@ -19,9 +19,7 @@ ReturnValue_t Navigation::useMekf(ACS::SensorValues *sensorValues,
|
|||||||
acsctrl::MekfData *mekfData, AcsParameters *acsParameters) {
|
acsctrl::MekfData *mekfData, AcsParameters *acsParameters) {
|
||||||
double quatIB[4] = {sensorValues->strSet.caliQx.value, sensorValues->strSet.caliQy.value,
|
double quatIB[4] = {sensorValues->strSet.caliQx.value, sensorValues->strSet.caliQy.value,
|
||||||
sensorValues->strSet.caliQz.value, sensorValues->strSet.caliQw.value};
|
sensorValues->strSet.caliQz.value, sensorValues->strSet.caliQw.value};
|
||||||
bool quatIBValid = sensorValues->strSet.caliQx.isValid() &&
|
bool quatIBValid = sensorValues->strSet.isTrustWorthy.value;
|
||||||
sensorValues->strSet.caliQy.isValid() &&
|
|
||||||
sensorValues->strSet.caliQz.isValid() && sensorValues->strSet.caliQw.isValid();
|
|
||||||
|
|
||||||
if (mekfStatus == MultiplicativeKalmanFilter::MEKF_UNINITIALIZED) {
|
if (mekfStatus == MultiplicativeKalmanFilter::MEKF_UNINITIALIZED) {
|
||||||
mekfStatus = multiplicativeKalmanFilter.init(
|
mekfStatus = multiplicativeKalmanFilter.init(
|
||||||
|
Loading…
Reference in New Issue
Block a user