1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-25 01:05:27 +03:00

Logging of the S -term values in blackbox for Fixed wings. (#14012)

* The S term values are added to blackbox logging for airplanes

* The axisS log fields are placed into NONZERO_WING_S_n group
This commit is contained in:
Vladimir Demidov 2024-11-23 20:08:47 +03:00 committed by GitHub
parent e422e42122
commit 57d32ea1da
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 0 deletions

View file

@ -205,6 +205,11 @@ static const blackboxDeltaFieldDefinition_t blackboxMainFields[] = {
{"axisF", 0, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(PID)},
{"axisF", 1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(PID)},
{"axisF", 2, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(PID)},
#ifdef USE_WING
{"axisS", 0, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(NONZERO_WING_S_0)},
{"axisS", 1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(NONZERO_WING_S_1)},
{"axisS", 2, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(SIGNED_VB), CONDITION(NONZERO_WING_S_2)},
#endif
/* rcCommands are encoded together as a group in P-frames: */
{"rcCommand", 0, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(TAG8_4S16), CONDITION(RC_COMMANDS)},
{"rcCommand", 1, SIGNED, .Ipredict = PREDICT(0), .Iencode = ENCODING(SIGNED_VB), .Ppredict = PREDICT(PREVIOUS), .Pencode = ENCODING(TAG8_4S16), CONDITION(RC_COMMANDS)},
@ -343,6 +348,7 @@ typedef struct blackboxMainState_s {
int32_t axisPID_I[XYZ_AXIS_COUNT];
int32_t axisPID_D[XYZ_AXIS_COUNT];
int32_t axisPID_F[XYZ_AXIS_COUNT];
int32_t axisPID_S[XYZ_AXIS_COUNT];
int16_t rcCommand[4];
int16_t setpoint[4];
@ -502,6 +508,13 @@ static bool testBlackboxConditionUncached(FlightLogFieldCondition condition)
case CONDITION(NONZERO_PID_D_2):
return (currentPidProfile->pid[condition - FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0].D != 0) && isFieldEnabled(FIELD_SELECT(PID));
#ifdef USE_WING
case CONDITION(NONZERO_WING_S_0):
case CONDITION(NONZERO_WING_S_1):
case CONDITION(NONZERO_WING_S_2):
return (currentPidProfile->pid[condition - CONDITION(NONZERO_WING_S_0)].S != 0) && isFieldEnabled(FIELD_SELECT(PID));
#endif
case CONDITION(RC_COMMANDS):
return isFieldEnabled(FIELD_SELECT(RC_COMMANDS));
@ -642,6 +655,14 @@ static void writeIntraframe(void)
}
blackboxWriteSignedVBArray(blackboxCurrent->axisPID_F, XYZ_AXIS_COUNT);
#ifdef USE_WING
for (int x = 0; x < XYZ_AXIS_COUNT; x++) {
if (testBlackboxCondition(CONDITION(NONZERO_WING_S_0) + x)) {
blackboxWriteSignedVB(blackboxCurrent->axisPID_S[x]);
}
}
#endif
}
if (testBlackboxCondition(CONDITION(RC_COMMANDS))) {
@ -813,6 +834,14 @@ static void writeInterframe(void)
arraySubInt32(deltas, blackboxCurrent->axisPID_F, blackboxLast->axisPID_F, XYZ_AXIS_COUNT);
blackboxWriteSignedVBArray(deltas, XYZ_AXIS_COUNT);
#ifdef USE_WING
for (int x = 0; x < XYZ_AXIS_COUNT; x++) {
if (testBlackboxCondition(CONDITION(NONZERO_WING_S_0) + x)) {
blackboxWriteSignedVB(blackboxCurrent->axisPID_S[x] - blackboxLast->axisPID_S[x]);
}
}
#endif
}
/*
@ -1185,8 +1214,12 @@ static void loadMainState(timeUs_t currentTimeUs)
blackboxCurrent->axisPID_I[i] = lrintf(pidData[i].I);
blackboxCurrent->axisPID_D[i] = lrintf(pidData[i].D);
blackboxCurrent->axisPID_F[i] = lrintf(pidData[i].F);
#ifdef USE_WING
blackboxCurrent->axisPID_S[i] = lrintf(pidData[i].S);
#endif
blackboxCurrent->gyroADC[i] = lrintf(gyro.gyroADCf[i] * blackboxHighResolutionScale);
blackboxCurrent->gyroUnfilt[i] = lrintf(gyro.gyroADC[i] * blackboxHighResolutionScale);
#if defined(USE_ACC)
blackboxCurrent->accADC[i] = lrintf(acc.accADC.v[i]);
#endif

View file

@ -58,6 +58,12 @@ typedef enum FlightLogFieldCondition {
FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_0,
FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_1,
FLIGHT_LOG_FIELD_CONDITION_NONZERO_PID_D_2,
#ifdef USE_WING
FLIGHT_LOG_FIELD_CONDITION_NONZERO_WING_S_0,
FLIGHT_LOG_FIELD_CONDITION_NONZERO_WING_S_1,
FLIGHT_LOG_FIELD_CONDITION_NONZERO_WING_S_2,
#endif
FLIGHT_LOG_FIELD_CONDITION_RC_COMMANDS,
FLIGHT_LOG_FIELD_CONDITION_SETPOINT,