Merge remote-tracking branch 'origin/develop' into mueller/pus-15-tm-storage
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
This commit is contained in:
commit
cb869fef0c
14
CHANGELOG.md
14
CHANGELOG.md
@ -26,6 +26,20 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
- Changed format of `getCurrentMountPrefix` to return a `const char*`.
|
- Changed format of `getCurrentMountPrefix` to return a `const char*`.
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- ADIS1650X: Added missing MDL_RANG pool entry for configuration set
|
||||||
|
|
||||||
|
# [v1.31.1]
|
||||||
|
|
||||||
|
## Fixed
|
||||||
|
|
||||||
|
- ADIS1650X configuration set was empty because the local pool variables were not registered.
|
||||||
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/402
|
||||||
|
- ACS Controller: Correction for size of MEKF dataset and some optimization and fixes
|
||||||
|
for actuator control which lead to a crash.
|
||||||
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/403
|
||||||
|
|
||||||
# [v1.31.0]
|
# [v1.31.0]
|
||||||
|
|
||||||
eive-tmtc: v2.16.0
|
eive-tmtc: v2.16.0
|
||||||
|
@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13)
|
|||||||
|
|
||||||
set(OBSW_VERSION_MAJOR 1)
|
set(OBSW_VERSION_MAJOR 1)
|
||||||
set(OBSW_VERSION_MINOR 31)
|
set(OBSW_VERSION_MINOR 31)
|
||||||
set(OBSW_VERSION_REVISION 0)
|
set(OBSW_VERSION_REVISION 1)
|
||||||
|
|
||||||
# set(CMAKE_VERBOSE TRUE)
|
# set(CMAKE_VERBOSE TRUE)
|
||||||
|
|
||||||
|
@ -432,64 +432,52 @@ ReturnValue_t AcsController::commandActuators(int16_t xDipole, int16_t yDipole,
|
|||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcsController::updateActuatorCmdData(int16_t mtqTargetDipole[3]) {
|
void AcsController::updateActuatorCmdData(const int16_t *mtqTargetDipole) {
|
||||||
double rwTargetTorque[4] = {0.0, 0.0, 0.0, 0.0};
|
updateActuatorCmdData(RW_OFF_TORQUE, RW_OFF_SPEED, mtqTargetDipole);
|
||||||
int32_t rwTargetSpeed[4] = {0, 0, 0, 0};
|
|
||||||
updateActuatorCmdData(rwTargetTorque, rwTargetSpeed, mtqTargetDipole);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcsController::updateActuatorCmdData(double rwTargetTorque[4], int32_t rwTargetSpeed[4],
|
void AcsController::updateActuatorCmdData(const double *rwTargetTorque,
|
||||||
int16_t mtqTargetDipole[3]) {
|
const int32_t *rwTargetSpeed,
|
||||||
{
|
const int16_t *mtqTargetDipole) {
|
||||||
PoolReadGuard pg(&actuatorCmdData);
|
PoolReadGuard pg(&actuatorCmdData);
|
||||||
if (pg.getReadResult() == returnvalue::OK) {
|
if (pg.getReadResult() == returnvalue::OK) {
|
||||||
std::memcpy(actuatorCmdData.rwTargetTorque.value, rwTargetTorque, 4 * sizeof(double));
|
std::memcpy(actuatorCmdData.rwTargetTorque.value, rwTargetTorque, 4 * sizeof(double));
|
||||||
std::memcpy(actuatorCmdData.rwTargetSpeed.value, rwTargetSpeed, 4 * sizeof(int32_t));
|
std::memcpy(actuatorCmdData.rwTargetSpeed.value, rwTargetSpeed, 4 * sizeof(int32_t));
|
||||||
std::memcpy(actuatorCmdData.mtqTargetDipole.value, mtqTargetDipole, 3 * sizeof(int16_t));
|
std::memcpy(actuatorCmdData.mtqTargetDipole.value, mtqTargetDipole, 3 * sizeof(int16_t));
|
||||||
actuatorCmdData.setValidity(true, true);
|
actuatorCmdData.setValidity(true, true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcsController::updateCtrlValData(double errAng) {
|
void AcsController::updateCtrlValData(double errAng) {
|
||||||
double unitQuat[4] = {0, 0, 0, 1};
|
PoolReadGuard pg(&ctrlValData);
|
||||||
{
|
if (pg.getReadResult() == returnvalue::OK) {
|
||||||
PoolReadGuard pg(&ctrlValData);
|
std::memcpy(ctrlValData.tgtQuat.value, UNIT_QUAT, 4 * sizeof(double));
|
||||||
if (pg.getReadResult() == returnvalue::OK) {
|
ctrlValData.tgtQuat.setValid(false);
|
||||||
std::memcpy(ctrlValData.tgtQuat.value, unitQuat, 4 * sizeof(double));
|
std::memcpy(ctrlValData.errQuat.value, UNIT_QUAT, 4 * sizeof(double));
|
||||||
ctrlValData.tgtQuat.setValid(false);
|
ctrlValData.errQuat.setValid(false);
|
||||||
std::memcpy(ctrlValData.errQuat.value, unitQuat, 4 * sizeof(double));
|
ctrlValData.errAng.value = errAng;
|
||||||
ctrlValData.errQuat.setValid(false);
|
ctrlValData.errAng.setValid(true);
|
||||||
ctrlValData.errAng.value = errAng;
|
ctrlValData.setValidity(true, false);
|
||||||
ctrlValData.errAng.setValid(true);
|
|
||||||
ctrlValData.setValidity(true, false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcsController::updateCtrlValData(double tgtQuat[4], double errQuat[4], double errAng) {
|
void AcsController::updateCtrlValData(const double *tgtQuat, const double *errQuat, double errAng) {
|
||||||
{
|
PoolReadGuard pg(&ctrlValData);
|
||||||
PoolReadGuard pg(&ctrlValData);
|
if (pg.getReadResult() == returnvalue::OK) {
|
||||||
if (pg.getReadResult() == returnvalue::OK) {
|
std::memcpy(ctrlValData.tgtQuat.value, tgtQuat, 4 * sizeof(double));
|
||||||
std::memcpy(ctrlValData.tgtQuat.value, tgtQuat, 4 * sizeof(double));
|
std::memcpy(ctrlValData.errQuat.value, errQuat, 4 * sizeof(double));
|
||||||
std::memcpy(ctrlValData.errQuat.value, errQuat, 4 * sizeof(double));
|
ctrlValData.errAng.value = errAng;
|
||||||
ctrlValData.errAng.value = errAng;
|
ctrlValData.setValidity(true, true);
|
||||||
ctrlValData.setValidity(true, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcsController::disableCtrlValData() {
|
void AcsController::disableCtrlValData() {
|
||||||
double unitQuat[4] = {0, 0, 0, 1};
|
PoolReadGuard pg(&ctrlValData);
|
||||||
double errAng = 0;
|
if (pg.getReadResult() == returnvalue::OK) {
|
||||||
{
|
std::memcpy(ctrlValData.tgtQuat.value, UNIT_QUAT, 4 * sizeof(double));
|
||||||
PoolReadGuard pg(&ctrlValData);
|
std::memcpy(ctrlValData.errQuat.value, UNIT_QUAT, 4 * sizeof(double));
|
||||||
if (pg.getReadResult() == returnvalue::OK) {
|
ctrlValData.errAng.value = 0;
|
||||||
std::memcpy(ctrlValData.tgtQuat.value, unitQuat, 4 * sizeof(double));
|
ctrlValData.setValidity(false, true);
|
||||||
std::memcpy(ctrlValData.errQuat.value, unitQuat, 4 * sizeof(double));
|
|
||||||
ctrlValData.errAng.value = errAng;
|
|
||||||
ctrlValData.setValidity(false, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +40,10 @@ class AcsController : public ExtendedControllerBase, public ReceivesParameterMes
|
|||||||
void performPointingCtrl();
|
void performPointingCtrl();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static constexpr double UNIT_QUAT[4] = {0, 0, 0, 1};
|
||||||
|
static constexpr double RW_OFF_TORQUE[4] = {0.0, 0.0, 0.0, 0.0};
|
||||||
|
static constexpr int32_t RW_OFF_SPEED[4] = {0, 0, 0, 0};
|
||||||
|
|
||||||
AcsParameters acsParameters;
|
AcsParameters acsParameters;
|
||||||
SensorProcessing sensorProcessing;
|
SensorProcessing sensorProcessing;
|
||||||
Navigation navigation;
|
Navigation navigation;
|
||||||
@ -84,11 +88,11 @@ class AcsController : public ExtendedControllerBase, public ReceivesParameterMes
|
|||||||
ReturnValue_t commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole,
|
ReturnValue_t commandActuators(int16_t xDipole, int16_t yDipole, int16_t zDipole,
|
||||||
uint16_t dipoleTorqueDuration, int32_t rw1Speed, int32_t rw2Speed,
|
uint16_t dipoleTorqueDuration, int32_t rw1Speed, int32_t rw2Speed,
|
||||||
int32_t rw3Speed, int32_t rw4Speed, uint16_t rampTime);
|
int32_t rw3Speed, int32_t rw4Speed, uint16_t rampTime);
|
||||||
void updateActuatorCmdData(int16_t mtqTargetDipole[3]);
|
void updateActuatorCmdData(const int16_t* mtqTargetDipole);
|
||||||
void updateActuatorCmdData(double rwTargetTorque[4], int32_t rwTargetSpeed[4],
|
void updateActuatorCmdData(const double* rwTargetTorque, const int32_t* rwTargetSpeed,
|
||||||
int16_t mtqTargetDipole[3]);
|
const int16_t* mtqTargetDipole);
|
||||||
void updateCtrlValData(double errAng);
|
void updateCtrlValData(double errAng);
|
||||||
void updateCtrlValData(double tgtQuat[4], double errQuat[4], double errAng);
|
void updateCtrlValData(const double* tgtQuat, const double* errQuat, double errAng);
|
||||||
void disableCtrlValData();
|
void disableCtrlValData();
|
||||||
|
|
||||||
/* ACS Sensor Values */
|
/* ACS Sensor Values */
|
||||||
@ -187,7 +191,7 @@ class AcsController : public ExtendedControllerBase, public ReceivesParameterMes
|
|||||||
PoolEntry<double> tgtQuat = PoolEntry<double>(4);
|
PoolEntry<double> tgtQuat = PoolEntry<double>(4);
|
||||||
PoolEntry<double> errQuat = PoolEntry<double>(4);
|
PoolEntry<double> errQuat = PoolEntry<double>(4);
|
||||||
PoolEntry<double> errAng = PoolEntry<double>();
|
PoolEntry<double> errAng = PoolEntry<double>();
|
||||||
PoolEntry<double> tgtRotRate = PoolEntry<double>(4);
|
PoolEntry<double> tgtRotRate = PoolEntry<double>(3);
|
||||||
|
|
||||||
// Actuator CMD
|
// Actuator CMD
|
||||||
acsctrl::ActuatorCmdData actuatorCmdData;
|
acsctrl::ActuatorCmdData actuatorCmdData;
|
||||||
|
@ -110,7 +110,7 @@ static constexpr uint8_t SUS_SET_PROCESSED_ENTRIES = 15;
|
|||||||
static constexpr uint8_t GYR_SET_RAW_ENTRIES = 4;
|
static constexpr uint8_t GYR_SET_RAW_ENTRIES = 4;
|
||||||
static constexpr uint8_t GYR_SET_PROCESSED_ENTRIES = 5;
|
static constexpr uint8_t GYR_SET_PROCESSED_ENTRIES = 5;
|
||||||
static constexpr uint8_t GPS_SET_PROCESSED_ENTRIES = 4;
|
static constexpr uint8_t GPS_SET_PROCESSED_ENTRIES = 4;
|
||||||
static constexpr uint8_t MEKF_SET_ENTRIES = 2;
|
static constexpr uint8_t MEKF_SET_ENTRIES = 3;
|
||||||
static constexpr uint8_t CTRL_VAL_SET_ENTRIES = 4;
|
static constexpr uint8_t CTRL_VAL_SET_ENTRIES = 4;
|
||||||
static constexpr uint8_t ACT_CMD_SET_ENTRIES = 3;
|
static constexpr uint8_t ACT_CMD_SET_ENTRIES = 3;
|
||||||
|
|
||||||
|
@ -385,6 +385,7 @@ ReturnValue_t GyroADIS1650XHandler::initializeLocalDataPool(localpool::DataPool
|
|||||||
|
|
||||||
localDataPoolMap.emplace(ADIS1650X::DIAG_STAT_REGISTER, new PoolEntry<uint16_t>());
|
localDataPoolMap.emplace(ADIS1650X::DIAG_STAT_REGISTER, new PoolEntry<uint16_t>());
|
||||||
localDataPoolMap.emplace(ADIS1650X::FILTER_SETTINGS, new PoolEntry<uint8_t>());
|
localDataPoolMap.emplace(ADIS1650X::FILTER_SETTINGS, new PoolEntry<uint8_t>());
|
||||||
|
localDataPoolMap.emplace(ADIS1650X::RANG_MDL, &rangMdl);
|
||||||
localDataPoolMap.emplace(ADIS1650X::MSC_CTRL_REGISTER, new PoolEntry<uint16_t>());
|
localDataPoolMap.emplace(ADIS1650X::MSC_CTRL_REGISTER, new PoolEntry<uint16_t>());
|
||||||
localDataPoolMap.emplace(ADIS1650X::DEC_RATE_REGISTER, new PoolEntry<uint16_t>());
|
localDataPoolMap.emplace(ADIS1650X::DEC_RATE_REGISTER, new PoolEntry<uint16_t>());
|
||||||
poolManager.subscribeForRegularPeriodicPacket(
|
poolManager.subscribeForRegularPeriodicPacket(
|
||||||
|
@ -63,6 +63,8 @@ class GyroADIS1650XHandler : public DeviceHandlerBase {
|
|||||||
InternalState internalState = InternalState::STARTUP;
|
InternalState internalState = InternalState::STARTUP;
|
||||||
bool commandExecuted = false;
|
bool commandExecuted = false;
|
||||||
|
|
||||||
|
PoolEntry<uint16_t> rangMdl = PoolEntry<uint16_t>();
|
||||||
|
|
||||||
void prepareReadCommand(uint8_t *regList, size_t len);
|
void prepareReadCommand(uint8_t *regList, size_t len);
|
||||||
|
|
||||||
BurstModes getBurstMode();
|
BurstModes getBurstMode();
|
||||||
|
@ -147,11 +147,15 @@ class AdisGyroConfigDataset : public StaticLocalDataSet<5> {
|
|||||||
setAllVariablesReadOnly();
|
setAllVariablesReadOnly();
|
||||||
}
|
}
|
||||||
|
|
||||||
lp_var_t<uint16_t> diagStatReg = lp_var_t<uint16_t>(sid.objectId, ADIS1650X::DIAG_STAT_REGISTER);
|
lp_var_t<uint16_t> diagStatReg =
|
||||||
lp_var_t<uint8_t> filterSetting = lp_var_t<uint8_t>(sid.objectId, ADIS1650X::FILTER_SETTINGS);
|
lp_var_t<uint16_t>(sid.objectId, ADIS1650X::DIAG_STAT_REGISTER, this);
|
||||||
lp_var_t<uint16_t> rangMdl = lp_var_t<uint16_t>(sid.objectId, ADIS1650X::RANG_MDL);
|
lp_var_t<uint8_t> filterSetting =
|
||||||
lp_var_t<uint16_t> mscCtrlReg = lp_var_t<uint16_t>(sid.objectId, ADIS1650X::MSC_CTRL_REGISTER);
|
lp_var_t<uint8_t>(sid.objectId, ADIS1650X::FILTER_SETTINGS, this);
|
||||||
lp_var_t<uint16_t> decRateReg = lp_var_t<uint16_t>(sid.objectId, ADIS1650X::DEC_RATE_REGISTER);
|
lp_var_t<uint16_t> rangMdl = lp_var_t<uint16_t>(sid.objectId, ADIS1650X::RANG_MDL, this);
|
||||||
|
lp_var_t<uint16_t> mscCtrlReg =
|
||||||
|
lp_var_t<uint16_t>(sid.objectId, ADIS1650X::MSC_CTRL_REGISTER, this);
|
||||||
|
lp_var_t<uint16_t> decRateReg =
|
||||||
|
lp_var_t<uint16_t>(sid.objectId, ADIS1650X::DEC_RATE_REGISTER, this);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class GyroADIS1650XHandler;
|
friend class GyroADIS1650XHandler;
|
||||||
|
@ -17,8 +17,8 @@ class ComSubsystem : public Subsystem, public ReceivesParameterMessagesIF {
|
|||||||
* @param maxNumberOfSequences
|
* @param maxNumberOfSequences
|
||||||
* @param maxNumberOfTables
|
* @param maxNumberOfTables
|
||||||
* @param transmitterTimeout Maximum time the transmitter of the syrlinks
|
* @param transmitterTimeout Maximum time the transmitter of the syrlinks
|
||||||
* will be
|
* will
|
||||||
* enabled
|
* be enabled
|
||||||
*/
|
*/
|
||||||
ComSubsystem(object_id_t setObjectId, uint32_t maxNumberOfSequences, uint32_t maxNumberOfTables,
|
ComSubsystem(object_id_t setObjectId, uint32_t maxNumberOfSequences, uint32_t maxNumberOfTables,
|
||||||
uint32_t transmitterTimeout);
|
uint32_t transmitterTimeout);
|
||||||
|
Loading…
Reference in New Issue
Block a user