diff --git a/control_toolbox/include/control_toolbox/rate_limiter.hpp b/control_toolbox/include/control_toolbox/rate_limiter.hpp index 63a830af..63543f64 100644 --- a/control_toolbox/include/control_toolbox/rate_limiter.hpp +++ b/control_toolbox/include/control_toolbox/rate_limiter.hpp @@ -207,15 +207,19 @@ void RateLimiter::set_params( } if (has_first_derivative_limits_) { + bool asym_given = + !std::isnan(min_first_derivative_pos) || + !std::isnan(max_first_derivative_neg); if (std::isnan(max_first_derivative_neg_)) { - max_first_derivative_neg_ = max_first_derivative_pos_; + max_first_derivative_neg_ = -max_first_derivative_pos_; } if (std::isnan(min_first_derivative_pos_)) { - min_first_derivative_pos_ = min_first_derivative_neg_; + min_first_derivative_pos_ = -min_first_derivative_neg_; } - if (has_first_derivative_limits_ && min_first_derivative_pos_ > max_first_derivative_neg_) + if (has_first_derivative_limits_ && asym_given && + min_first_derivative_pos_ > max_first_derivative_neg_) { throw std::invalid_argument("Invalid first derivative limits"); }