mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-25 01:05:21 +03:00
Add FF to inflight adjustments
This commit is contained in:
parent
d946907af2
commit
a53b1c0619
7 changed files with 62 additions and 52 deletions
|
@ -113,45 +113,45 @@ this reason ensure that you define enough ranges to cover the range channel's us
|
||||||
| 8 | PITCH_ROLL_D |
|
| 8 | PITCH_ROLL_D |
|
||||||
| 9 | YAW_P |
|
| 9 | YAW_P |
|
||||||
| 10 | YAW_I |
|
| 10 | YAW_I |
|
||||||
| 11 | YAW_D |
|
| 11 | YAW_D_FF |
|
||||||
| 12 | RATE_PROFILE | Switch between 3 rate profiles using a 3 position switch. |
|
| 12 | RATE_PROFILE | Switch between 3 rate profiles using a 3 position switch. |
|
||||||
| 13 | PITCH_RATE |
|
| 13 | PITCH_RATE |
|
||||||
| 14 | ROLL_RATE |
|
| 14 | ROLL_RATE |
|
||||||
| 15 | PITCH_P |
|
| 15 | PITCH_P |
|
||||||
| 16 | PITCH_I |
|
| 16 | PITCH_I |
|
||||||
| 17 | PITCH_D |
|
| 17 | PITCH_D_FF |
|
||||||
| 18 | ROLL_P |
|
| 18 | ROLL_P |
|
||||||
| 19 | ROLL_I |
|
| 19 | ROLL_I |
|
||||||
| 20 | RC_YAW_EXPO |
|
| 20 | ROLL_D_FF |
|
||||||
| 21 | MANUAL_RC_EXPO |
|
| 21 | RC_YAW_EXPO |
|
||||||
| 22 | MANUAL_RC_YAW_EXPO |
|
| 22 | MANUAL_RC_EXPO |
|
||||||
| 23 | MANUAL_PITCH_ROLL_RATE |
|
| 23 | MANUAL_RC_YAW_EXPO |
|
||||||
| 24 | MANUAL_ROLL_RATE |
|
| 24 | MANUAL_PITCH_ROLL_RATE |
|
||||||
| 25 | MANUAL_PITCH_RATE |
|
| 25 | MANUAL_ROLL_RATE |
|
||||||
| 26 | MANUAL_YAW_RATE |
|
| 26 | MANUAL_PITCH_RATE |
|
||||||
| 27 | NAV_FW_CRUISE_THROTTLE |
|
| 27 | MANUAL_YAW_RATE |
|
||||||
| 28 | NAV_FW_PITCH2THR |
|
| 28 | NAV_FW_CRUISE_THROTTLE |
|
||||||
| 29 | ROLL_BOARD_ALIGNMENT |
|
| 29 | NAV_FW_PITCH2THR |
|
||||||
| 30 | PITCH_BOARD_ALIGNMENT |
|
| 30 | ROLL_BOARD_ALIGNMENT |
|
||||||
| 31 | LEVEL_P |
|
| 31 | PITCH_BOARD_ALIGNMENT |
|
||||||
| 32 | LEVEL_I |
|
| 32 | LEVEL_P |
|
||||||
| 33 | LEVEL_D |
|
| 33 | LEVEL_I |
|
||||||
| 34 | POS_XY_P |
|
| 34 | LEVEL_D |
|
||||||
| 35 | POS_XY_I |
|
| 35 | POS_XY_P |
|
||||||
| 36 | POS_XY_D |
|
| 36 | POS_XY_I |
|
||||||
| 37 | POS_Z_P |
|
| 37 | POS_XY_D |
|
||||||
| 38 | POS_Z_I |
|
| 38 | POS_Z_P |
|
||||||
| 39 | POS_Z_D |
|
| 39 | POS_Z_I |
|
||||||
| 40 | HEADING_P |
|
| 40 | POS_Z_D |
|
||||||
| 41 | VEL_XY_P |
|
| 41 | HEADING_P |
|
||||||
| 42 | VEL_XY_I |
|
| 42 | VEL_XY_P |
|
||||||
| 43 | VEL_XY_D |
|
| 43 | VEL_XY_I |
|
||||||
| 44 | VEL_Z_P |
|
| 44 | VEL_XY_D |
|
||||||
| 45 | VEL_Z_P |
|
| 45 | VEL_Z_P |
|
||||||
| 46 | VEL_Z_I |
|
| 46 | VEL_Z_I |
|
||||||
| 47 | VEL_Z_D |
|
| 47 | VEL_Z_D |
|
||||||
| 48 | FW_MIN_THROTTLE_DOWN_PITCH_ANGLE |
|
| 48 | FW_MIN_THROTTLE_DOWN_PITCH_ANGLE |
|
||||||
| 49 | PROFILE | Switch between 3 rate profiles using a 3 position switch. |
|
| 49 | ADJUSTMENT_VTX_POWER_LEVEL |
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
@ -263,4 +263,4 @@ The following examples shows __incorrect__ configurations - the entire usable ra
|
||||||
|
|
||||||
In the following example, the incorrect configuraton (above) has been corrected by adding a range that makes 'No changes'.
|
In the following example, the incorrect configuraton (above) has been corrected by adding a range that makes 'No changes'.
|
||||||
|
|
||||||

|

|
|
@ -101,7 +101,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
.adjustmentFunction = ADJUSTMENT_PITCH_ROLL_D,
|
.adjustmentFunction = ADJUSTMENT_PITCH_ROLL_D_FF,
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
|
@ -113,7 +113,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
.adjustmentFunction = ADJUSTMENT_YAW_D,
|
.adjustmentFunction = ADJUSTMENT_YAW_D_FF,
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
|
@ -137,7 +137,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
.adjustmentFunction = ADJUSTMENT_PITCH_D,
|
.adjustmentFunction = ADJUSTMENT_PITCH_D_FF,
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
|
@ -149,7 +149,7 @@ static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COU
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
.adjustmentFunction = ADJUSTMENT_ROLL_D,
|
.adjustmentFunction = ADJUSTMENT_ROLL_D_FF,
|
||||||
.mode = ADJUSTMENT_MODE_STEP,
|
.mode = ADJUSTMENT_MODE_STEP,
|
||||||
.data = { .stepConfig = { .step = 1 }}
|
.data = { .stepConfig = { .step = 1 }}
|
||||||
}, {
|
}, {
|
||||||
|
@ -441,18 +441,18 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
||||||
applyAdjustmentPID(ADJUSTMENT_ROLL_I, &pidBankMutable()->pid[PID_ROLL].I, delta);
|
applyAdjustmentPID(ADJUSTMENT_ROLL_I, &pidBankMutable()->pid[PID_ROLL].I, delta);
|
||||||
schedulePidGainsUpdate();
|
schedulePidGainsUpdate();
|
||||||
break;
|
break;
|
||||||
case ADJUSTMENT_PITCH_ROLL_D:
|
case ADJUSTMENT_PITCH_ROLL_D_FF:
|
||||||
case ADJUSTMENT_PITCH_D:
|
case ADJUSTMENT_PITCH_D_FF:
|
||||||
applyAdjustmentPID(ADJUSTMENT_PITCH_D, &pidBankMutable()->pid[PID_PITCH].D, delta);
|
applyAdjustmentPID(ADJUSTMENT_PITCH_D_FF, getD_FFRefByBank(pidBankMutable(), PID_PITCH), delta);
|
||||||
if (adjustmentFunction == ADJUSTMENT_PITCH_D) {
|
if (adjustmentFunction == ADJUSTMENT_PITCH_D_FF) {
|
||||||
schedulePidGainsUpdate();
|
schedulePidGainsUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// follow though for combined ADJUSTMENT_PITCH_ROLL_D
|
// follow though for combined ADJUSTMENT_PITCH_ROLL_D
|
||||||
FALLTHROUGH;
|
FALLTHROUGH;
|
||||||
|
|
||||||
case ADJUSTMENT_ROLL_D:
|
case ADJUSTMENT_ROLL_D_FF:
|
||||||
applyAdjustmentPID(ADJUSTMENT_ROLL_D, &pidBankMutable()->pid[PID_ROLL].D, delta);
|
applyAdjustmentPID(ADJUSTMENT_ROLL_D_FF, getD_FFRefByBank(pidBankMutable(), PID_ROLL), delta);
|
||||||
schedulePidGainsUpdate();
|
schedulePidGainsUpdate();
|
||||||
break;
|
break;
|
||||||
case ADJUSTMENT_YAW_P:
|
case ADJUSTMENT_YAW_P:
|
||||||
|
@ -463,8 +463,8 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
||||||
applyAdjustmentPID(ADJUSTMENT_YAW_I, &pidBankMutable()->pid[PID_YAW].I, delta);
|
applyAdjustmentPID(ADJUSTMENT_YAW_I, &pidBankMutable()->pid[PID_YAW].I, delta);
|
||||||
schedulePidGainsUpdate();
|
schedulePidGainsUpdate();
|
||||||
break;
|
break;
|
||||||
case ADJUSTMENT_YAW_D:
|
case ADJUSTMENT_YAW_D_FF:
|
||||||
applyAdjustmentPID(ADJUSTMENT_YAW_D, &pidBankMutable()->pid[PID_YAW].D, delta);
|
applyAdjustmentPID(ADJUSTMENT_YAW_D_FF, getD_FFRefByBank(pidBankMutable(), PID_YAW), delta);
|
||||||
schedulePidGainsUpdate();
|
schedulePidGainsUpdate();
|
||||||
break;
|
break;
|
||||||
case ADJUSTMENT_NAV_FW_CRUISE_THR:
|
case ADJUSTMENT_NAV_FW_CRUISE_THR:
|
||||||
|
|
|
@ -33,19 +33,19 @@ typedef enum {
|
||||||
ADJUSTMENT_YAW_RATE = 5,
|
ADJUSTMENT_YAW_RATE = 5,
|
||||||
ADJUSTMENT_PITCH_ROLL_P = 6,
|
ADJUSTMENT_PITCH_ROLL_P = 6,
|
||||||
ADJUSTMENT_PITCH_ROLL_I = 7,
|
ADJUSTMENT_PITCH_ROLL_I = 7,
|
||||||
ADJUSTMENT_PITCH_ROLL_D = 8,
|
ADJUSTMENT_PITCH_ROLL_D_FF = 8,
|
||||||
ADJUSTMENT_YAW_P = 9,
|
ADJUSTMENT_YAW_P = 9,
|
||||||
ADJUSTMENT_YAW_I = 10,
|
ADJUSTMENT_YAW_I = 10,
|
||||||
ADJUSTMENT_YAW_D = 11,
|
ADJUSTMENT_YAW_D_FF = 11,
|
||||||
ADJUSTMENT_RATE_PROFILE = 12, // Unused, placeholder for compatibility
|
ADJUSTMENT_RATE_PROFILE = 12, // Unused, placeholder for compatibility
|
||||||
ADJUSTMENT_PITCH_RATE = 13,
|
ADJUSTMENT_PITCH_RATE = 13,
|
||||||
ADJUSTMENT_ROLL_RATE = 14,
|
ADJUSTMENT_ROLL_RATE = 14,
|
||||||
ADJUSTMENT_PITCH_P = 15,
|
ADJUSTMENT_PITCH_P = 15,
|
||||||
ADJUSTMENT_PITCH_I = 16,
|
ADJUSTMENT_PITCH_I = 16,
|
||||||
ADJUSTMENT_PITCH_D = 17,
|
ADJUSTMENT_PITCH_D_FF = 17,
|
||||||
ADJUSTMENT_ROLL_P = 18,
|
ADJUSTMENT_ROLL_P = 18,
|
||||||
ADJUSTMENT_ROLL_I = 19,
|
ADJUSTMENT_ROLL_I = 19,
|
||||||
ADJUSTMENT_ROLL_D = 20,
|
ADJUSTMENT_ROLL_D_FF = 20,
|
||||||
ADJUSTMENT_RC_YAW_EXPO = 21,
|
ADJUSTMENT_RC_YAW_EXPO = 21,
|
||||||
ADJUSTMENT_MANUAL_RC_EXPO = 22,
|
ADJUSTMENT_MANUAL_RC_EXPO = 22,
|
||||||
ADJUSTMENT_MANUAL_RC_YAW_EXPO = 23,
|
ADJUSTMENT_MANUAL_RC_YAW_EXPO = 23,
|
||||||
|
|
|
@ -1114,3 +1114,12 @@ const pidBank_t * pidBank(void) {
|
||||||
pidBank_t * pidBankMutable(void) {
|
pidBank_t * pidBankMutable(void) {
|
||||||
return usedPidControllerType == PID_TYPE_PIFF ? &pidProfileMutable()->bank_fw : &pidProfileMutable()->bank_mc;
|
return usedPidControllerType == PID_TYPE_PIFF ? &pidProfileMutable()->bank_fw : &pidProfileMutable()->bank_mc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t * getD_FFRefByBank(pidBank_t *pidBank, pidIndex_e pidIndex)
|
||||||
|
{
|
||||||
|
if (pidIndexGetType(pidIndex) == PID_TYPE_PIFF) {
|
||||||
|
return &pidBank->pid[pidIndex].FF;
|
||||||
|
} else {
|
||||||
|
return &pidBank->pid[pidIndex].D;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -198,3 +198,4 @@ void autotuneUpdateState(void);
|
||||||
void autotuneFixedWingUpdate(const flight_dynamics_index_t axis, float desiredRateDps, float reachedRateDps, float pidOutput);
|
void autotuneFixedWingUpdate(const flight_dynamics_index_t axis, float desiredRateDps, float reachedRateDps, float pidOutput);
|
||||||
|
|
||||||
pidType_e pidIndexGetType(pidIndex_e pidIndex);
|
pidType_e pidIndexGetType(pidIndex_e pidIndex);
|
||||||
|
uint8_t * getD_FFRefByBank(pidBank_t *pidBank, pidIndex_e pidIndex);
|
||||||
|
|
|
@ -230,15 +230,15 @@ void autotuneFixedWingUpdate(const flight_dynamics_index_t axis, float desiredRa
|
||||||
|
|
||||||
switch (axis) {
|
switch (axis) {
|
||||||
case FD_ROLL:
|
case FD_ROLL:
|
||||||
blackboxLogAutotuneEvent(ADJUSTMENT_ROLL_D, tuneCurrent[axis].gainFF);
|
blackboxLogAutotuneEvent(ADJUSTMENT_ROLL_D_FF, tuneCurrent[axis].gainFF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FD_PITCH:
|
case FD_PITCH:
|
||||||
blackboxLogAutotuneEvent(ADJUSTMENT_PITCH_D, tuneCurrent[axis].gainFF);
|
blackboxLogAutotuneEvent(ADJUSTMENT_PITCH_D_FF, tuneCurrent[axis].gainFF);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FD_YAW:
|
case FD_YAW:
|
||||||
blackboxLogAutotuneEvent(ADJUSTMENT_YAW_D, tuneCurrent[axis].gainFF);
|
blackboxLogAutotuneEvent(ADJUSTMENT_YAW_D_FF, tuneCurrent[axis].gainFF);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1181,7 +1181,7 @@ static void osdDisplayPIDValues(uint8_t elemPosX, uint8_t elemPosY, const char *
|
||||||
|
|
||||||
elemAttr = TEXT_ATTRIBUTES_NONE;
|
elemAttr = TEXT_ATTRIBUTES_NONE;
|
||||||
tfp_sprintf(buff, "%3d", pidType == PID_TYPE_PIFF ? pid->FF : pid->D);
|
tfp_sprintf(buff, "%3d", pidType == PID_TYPE_PIFF ? pid->FF : pid->D);
|
||||||
if ((isAdjustmentFunctionSelected(adjFuncD)) || (((adjFuncD == ADJUSTMENT_ROLL_D) || (adjFuncD == ADJUSTMENT_PITCH_D)) && (isAdjustmentFunctionSelected(ADJUSTMENT_PITCH_ROLL_D))))
|
if ((isAdjustmentFunctionSelected(adjFuncD)) || (((adjFuncD == ADJUSTMENT_ROLL_D_FF) || (adjFuncD == ADJUSTMENT_PITCH_D_FF)) && (isAdjustmentFunctionSelected(ADJUSTMENT_PITCH_ROLL_D_FF))))
|
||||||
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
|
TEXT_ATTRIBUTES_ADD_BLINK(elemAttr);
|
||||||
displayWriteWithAttr(osdDisplayPort, elemPosX + 12, elemPosY, buff, elemAttr);
|
displayWriteWithAttr(osdDisplayPort, elemPosX + 12, elemPosY, buff, elemAttr);
|
||||||
}
|
}
|
||||||
|
@ -1777,15 +1777,15 @@ static bool osdDrawSingleElement(uint8_t item)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case OSD_ROLL_PIDS:
|
case OSD_ROLL_PIDS:
|
||||||
osdDisplayPIDValues(elemPosX, elemPosY, "ROL", PID_ROLL, ADJUSTMENT_ROLL_P, ADJUSTMENT_ROLL_I, ADJUSTMENT_ROLL_D);
|
osdDisplayPIDValues(elemPosX, elemPosY, "ROL", PID_ROLL, ADJUSTMENT_ROLL_P, ADJUSTMENT_ROLL_I, ADJUSTMENT_ROLL_D_FF);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case OSD_PITCH_PIDS:
|
case OSD_PITCH_PIDS:
|
||||||
osdDisplayPIDValues(elemPosX, elemPosY, "PIT", PID_PITCH, ADJUSTMENT_PITCH_P, ADJUSTMENT_PITCH_I, ADJUSTMENT_PITCH_D);
|
osdDisplayPIDValues(elemPosX, elemPosY, "PIT", PID_PITCH, ADJUSTMENT_PITCH_P, ADJUSTMENT_PITCH_I, ADJUSTMENT_PITCH_D_FF);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case OSD_YAW_PIDS:
|
case OSD_YAW_PIDS:
|
||||||
osdDisplayPIDValues(elemPosX, elemPosY, "YAW", PID_YAW, ADJUSTMENT_YAW_P, ADJUSTMENT_YAW_I, ADJUSTMENT_YAW_D);
|
osdDisplayPIDValues(elemPosX, elemPosY, "YAW", PID_YAW, ADJUSTMENT_YAW_P, ADJUSTMENT_YAW_I, ADJUSTMENT_YAW_D_FF);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case OSD_LEVEL_PIDS:
|
case OSD_LEVEL_PIDS:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue