mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-16 12:55:19 +03:00
Simplified the calculations, fixed tests.
This commit is contained in:
parent
2bbe525853
commit
bc4701aebf
2 changed files with 4 additions and 6 deletions
|
@ -282,7 +282,6 @@ static FAST_RAM_ZERO_INIT pt1Filter_t windupLpf[XYZ_AXIS_COUNT];
|
|||
static FAST_RAM_ZERO_INIT uint8_t itermRelax;
|
||||
static FAST_RAM_ZERO_INIT uint8_t itermRelaxType;
|
||||
static uint8_t itermRelaxCutoff;
|
||||
static FAST_RAM_ZERO_INIT float itermRelaxSetpointThreshold;
|
||||
#endif
|
||||
|
||||
#if defined(USE_ABSOLUTE_CONTROL)
|
||||
|
@ -665,7 +664,6 @@ void pidInitConfig(const pidProfile_t *pidProfile)
|
|||
itermRelax = pidProfile->iterm_relax;
|
||||
itermRelaxType = pidProfile->iterm_relax_type;
|
||||
itermRelaxCutoff = pidProfile->iterm_relax_cutoff;
|
||||
itermRelaxSetpointThreshold = ITERM_RELAX_SETPOINT_THRESHOLD;
|
||||
#endif
|
||||
|
||||
#ifdef USE_ACRO_TRAINER
|
||||
|
@ -1160,7 +1158,7 @@ STATIC_UNIT_TESTED void applyItermRelax(const int axis, const float iterm,
|
|||
|
||||
if (itermRelax) {
|
||||
if (axis < FD_YAW || itermRelax == ITERM_RELAX_RPY || itermRelax == ITERM_RELAX_RPY_INC) {
|
||||
const float itermRelaxFactor = MAX(0, 1 - setpointHpf / itermRelaxSetpointThreshold);
|
||||
const float itermRelaxFactor = MAX(0, 1 - setpointHpf / ITERM_RELAX_SETPOINT_THRESHOLD);
|
||||
const bool isDecreasingI =
|
||||
((iterm > 0) && (*itermErrorRate < 0)) || ((iterm < 0) && (*itermErrorRate > 0));
|
||||
if ((itermRelax >= ITERM_RELAX_RP_INC) && isDecreasingI) {
|
||||
|
|
|
@ -541,9 +541,9 @@ TEST(pidControllerTest, testItermRelax) {
|
|||
EXPECT_NEAR(-8.16, itermErrorRate, calculateTolerance(-8.16));
|
||||
currentPidSetpoint += ITERM_RELAX_SETPOINT_THRESHOLD;
|
||||
applyItermRelax(FD_PITCH, pidData[FD_PITCH].I, gyroRate, &itermErrorRate, ¤tPidSetpoint);
|
||||
EXPECT_NEAR(-2.69, itermErrorRate, calculateTolerance(-2.69));
|
||||
EXPECT_NEAR(0, itermErrorRate, calculateTolerance(0));
|
||||
applyItermRelax(FD_PITCH, pidData[FD_PITCH].I, gyroRate, &itermErrorRate, ¤tPidSetpoint);
|
||||
EXPECT_NEAR(-0.84, itermErrorRate, calculateTolerance(-0.84));
|
||||
EXPECT_NEAR(0, itermErrorRate, calculateTolerance(0));
|
||||
|
||||
pidProfile->iterm_relax_type = ITERM_RELAX_GYRO;
|
||||
pidInit(pidProfile);
|
||||
|
@ -587,7 +587,7 @@ TEST(pidControllerTest, testItermRelax) {
|
|||
pidProfile->iterm_relax = ITERM_RELAX_RPY;
|
||||
pidInit(pidProfile);
|
||||
applyItermRelax(FD_YAW, pidData[FD_YAW].I, gyroRate, &itermErrorRate, ¤tPidSetpoint);
|
||||
EXPECT_NEAR(-6.46, itermErrorRate, calculateTolerance(-3.6));
|
||||
EXPECT_NEAR(-3.6, itermErrorRate, calculateTolerance(-3.6));
|
||||
}
|
||||
|
||||
// TODO - Add more tests
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue