From 88f5e45844e1a18531e54145ae05d9ccd3669ae5 Mon Sep 17 00:00:00 2001 From: bijoua29 <73511637+bijoua29@users.noreply.github.com> Date: Thu, 16 Oct 2025 09:54:11 -0700 Subject: [PATCH] Fix calculation of tracking time constant (#511) (cherry picked from commit 618c96174f544147eefb279e1b1047960fb518cf) --- control_toolbox/src/pid.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/control_toolbox/src/pid.cpp b/control_toolbox/src/pid.cpp index 306b9991..7db7ecbc 100644 --- a/control_toolbox/src/pid.cpp +++ b/control_toolbox/src/pid.cpp @@ -161,12 +161,16 @@ bool Pid::set_gains(const Gains & gains_in) if (gains.antiwindup_strat_.type == AntiWindupStrategy::BACK_CALCULATION) { - if (is_zero(gains.antiwindup_strat_.tracking_time_constant) && !is_zero(gains.d_gain_)) + if ( + is_zero(gains.antiwindup_strat_.tracking_time_constant) && !is_zero(gains.d_gain_) && + !is_zero(gains.i_gain_)) { // Default value for tracking time constant for back calculation technique gains.antiwindup_strat_.tracking_time_constant = std::sqrt(gains.d_gain_ / gains.i_gain_); } - else if (is_zero(gains.antiwindup_strat_.tracking_time_constant) && is_zero(gains.d_gain_)) + else if ( + is_zero(gains.antiwindup_strat_.tracking_time_constant) && is_zero(gains.d_gain_) && + !is_zero(gains.i_gain_)) { // Default value for tracking time constant for back calculation technique gains.antiwindup_strat_.tracking_time_constant = gains.p_gain_ / gains.i_gain_;