AirspeedSelector: enable changing ASPD_SCALE manually in-air mid-flight (#25817)

Includes a reset in wind estimator states if changed
This commit is contained in:
Marco Hauswirth
2025-11-05 16:25:15 +01:00
committed by GitHub
parent ab1c880aad
commit 84b5ce9010
4 changed files with 23 additions and 3 deletions
@@ -121,6 +121,7 @@ public:
void set_tas_scale_apply(int tas_scale_apply) { _tas_scale_apply = tas_scale_apply; }
void set_CAS_scale_validated(float scale) { _CAS_scale_validated = scale; }
void set_scale_init(float scale) { _wind_estimator.set_scale_init(scale); }
void reset_scale_estimator() { _wind_estimator.reset_scale_to_init(); }
void set_enable_data_stuck_check(bool enable) { _data_stuck_check_enabled = enable; }
void set_enable_innovation_check(bool enable) { _innovation_check_enabled = enable; }
@@ -494,10 +494,24 @@ void AirspeedModule::update_params()
param_get(_param_handle_fw_thr_max, &_param_fw_thr_max);
}
const float prev_scale[MAX_NUM_AIRSPEED_SENSORS] = {
_param_airspeed_scale[0],
_param_airspeed_scale[1],
_param_airspeed_scale[2]
};
_param_airspeed_scale[0] = _param_airspeed_scale_1.get();
_param_airspeed_scale[1] = _param_airspeed_scale_2.get();
_param_airspeed_scale[2] = _param_airspeed_scale_3.get();
for (int i = 0; i < MAX_NUM_AIRSPEED_SENSORS; i++) {
if (fabsf(_param_airspeed_scale[i] - prev_scale[i]) > FLT_EPSILON) {
_airspeed_validator[i].set_scale_init(_param_airspeed_scale[i]);
_airspeed_validator[i].reset_scale_estimator();
_airspeed_validator[i].set_CAS_scale_validated(_param_airspeed_scale[i]);
}
}
_wind_estimator_sideslip.set_wind_process_noise_spectral_density(_param_aspd_wind_nsd.get());
_wind_estimator_sideslip.set_tas_scale_process_noise_spectral_density(_param_aspd_scale_nsd.get());
_wind_estimator_sideslip.set_tas_noise(_param_west_tas_noise.get());
@@ -95,7 +95,6 @@ PARAM_DEFINE_INT32(ASPD_SCALE_APPLY, 2);
* @min 0.5
* @max 2.0
* @decimal 2
* @reboot_required true
* @group Airspeed Validator
* @volatile
*/
@@ -109,7 +108,6 @@ PARAM_DEFINE_FLOAT(ASPD_SCALE_1, 1.0f);
* @min 0.5
* @max 2.0
* @decimal 2
* @reboot_required true
* @group Airspeed Validator
* @volatile
*/
@@ -123,7 +121,6 @@ PARAM_DEFINE_FLOAT(ASPD_SCALE_2, 1.0f);
* @min 0.5
* @max 2.0
* @decimal 2
* @reboot_required true
* @group Airspeed Validator
* @volatile
*/