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 a5b373e912
commit 2c22bca1a9

View File

@ -490,12 +490,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
update_throttle_notch(notch);
}