1
0
Fork 0
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:
Michel Pastor 2021-04-24 15:44:01 +02:00 committed by GitHub
parent 8c24f58d92
commit ab93221dd4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 126 additions and 121 deletions

View file

@ -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 {

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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

View file

@ -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

View file

@ -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