AP_Vehicle: make sure that if ESC telemetry is missing notch updates are not misordered

This commit is contained in:
Andy Piper 2022-08-06 21:30:26 +01:00 committed by Andrew Tridgell
parent 50dc9fc65c
commit 27998db12e

View File

@ -443,12 +443,14 @@ void AP_Vehicle::update_dynamic_notch(AP_InertialSensor::HarmonicNotch &notch)
if (notch.params.hasOption(HarmonicNotchFilterParams::Options::DynamicHarmonic)) {
float notches[INS_MAX_NOTCHES];
const uint8_t num_notches = AP::esc_telem().get_motor_frequencies_hz(notch.num_dynamic_notches, notches);
for (uint8_t i = 0; i < num_notches; i++) {
notches[i] = MAX(ref_freq, notches[i]);
// ESC telemetry will return 0 for missing data, but only after 1s
for (uint8_t i = 0; i < notch.num_dynamic_notches; i++) {
if (!is_zero(notches[i])) {
notches[i] = MAX(ref_freq, notches[i]);
}
}
if (num_notches > 0) {
notch.update_frequencies_hz(num_notches, notches);
notch.update_frequencies_hz(notch.num_dynamic_notches, notches);
} else { // throttle fallback
notch.update_freq_hz(throttle_freq);
}