mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-25 09:16:01 +03:00
Enforce limits from setting.yaml in RC adjustments and add the possibility of defining constants in settings.yaml (#6878)
This commit is contained in:
parent
8c24f58d92
commit
ab93221dd4
6 changed files with 126 additions and 121 deletions
|
@ -22,21 +22,6 @@
|
|||
#include "config/parameter_group.h"
|
||||
|
||||
#define MAX_CONTROL_RATE_PROFILE_COUNT 3
|
||||
/*
|
||||
Max and min available values for rates are now stored as absolute
|
||||
tenths of degrees-per-second [dsp/10]
|
||||
That means, max. rotation rate 180 equals 1800dps
|
||||
|
||||
New defaults of 200dps for pitch,roll and yaw are more less
|
||||
equivalent of rates 0 from previous versions of iNav, Cleanflight, Baseflight
|
||||
and so on.
|
||||
*/
|
||||
#define CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX 180
|
||||
#define CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN 6
|
||||
#define CONTROL_RATE_CONFIG_YAW_RATE_MAX 180
|
||||
#define CONTROL_RATE_CONFIG_YAW_RATE_MIN 2
|
||||
|
||||
#define CONTROL_RATE_CONFIG_TPA_MAX 100
|
||||
|
||||
typedef struct controlRateConfig_s {
|
||||
|
||||
|
|
|
@ -1799,14 +1799,14 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src)
|
|||
for (int i = 0; i < 3; i++) {
|
||||
tmp_u8 = sbufReadU8(src);
|
||||
if (i == FD_YAW) {
|
||||
((controlRateConfig_t*)currentControlRateProfile)->stabilized.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_YAW_RATE_MIN, CONTROL_RATE_CONFIG_YAW_RATE_MAX);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->stabilized.rates[i] = constrain(tmp_u8, SETTING_YAW_RATE_MIN, SETTING_YAW_RATE_MAX);
|
||||
}
|
||||
else {
|
||||
((controlRateConfig_t*)currentControlRateProfile)->stabilized.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->stabilized.rates[i] = constrain(tmp_u8, SETTING_CONSTANT_ROLL_PITCH_RATE_MIN, SETTING_CONSTANT_ROLL_PITCH_RATE_MAX);
|
||||
}
|
||||
}
|
||||
tmp_u8 = sbufReadU8(src);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->throttle.dynPID = MIN(tmp_u8, CONTROL_RATE_CONFIG_TPA_MAX);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->throttle.dynPID = MIN(tmp_u8, SETTING_TPA_RATE_MAX);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->throttle.rcMid8 = sbufReadU8(src);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->throttle.rcExpo8 = sbufReadU8(src);
|
||||
((controlRateConfig_t*)currentControlRateProfile)->throttle.pa_breakpoint = sbufReadU16(src);
|
||||
|
@ -1836,9 +1836,9 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src)
|
|||
for (uint8_t i = 0; i < 3; ++i) {
|
||||
tmp_u8 = sbufReadU8(src);
|
||||
if (i == FD_YAW) {
|
||||
currentControlRateProfile_p->stabilized.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_YAW_RATE_MIN, CONTROL_RATE_CONFIG_YAW_RATE_MAX);
|
||||
currentControlRateProfile_p->stabilized.rates[i] = constrain(tmp_u8, SETTING_YAW_RATE_MIN, SETTING_YAW_RATE_MAX);
|
||||
} else {
|
||||
currentControlRateProfile_p->stabilized.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX);
|
||||
currentControlRateProfile_p->stabilized.rates[i] = constrain(tmp_u8, SETTING_CONSTANT_ROLL_PITCH_RATE_MIN, SETTING_CONSTANT_ROLL_PITCH_RATE_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1848,9 +1848,9 @@ static mspResult_e mspFcProcessInCommand(uint16_t cmdMSP, sbuf_t *src)
|
|||
for (uint8_t i = 0; i < 3; ++i) {
|
||||
tmp_u8 = sbufReadU8(src);
|
||||
if (i == FD_YAW) {
|
||||
currentControlRateProfile_p->manual.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_YAW_RATE_MIN, CONTROL_RATE_CONFIG_YAW_RATE_MAX);
|
||||
currentControlRateProfile_p->manual.rates[i] = constrain(tmp_u8, SETTING_YAW_RATE_MIN, SETTING_YAW_RATE_MAX);
|
||||
} else {
|
||||
currentControlRateProfile_p->manual.rates[i] = constrain(tmp_u8, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX);
|
||||
currentControlRateProfile_p->manual.rates[i] = constrain(tmp_u8, SETTING_CONSTANT_ROLL_PITCH_RATE_MIN, SETTING_CONSTANT_ROLL_PITCH_RATE_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
#include "fc/controlrate_profile.h"
|
||||
#include "fc/rc_adjustments.h"
|
||||
#include "fc/rc_curves.h"
|
||||
#include "fc/settings.h"
|
||||
|
||||
#include "navigation/navigation.h"
|
||||
|
||||
|
@ -61,15 +62,6 @@ static uint8_t adjustmentStateMask = 0;
|
|||
|
||||
#define IS_ADJUSTMENT_FUNCTION_BUSY(adjustmentIndex) (adjustmentStateMask & (1 << adjustmentIndex))
|
||||
|
||||
#define RC_ADJUSTMENT_EXPO_MIN 0
|
||||
#define RC_ADJUSTMENT_EXPO_MAX 100
|
||||
|
||||
#define RC_ADJUSTMENT_MANUAL_RATE_MIN 0
|
||||
#define RC_ADJUSTMENT_MANUAL_RATE_MAX 100
|
||||
|
||||
#define RC_ADJUSTMENT_PID_MIN 0
|
||||
#define RC_ADJUSTMENT_PID_MAX 200
|
||||
|
||||
// sync with adjustmentFunction_e
|
||||
static const adjustmentConfig_t defaultAdjustmentConfigs[ADJUSTMENT_FUNCTION_COUNT - 1] = {
|
||||
{
|
||||
|
@ -368,17 +360,17 @@ static void applyAdjustmentU16(adjustmentFunction_e adjustmentFunction, uint16_t
|
|||
|
||||
static void applyAdjustmentExpo(adjustmentFunction_e adjustmentFunction, uint8_t *val, int delta)
|
||||
{
|
||||
applyAdjustmentU8(adjustmentFunction, val, delta, RC_ADJUSTMENT_EXPO_MIN, RC_ADJUSTMENT_EXPO_MAX);
|
||||
applyAdjustmentU8(adjustmentFunction, val, delta, SETTING_RC_EXPO_MIN, SETTING_RC_EXPO_MAX);
|
||||
}
|
||||
|
||||
static void applyAdjustmentManualRate(adjustmentFunction_e adjustmentFunction, uint8_t *val, int delta)
|
||||
{
|
||||
return applyAdjustmentU8(adjustmentFunction, val, delta, RC_ADJUSTMENT_MANUAL_RATE_MIN, RC_ADJUSTMENT_MANUAL_RATE_MAX);
|
||||
return applyAdjustmentU8(adjustmentFunction, val, delta, SETTING_CONSTANT_MANUAL_RATE_MIN, SETTING_CONSTANT_MANUAL_RATE_MAX);
|
||||
}
|
||||
|
||||
static void applyAdjustmentPID(adjustmentFunction_e adjustmentFunction, uint16_t *val, int delta)
|
||||
{
|
||||
applyAdjustmentU16(adjustmentFunction, val, delta, RC_ADJUSTMENT_PID_MIN, RC_ADJUSTMENT_PID_MAX);
|
||||
applyAdjustmentU16(adjustmentFunction, val, delta, SETTING_CONSTANT_RPYL_PID_MIN, SETTING_CONSTANT_RPYL_PID_MAX);
|
||||
}
|
||||
|
||||
static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t adjustmentFunction, int delta)
|
||||
|
@ -406,7 +398,7 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
break;
|
||||
case ADJUSTMENT_PITCH_ROLL_RATE:
|
||||
case ADJUSTMENT_PITCH_RATE:
|
||||
applyAdjustmentU8(ADJUSTMENT_PITCH_RATE, &controlRateConfig->stabilized.rates[FD_PITCH], delta, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX);
|
||||
applyAdjustmentU8(ADJUSTMENT_PITCH_RATE, &controlRateConfig->stabilized.rates[FD_PITCH], delta, SETTING_PITCH_RATE_MIN, SETTING_PITCH_RATE_MAX);
|
||||
if (adjustmentFunction == ADJUSTMENT_PITCH_RATE) {
|
||||
schedulePidGainsUpdate();
|
||||
break;
|
||||
|
@ -415,7 +407,7 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
FALLTHROUGH;
|
||||
|
||||
case ADJUSTMENT_ROLL_RATE:
|
||||
applyAdjustmentU8(ADJUSTMENT_ROLL_RATE, &controlRateConfig->stabilized.rates[FD_ROLL], delta, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN, CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX);
|
||||
applyAdjustmentU8(ADJUSTMENT_ROLL_RATE, &controlRateConfig->stabilized.rates[FD_ROLL], delta, SETTING_CONSTANT_ROLL_PITCH_RATE_MIN, SETTING_CONSTANT_ROLL_PITCH_RATE_MAX);
|
||||
schedulePidGainsUpdate();
|
||||
break;
|
||||
case ADJUSTMENT_MANUAL_PITCH_ROLL_RATE:
|
||||
|
@ -429,7 +421,7 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
applyAdjustmentManualRate(ADJUSTMENT_MANUAL_PITCH_RATE, &controlRateConfig->manual.rates[FD_PITCH], delta);
|
||||
break;
|
||||
case ADJUSTMENT_YAW_RATE:
|
||||
applyAdjustmentU8(ADJUSTMENT_YAW_RATE, &controlRateConfig->stabilized.rates[FD_YAW], delta, CONTROL_RATE_CONFIG_YAW_RATE_MIN, CONTROL_RATE_CONFIG_YAW_RATE_MAX);
|
||||
applyAdjustmentU8(ADJUSTMENT_YAW_RATE, &controlRateConfig->stabilized.rates[FD_YAW], delta, SETTING_YAW_RATE_MIN, SETTING_YAW_RATE_MAX);
|
||||
schedulePidGainsUpdate();
|
||||
break;
|
||||
case ADJUSTMENT_MANUAL_YAW_RATE:
|
||||
|
@ -508,10 +500,10 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
schedulePidGainsUpdate();
|
||||
break;
|
||||
case ADJUSTMENT_NAV_FW_CRUISE_THR:
|
||||
applyAdjustmentU16(ADJUSTMENT_NAV_FW_CRUISE_THR, &navConfigMutable()->fw.cruise_throttle, delta, 1000, 2000);
|
||||
applyAdjustmentU16(ADJUSTMENT_NAV_FW_CRUISE_THR, &navConfigMutable()->fw.cruise_throttle, delta, SETTING_NAV_FW_CRUISE_THR_MIN, SETTING_NAV_FW_CRUISE_THR_MAX);
|
||||
break;
|
||||
case ADJUSTMENT_NAV_FW_PITCH2THR:
|
||||
applyAdjustmentU8(ADJUSTMENT_NAV_FW_PITCH2THR, &navConfigMutable()->fw.pitch_to_throttle, delta, 0, 100);
|
||||
applyAdjustmentU8(ADJUSTMENT_NAV_FW_PITCH2THR, &navConfigMutable()->fw.pitch_to_throttle, delta, SETTING_NAV_FW_PITCH2THR_MIN, SETTING_NAV_FW_PITCH2THR_MAX);
|
||||
break;
|
||||
case ADJUSTMENT_ROLL_BOARD_ALIGNMENT:
|
||||
updateBoardAlignment(delta, 0);
|
||||
|
@ -586,7 +578,7 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
navigationUsePIDs();
|
||||
break;
|
||||
case ADJUSTMENT_FW_MIN_THROTTLE_DOWN_PITCH_ANGLE:
|
||||
applyAdjustmentU16(ADJUSTMENT_FW_MIN_THROTTLE_DOWN_PITCH_ANGLE, &mixerConfigMutable()->fwMinThrottleDownPitchAngle, delta, 0, FW_MIN_THROTTLE_DOWN_PITCH_ANGLE_MAX);
|
||||
applyAdjustmentU16(ADJUSTMENT_FW_MIN_THROTTLE_DOWN_PITCH_ANGLE, &mixerConfigMutable()->fwMinThrottleDownPitchAngle, delta, SETTING_FW_MIN_THROTTLE_DOWN_PITCH_MIN, SETTING_FW_MIN_THROTTLE_DOWN_PITCH_MAX);
|
||||
break;
|
||||
#if defined(USE_VTX_SMARTAUDIO) || defined(USE_VTX_TRAMP)
|
||||
case ADJUSTMENT_VTX_POWER_LEVEL:
|
||||
|
@ -599,13 +591,13 @@ static void applyStepAdjustment(controlRateConfig_t *controlRateConfig, uint8_t
|
|||
break;
|
||||
#endif
|
||||
case ADJUSTMENT_TPA:
|
||||
applyAdjustmentU8(ADJUSTMENT_TPA, &controlRateConfig->throttle.dynPID, delta, 0, CONTROL_RATE_CONFIG_TPA_MAX);
|
||||
applyAdjustmentU8(ADJUSTMENT_TPA, &controlRateConfig->throttle.dynPID, delta, 0, SETTING_TPA_RATE_MAX);
|
||||
break;
|
||||
case ADJUSTMENT_TPA_BREAKPOINT:
|
||||
applyAdjustmentU16(ADJUSTMENT_TPA_BREAKPOINT, &controlRateConfig->throttle.pa_breakpoint, delta, PWM_RANGE_MIN, PWM_RANGE_MAX);
|
||||
break;
|
||||
case ADJUSTMENT_NAV_FW_CONTROL_SMOOTHNESS:
|
||||
applyAdjustmentU8(ADJUSTMENT_NAV_FW_CONTROL_SMOOTHNESS, &navConfigMutable()->fw.control_smoothness, delta, 0, 9);
|
||||
applyAdjustmentU8(ADJUSTMENT_NAV_FW_CONTROL_SMOOTHNESS, &navConfigMutable()->fw.control_smoothness, delta, SETTING_NAV_FW_CONTROL_SMOOTHNESS_MIN, SETTING_NAV_FW_CONTROL_SMOOTHNESS_MAX);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -173,6 +173,16 @@ tables:
|
|||
enum: navRTHClimbFirst_e
|
||||
values: ["OFF", "ON", "ON_FW_SPIRAL"]
|
||||
|
||||
constants:
|
||||
RPYL_PID_MIN: 0
|
||||
RPYL_PID_MAX: 200
|
||||
|
||||
MANUAL_RATE_MIN: 0
|
||||
MANUAL_RATE_MAX: 100
|
||||
|
||||
ROLL_PITCH_RATE_MIN: 6
|
||||
ROLL_PITCH_RATE_MAX: 180
|
||||
|
||||
groups:
|
||||
- name: PG_GYRO_CONFIG
|
||||
type: gyroConfig_t
|
||||
|
@ -1203,7 +1213,7 @@ groups:
|
|||
default_value: 0
|
||||
field: throttle.dynPID
|
||||
min: 0
|
||||
max: CONTROL_RATE_CONFIG_TPA_MAX
|
||||
max: 100
|
||||
- name: tpa_breakpoint
|
||||
description: "See tpa_rate."
|
||||
default_value: 1500
|
||||
|
@ -1234,20 +1244,20 @@ groups:
|
|||
description: "Defines rotation rate on ROLL axis that UAV will try to archive on max. stick deflection. Rates are defined in tens of degrees (deca-degrees) per second [rate = dps/10]. That means, rate 20 represents 200dps rotation speed. Default 20 (200dps) is more less equivalent of old Cleanflight/Baseflight rate 0. Max. 180 (1800dps) is what gyro can measure."
|
||||
default_value: 20
|
||||
field: stabilized.rates[FD_ROLL]
|
||||
min: CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN
|
||||
max: CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX
|
||||
min: ROLL_PITCH_RATE_MIN
|
||||
max: ROLL_PITCH_RATE_MAX
|
||||
- name: pitch_rate
|
||||
description: "Defines rotation rate on PITCH axis that UAV will try to archive on max. stick deflection. Rates are defined in tens of degrees (deca-degrees) per second [rate = dps/10]. That means, rate 20 represents 200dps rotation speed. Default 20 (200dps) is more less equivalent of old Cleanflight/Baseflight rate 0. Max. 180 (1800dps) is what gyro can measure."
|
||||
default_value: 20
|
||||
field: stabilized.rates[FD_PITCH]
|
||||
min: CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MIN
|
||||
max: CONTROL_RATE_CONFIG_ROLL_PITCH_RATE_MAX
|
||||
min: ROLL_PITCH_RATE_MIN
|
||||
max: ROLL_PITCH_RATE_MAX
|
||||
- name: yaw_rate
|
||||
description: "Defines rotation rate on YAW axis that UAV will try to archive on max. stick deflection. Rates are defined in tens of degrees (deca-degrees) per second [rate = dps/10]. That means, rate 20 represents 200dps rotation speed. Default 20 (200dps) is more less equivalent of old Cleanflight/Baseflight rate 0. Max. 180 (1800dps) is what gyro can measure."
|
||||
default_value: 20
|
||||
field: stabilized.rates[FD_YAW]
|
||||
min: CONTROL_RATE_CONFIG_YAW_RATE_MIN
|
||||
max: CONTROL_RATE_CONFIG_YAW_RATE_MAX
|
||||
min: 2
|
||||
max: 180
|
||||
- name: manual_rc_expo
|
||||
description: "Exposition value used for the PITCH/ROLL axes by the `MANUAL` flight mode [0-100]"
|
||||
default_value: 70
|
||||
|
@ -1264,20 +1274,20 @@ groups:
|
|||
description: "Servo travel multiplier for the ROLL axis in `MANUAL` flight mode [0-100]%"
|
||||
default_value: 100
|
||||
field: manual.rates[FD_ROLL]
|
||||
min: 0
|
||||
max: 100
|
||||
min: MANUAL_RATE_MIN
|
||||
max: MANUAL_RATE_MAX
|
||||
- name: manual_pitch_rate
|
||||
description: "Servo travel multiplier for the PITCH axis in `MANUAL` flight mode [0-100]%"
|
||||
default_value: 100
|
||||
field: manual.rates[FD_PITCH]
|
||||
min: 0
|
||||
max: 100
|
||||
min: MANUAL_RATE_MIN
|
||||
max: MANUAL_RATE_MAX
|
||||
- name: manual_yaw_rate
|
||||
description: "Servo travel multiplier for the YAW axis in `MANUAL` flight mode [0-100]%"
|
||||
default_value: 100
|
||||
field: manual.rates[FD_YAW]
|
||||
min: 0
|
||||
max: 100
|
||||
min: MANUAL_RATE_MIN
|
||||
max: MANUAL_RATE_MAX
|
||||
- name: fpv_mix_degrees
|
||||
field: misc.fpvCamAngleDegrees
|
||||
min: 0
|
||||
|
@ -1498,182 +1508,182 @@ groups:
|
|||
description: "Multicopter rate stabilisation P-gain for PITCH"
|
||||
default_value: 40
|
||||
field: bank_mc.pid[PID_PITCH].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_i_pitch
|
||||
description: "Multicopter rate stabilisation I-gain for PITCH"
|
||||
default_value: 30
|
||||
field: bank_mc.pid[PID_PITCH].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_d_pitch
|
||||
description: "Multicopter rate stabilisation D-gain for PITCH"
|
||||
default_value: 23
|
||||
field: bank_mc.pid[PID_PITCH].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_cd_pitch
|
||||
description: "Multicopter Control Derivative gain for PITCH"
|
||||
default_value: 60
|
||||
field: bank_mc.pid[PID_PITCH].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_p_roll
|
||||
description: "Multicopter rate stabilisation P-gain for ROLL"
|
||||
default_value: 40
|
||||
field: bank_mc.pid[PID_ROLL].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_i_roll
|
||||
description: "Multicopter rate stabilisation I-gain for ROLL"
|
||||
default_value: 30
|
||||
field: bank_mc.pid[PID_ROLL].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_d_roll
|
||||
description: "Multicopter rate stabilisation D-gain for ROLL"
|
||||
default_value: 23
|
||||
field: bank_mc.pid[PID_ROLL].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_cd_roll
|
||||
description: "Multicopter Control Derivative gain for ROLL"
|
||||
default_value: 60
|
||||
field: bank_mc.pid[PID_ROLL].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_p_yaw
|
||||
description: "Multicopter rate stabilisation P-gain for YAW"
|
||||
default_value: 85
|
||||
field: bank_mc.pid[PID_YAW].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_i_yaw
|
||||
description: "Multicopter rate stabilisation I-gain for YAW"
|
||||
default_value: 45
|
||||
field: bank_mc.pid[PID_YAW].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_d_yaw
|
||||
description: "Multicopter rate stabilisation D-gain for YAW"
|
||||
default_value: 0
|
||||
field: bank_mc.pid[PID_YAW].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_cd_yaw
|
||||
description: "Multicopter Control Derivative gain for YAW"
|
||||
default_value: 60
|
||||
field: bank_mc.pid[PID_YAW].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_p_level
|
||||
description: "Multicopter attitude stabilisation P-gain"
|
||||
default_value: 20
|
||||
field: bank_mc.pid[PID_LEVEL].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_i_level
|
||||
description: "Multicopter attitude stabilisation low-pass filter cutoff"
|
||||
default_value: 15
|
||||
field: bank_mc.pid[PID_LEVEL].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: mc_d_level
|
||||
description: "Multicopter attitude stabilisation HORIZON transition point"
|
||||
default_value: 75
|
||||
field: bank_mc.pid[PID_LEVEL].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_p_pitch
|
||||
description: "Fixed-wing rate stabilisation P-gain for PITCH"
|
||||
default_value: 5
|
||||
field: bank_fw.pid[PID_PITCH].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_i_pitch
|
||||
description: "Fixed-wing rate stabilisation I-gain for PITCH"
|
||||
default_value: 7
|
||||
field: bank_fw.pid[PID_PITCH].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_d_pitch
|
||||
description: "Fixed wing rate stabilisation D-gain for PITCH"
|
||||
default_value: 0
|
||||
field: bank_fw.pid[PID_PITCH].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_ff_pitch
|
||||
description: "Fixed-wing rate stabilisation FF-gain for PITCH"
|
||||
default_value: 50
|
||||
field: bank_fw.pid[PID_PITCH].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_p_roll
|
||||
description: "Fixed-wing rate stabilisation P-gain for ROLL"
|
||||
default_value: 5
|
||||
field: bank_fw.pid[PID_ROLL].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_i_roll
|
||||
description: "Fixed-wing rate stabilisation I-gain for ROLL"
|
||||
default_value: 7
|
||||
field: bank_fw.pid[PID_ROLL].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_d_roll
|
||||
description: "Fixed wing rate stabilisation D-gain for ROLL"
|
||||
default_value: 0
|
||||
field: bank_fw.pid[PID_ROLL].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_ff_roll
|
||||
description: "Fixed-wing rate stabilisation FF-gain for ROLL"
|
||||
default_value: 50
|
||||
field: bank_fw.pid[PID_ROLL].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_p_yaw
|
||||
description: "Fixed-wing rate stabilisation P-gain for YAW"
|
||||
default_value: 6
|
||||
field: bank_fw.pid[PID_YAW].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_i_yaw
|
||||
description: "Fixed-wing rate stabilisation I-gain for YAW"
|
||||
default_value: 10
|
||||
field: bank_fw.pid[PID_YAW].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_d_yaw
|
||||
description: "Fixed wing rate stabilisation D-gain for YAW"
|
||||
default_value: 0
|
||||
field: bank_fw.pid[PID_YAW].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_ff_yaw
|
||||
description: "Fixed-wing rate stabilisation FF-gain for YAW"
|
||||
default_value: 60
|
||||
field: bank_fw.pid[PID_YAW].FF
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_p_level
|
||||
description: "Fixed-wing attitude stabilisation P-gain"
|
||||
default_value: 20
|
||||
field: bank_fw.pid[PID_LEVEL].P
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_i_level
|
||||
description: "Fixed-wing attitude stabilisation low-pass filter cutoff"
|
||||
default_value: 5
|
||||
field: bank_fw.pid[PID_LEVEL].I
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: fw_d_level
|
||||
description: "Fixed-wing attitude stabilisation HORIZON transition point"
|
||||
default_value: 75
|
||||
field: bank_fw.pid[PID_LEVEL].D
|
||||
min: 0
|
||||
max: 200
|
||||
min: RPYL_PID_MIN
|
||||
max: RPYL_PID_MAX
|
||||
- name: max_angle_inclination_rll
|
||||
description: "Maximum inclination in level (angle) mode (ROLL axis). 100=10°"
|
||||
default_value: 300
|
||||
|
|
|
@ -25,11 +25,6 @@
|
|||
#define MAX_SUPPORTED_MOTORS 12
|
||||
#endif
|
||||
|
||||
#define YAW_JUMP_PREVENTION_LIMIT_LOW 80
|
||||
#define YAW_JUMP_PREVENTION_LIMIT_HIGH 500
|
||||
|
||||
#define FW_MIN_THROTTLE_DOWN_PITCH_ANGLE_MAX 450
|
||||
|
||||
// Digital protocol has fixed values
|
||||
#define DSHOT_DISARM_COMMAND 0
|
||||
#define DSHOT_MIN_THROTTLE 48
|
||||
|
@ -131,4 +126,4 @@ void stopMotors(void);
|
|||
void stopPwmAllMotors(void);
|
||||
|
||||
void loadPrimaryMotorMixer(void);
|
||||
bool areMotorsRunning(void);
|
||||
bool areMotorsRunning(void);
|
||||
|
|
|
@ -301,6 +301,7 @@ class Generator
|
|||
|
||||
check_member_default_values_presence
|
||||
sanitize_fields
|
||||
resolv_min_max_and_default_values_if_possible
|
||||
initialize_name_encoder
|
||||
initialize_value_encoder
|
||||
validate_default_values
|
||||
|
@ -359,6 +360,7 @@ class Generator
|
|||
@data = YAML.load_file(@settings_file)
|
||||
|
||||
initialize_tables
|
||||
initialize_constants
|
||||
check_conditions
|
||||
end
|
||||
|
||||
|
@ -415,6 +417,11 @@ class Generator
|
|||
buf << "extern const char * const #{table_variable_name(name)}[];\n"
|
||||
end
|
||||
|
||||
# Write setting constants from settings file
|
||||
@constants.each do |name, value|
|
||||
buf << "#define SETTING_CONSTANT_#{name.upcase} #{value.inspect}\n"
|
||||
end
|
||||
|
||||
# Write #define'd constants for referencing each setting
|
||||
ii = 0
|
||||
foreach_enabled_member do |group, member|
|
||||
|
@ -715,6 +722,10 @@ class Generator
|
|||
end
|
||||
end
|
||||
|
||||
def initialize_constants
|
||||
@constants = @data["constants"]
|
||||
end
|
||||
|
||||
def ordered_table_names
|
||||
@enabled_tables.to_a().sort()
|
||||
end
|
||||
|
@ -1047,6 +1058,18 @@ class Generator
|
|||
raise "Missing default value for #{missing_default_value_names.count} member#{"s" unless missing_default_value_names.one?}: #{missing_default_value_names * ", "}" unless missing_default_value_names.empty?
|
||||
end
|
||||
|
||||
def resolv_min_max_and_default_values_if_possible
|
||||
foreach_member do |_, member|
|
||||
%w[ min max default_value ].each do |value_type|
|
||||
member_value = member[value_type]
|
||||
if member_value.is_a? String
|
||||
constant_value = @constants[member_value]
|
||||
member[value_type] = constant_value unless constant_value.nil?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def resolve_constants(constants)
|
||||
return nil unless constants.length > 0
|
||||
s = Set.new
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue