Skip to content

Commit 7a7fcf3

Browse files
authored
Merge pull request #6054 from Scavanger/FF-Adjustment
[Fix] Tune FF instead of D via inflight adjustments if PIFF controller is active
2 parents b3503d9 + a53b1c0 commit 7a7fcf3

File tree

7 files changed

+62
-52
lines changed

7 files changed

+62
-52
lines changed

docs/Inflight Adjustments.md

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -113,45 +113,45 @@ this reason ensure that you define enough ranges to cover the range channel's us
113113
| 8 | PITCH_ROLL_D |
114114
| 9 | YAW_P |
115115
| 10 | YAW_I |
116-
| 11 | YAW_D |
116+
| 11 | YAW_D_FF |
117117
| 12 | RATE_PROFILE | Switch between 3 rate profiles using a 3 position switch. |
118118
| 13 | PITCH_RATE |
119119
| 14 | ROLL_RATE |
120120
| 15 | PITCH_P |
121121
| 16 | PITCH_I |
122-
| 17 | PITCH_D |
122+
| 17 | PITCH_D_FF |
123123
| 18 | ROLL_P |
124124
| 19 | ROLL_I |
125-
| 20 | RC_YAW_EXPO |
126-
| 21 | MANUAL_RC_EXPO |
127-
| 22 | MANUAL_RC_YAW_EXPO |
128-
| 23 | MANUAL_PITCH_ROLL_RATE |
129-
| 24 | MANUAL_ROLL_RATE |
130-
| 25 | MANUAL_PITCH_RATE |
131-
| 26 | MANUAL_YAW_RATE |
132-
| 27 | NAV_FW_CRUISE_THROTTLE |
133-
| 28 | NAV_FW_PITCH2THR |
134-
| 29 | ROLL_BOARD_ALIGNMENT |
135-
| 30 | PITCH_BOARD_ALIGNMENT |
136-
| 31 | LEVEL_P |
137-
| 32 | LEVEL_I |
138-
| 33 | LEVEL_D |
139-
| 34 | POS_XY_P |
140-
| 35 | POS_XY_I |
141-
| 36 | POS_XY_D |
142-
| 37 | POS_Z_P |
143-
| 38 | POS_Z_I |
144-
| 39 | POS_Z_D |
145-
| 40 | HEADING_P |
146-
| 41 | VEL_XY_P |
147-
| 42 | VEL_XY_I |
148-
| 43 | VEL_XY_D |
149-
| 44 | VEL_Z_P |
125+
| 20 | ROLL_D_FF |
126+
| 21 | RC_YAW_EXPO |
127+
| 22 | MANUAL_RC_EXPO |
128+
| 23 | MANUAL_RC_YAW_EXPO |
129+
| 24 | MANUAL_PITCH_ROLL_RATE |
130+
| 25 | MANUAL_ROLL_RATE |
131+
| 26 | MANUAL_PITCH_RATE |
132+
| 27 | MANUAL_YAW_RATE |
133+
| 28 | NAV_FW_CRUISE_THROTTLE |
134+
| 29 | NAV_FW_PITCH2THR |
135+
| 30 | ROLL_BOARD_ALIGNMENT |
136+
| 31 | PITCH_BOARD_ALIGNMENT |
137+
| 32 | LEVEL_P |
138+
| 33 | LEVEL_I |
139+
| 34 | LEVEL_D |
140+
| 35 | POS_XY_P |
141+
| 36 | POS_XY_I |
142+
| 37 | POS_XY_D |
143+
| 38 | POS_Z_P |
144+
| 39 | POS_Z_I |
145+
| 40 | POS_Z_D |
146+
| 41 | HEADING_P |
147+
| 42 | VEL_XY_P |
148+
| 43 | VEL_XY_I |
149+
| 44 | VEL_XY_D |
150150
| 45 | VEL_Z_P |
151151
| 46 | VEL_Z_I |
152152
| 47 | VEL_Z_D |
153153
| 48 | FW_MIN_THROTTLE_DOWN_PITCH_ANGLE |
154-
| 49 | PROFILE | Switch between 3 rate profiles using a 3 position switch. |
154+
| 49 | ADJUSTMENT_VTX_POWER_LEVEL |
155155

156156
## Examples
157157

@@ -263,4 +263,4 @@ The following examples shows __incorrect__ configurations - the entire usable ra
263263

264264
In the following example, the incorrect configuraton (above) has been corrected by adding a range that makes 'No changes'.
265265

266-
![Configurator example 7](Screenshots/adjustments-incorrect-config-2-corrected.png)
266+
![Configurator example 7](Screenshots/adjustments-incorrect-config-2-corrected.png)

src/main/fc/rc_adjustments.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
101101
.mode = ADJUSTMENT_MODE_STEP,
102102
.data = { .stepConfig = { .step = 1 }}
103103
}, {
104-
.adjustmentFunction = ADJUSTMENT_PITCH_ROLL_D,
104+
.adjustmentFunction = ADJUSTMENT_PITCH_ROLL_D_FF,
105105
.mode = ADJUSTMENT_MODE_STEP,
106106
.data = { .stepConfig = { .step = 1 }}
107107
}, {
@@ -113,7 +113,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
113113
.mode = ADJUSTMENT_MODE_STEP,
114114
.data = { .stepConfig = { .step = 1 }}
115115
}, {
116-
.adjustmentFunction = ADJUSTMENT_YAW_D,
116+
.adjustmentFunction = ADJUSTMENT_YAW_D_FF,
117117
.mode = ADJUSTMENT_MODE_STEP,
118118
.data = { .stepConfig = { .step = 1 }}
119119
}, {
@@ -137,7 +137,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
137137
.mode = ADJUSTMENT_MODE_STEP,
138138
.data = { .stepConfig = { .step = 1 }}
139139
}, {
140-
.adjustmentFunction = ADJUSTMENT_PITCH_D,
140+
.adjustmentFunction = ADJUSTMENT_PITCH_D_FF,
141141
.mode = ADJUSTMENT_MODE_STEP,
142142
.data = { .stepConfig = { .step = 1 }}
143143
}, {
@@ -149,7 +149,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
149149
.mode = ADJUSTMENT_MODE_STEP,
150150
.data = { .stepConfig = { .step = 1 }}
151151
}, {
152-
.adjustmentFunction = ADJUSTMENT_ROLL_D,
152+
.adjustmentFunction = ADJUSTMENT_ROLL_D_FF,
153153
.mode = ADJUSTMENT_MODE_STEP,
154154
.data = { .stepConfig = { .step = 1 }}
155155
}, {
@@ -441,18 +441,18 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
441441
applyAdjustmentPID(ADJUSTMENT_ROLL_I, &pidBankMutable()->pid[PID_ROLL].I, delta);
442442
schedulePidGainsUpdate();
443443
break;
444-
case ADJUSTMENT_PITCH_ROLL_D:
445-
case ADJUSTMENT_PITCH_D:
446-
applyAdjustmentPID(ADJUSTMENT_PITCH_D, &pidBankMutable()->pid[PID_PITCH].D, delta);
447-
if (adjustmentFunction == ADJUSTMENT_PITCH_D) {
444+
case ADJUSTMENT_PITCH_ROLL_D_FF:
445+
case ADJUSTMENT_PITCH_D_FF:
446+
applyAdjustmentPID(ADJUSTMENT_PITCH_D_FF, getD_FFRefByBank(pidBankMutable(), PID_PITCH), delta);
447+
if (adjustmentFunction == ADJUSTMENT_PITCH_D_FF) {
448448
schedulePidGainsUpdate();
449449
break;
450450
}
451451
// follow though for combined ADJUSTMENT_PITCH_ROLL_D
452452
FALLTHROUGH;
453453

454-
case ADJUSTMENT_ROLL_D:
455-
applyAdjustmentPID(ADJUSTMENT_ROLL_D, &pidBankMutable()->pid[PID_ROLL].D, delta);
454+
case ADJUSTMENT_ROLL_D_FF:
455+
applyAdjustmentPID(ADJUSTMENT_ROLL_D_FF, getD_FFRefByBank(pidBankMutable(), PID_ROLL), delta);
456456
schedulePidGainsUpdate();
457457
break;
458458
case ADJUSTMENT_YAW_P:
@@ -463,8 +463,8 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
463463
applyAdjustmentPID(ADJUSTMENT_YAW_I, &pidBankMutable()->pid[PID_YAW].I, delta);
464464
schedulePidGainsUpdate();
465465
break;
466-
case ADJUSTMENT_YAW_D:
467-
applyAdjustmentPID(ADJUSTMENT_YAW_D, &pidBankMutable()->pid[PID_YAW].D, delta);
466+
case ADJUSTMENT_YAW_D_FF:
467+
applyAdjustmentPID(ADJUSTMENT_YAW_D_FF, getD_FFRefByBank(pidBankMutable(), PID_YAW), delta);
468468
schedulePidGainsUpdate();
469469
break;
470470
case ADJUSTMENT_NAV_FW_CRUISE_THR:

src/main/fc/rc_adjustments.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,19 @@ typedef enum {
3333
ADJUSTMENT_YAW_RATE = 5,
3434
ADJUSTMENT_PITCH_ROLL_P = 6,
3535
ADJUSTMENT_PITCH_ROLL_I = 7,
36-
ADJUSTMENT_PITCH_ROLL_D = 8,
36+
ADJUSTMENT_PITCH_ROLL_D_FF = 8,
3737
ADJUSTMENT_YAW_P = 9,
3838
ADJUSTMENT_YAW_I = 10,
39-
ADJUSTMENT_YAW_D = 11,
39+
ADJUSTMENT_YAW_D_FF = 11,
4040
ADJUSTMENT_RATE_PROFILE = 12, // Unused, placeholder for compatibility
4141
ADJUSTMENT_PITCH_RATE = 13,
4242
ADJUSTMENT_ROLL_RATE = 14,
4343
ADJUSTMENT_PITCH_P = 15,
4444
ADJUSTMENT_PITCH_I = 16,
45-
ADJUSTMENT_PITCH_D = 17,
45+
ADJUSTMENT_PITCH_D_FF = 17,
4646
ADJUSTMENT_ROLL_P = 18,
4747
ADJUSTMENT_ROLL_I = 19,
48-
ADJUSTMENT_ROLL_D = 20,
48+
ADJUSTMENT_ROLL_D_FF = 20,
4949
ADJUSTMENT_RC_YAW_EXPO = 21,
5050
ADJUSTMENT_MANUAL_RC_EXPO = 22,
5151
ADJUSTMENT_MANUAL_RC_YAW_EXPO = 23,

src/main/flight/pid.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,3 +1114,12 @@ const pidBank_t * pidBank(void) {
11141114
pidBank_t * pidBankMutable(void) {
11151115
return usedPidControllerType == PID_TYPE_PIFF ? &pidProfileMutable()->bank_fw : &pidProfileMutable()->bank_mc;
11161116
}
1117+
1118+
uint8_t * getD_FFRefByBank(pidBank_t *pidBank, pidIndex_e pidIndex)
1119+
{
1120+
if (pidIndexGetType(pidIndex) == PID_TYPE_PIFF) {
1121+
return &pidBank->pid[pidIndex].FF;
1122+
} else {
1123+
return &pidBank->pid[pidIndex].D;
1124+
}
1125+
}

src/main/flight/pid.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,3 +198,4 @@ void autotuneUpdateState(void);
198198
void autotuneFixedWingUpdate(const flight_dynamics_index_t axis, float desiredRateDps, float reachedRateDps, float pidOutput);
199199

200200
pidType_e pidIndexGetType(pidIndex_e pidIndex);
201+
uint8_t * getD_FFRefByBank(pidBank_t *pidBank, pidIndex_e pidIndex);

src/main/flight/pid_autotune.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,15 @@ void autotuneFixedWingUpdate(const flight_dynamics_index_t axis, float desiredRa
230230

231231
switch (axis) {
232232
case FD_ROLL:
233-
blackboxLogAutotuneEvent(ADJUSTMENT_ROLL_D, tuneCurrent[axis].gainFF);
233+
blackboxLogAutotuneEvent(ADJUSTMENT_ROLL_D_FF, tuneCurrent[axis].gainFF);
234234
break;
235235

236236
case FD_PITCH:
237-
blackboxLogAutotuneEvent(ADJUSTMENT_PITCH_D, tuneCurrent[axis].gainFF);
237+
blackboxLogAutotuneEvent(ADJUSTMENT_PITCH_D_FF, tuneCurrent[axis].gainFF);
238238
break;
239239

240240
case FD_YAW:
241-
blackboxLogAutotuneEvent(ADJUSTMENT_YAW_D, tuneCurrent[axis].gainFF);
241+
blackboxLogAutotuneEvent(ADJUSTMENT_YAW_D_FF, tuneCurrent[axis].gainFF);
242242
break;
243243
}
244244
}

src/main/io/osd.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,7 +1185,7 @@ static void osdDisplayPIDValues(uint8_t elemPosX, uint8_t elemPosY, const char *
11851185

11861186
elemAttr = TEXT_ATTRIBUTES_NONE;
11871187
tfp_sprintf(buff, "%3d", pidType == PID_TYPE_PIFF ? pid->FF : pid->D);
1188-
if ((isAdjustmentFunctionSelected(adjFuncD)) || (((adjFuncD == ADJUSTMENT_ROLL_D) || (adjFuncD == ADJUSTMENT_PITCH_D)) && (isAdjustmentFunctionSelected(ADJUSTMENT_PITCH_ROLL_D))))
1188+
if ((isAdjustmentFunctionSelected(adjFuncD)) || (((adjFuncD == ADJUSTMENT_ROLL_D_FF) || (adjFuncD == ADJUSTMENT_PITCH_D_FF)) && (isAdjustmentFunctionSelected(ADJUSTMENT_PITCH_ROLL_D_FF))))
11891189
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
11901190
displayWriteWithAttr(osdDisplayPort, elemPosX + 12, elemPosY, buff, elemAttr);
11911191
}
@@ -1825,15 +1825,15 @@ static bool osdDrawSingleElement(uint8_t item)
18251825
#endif
18261826

18271827
case OSD_ROLL_PIDS:
1828-
osdDisplayPIDValues(elemPosX, elemPosY, "ROL", PID_ROLL, ADJUSTMENT_ROLL_P, ADJUSTMENT_ROLL_I, ADJUSTMENT_ROLL_D);
1828+
osdDisplayPIDValues(elemPosX, elemPosY, "ROL", PID_ROLL, ADJUSTMENT_ROLL_P, ADJUSTMENT_ROLL_I, ADJUSTMENT_ROLL_D_FF);
18291829
return true;
18301830

18311831
case OSD_PITCH_PIDS:
1832-
osdDisplayPIDValues(elemPosX, elemPosY, "PIT", PID_PITCH, ADJUSTMENT_PITCH_P, ADJUSTMENT_PITCH_I, ADJUSTMENT_PITCH_D);
1832+
osdDisplayPIDValues(elemPosX, elemPosY, "PIT", PID_PITCH, ADJUSTMENT_PITCH_P, ADJUSTMENT_PITCH_I, ADJUSTMENT_PITCH_D_FF);
18331833
return true;
18341834

18351835
case OSD_YAW_PIDS:
1836-
osdDisplayPIDValues(elemPosX, elemPosY, "YAW", PID_YAW, ADJUSTMENT_YAW_P, ADJUSTMENT_YAW_I, ADJUSTMENT_YAW_D);
1836+
osdDisplayPIDValues(elemPosX, elemPosY, "YAW", PID_YAW, ADJUSTMENT_YAW_P, ADJUSTMENT_YAW_I, ADJUSTMENT_YAW_D_FF);
18371837
return true;
18381838

18391839
case OSD_LEVEL_PIDS:

0 commit comments

Comments
 (0)