From 75f3ebd1158bce3edeae1e4fceb87f2b65258ed9 Mon Sep 17 00:00:00 2001 From: TheDevMystic Date: Sat, 29 Nov 2025 09:51:08 +0530 Subject: [PATCH 1/2] Refactor: Fixed rate_limiter.hpp initialization. --- control_toolbox/include/control_toolbox/rate_limiter.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/control_toolbox/include/control_toolbox/rate_limiter.hpp b/control_toolbox/include/control_toolbox/rate_limiter.hpp index 63a830af..4f7638cd 100644 --- a/control_toolbox/include/control_toolbox/rate_limiter.hpp +++ b/control_toolbox/include/control_toolbox/rate_limiter.hpp @@ -209,11 +209,11 @@ void RateLimiter::set_params( { 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_) { From 2df6fbc7a026ff941c973a873c0cbd9543ea5c7c Mon Sep 17 00:00:00 2001 From: TheDevMystic Date: Sat, 29 Nov 2025 10:41:35 +0530 Subject: [PATCH 2/2] Refactor: Fixed validation logic. --- control_toolbox/include/control_toolbox/rate_limiter.hpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/control_toolbox/include/control_toolbox/rate_limiter.hpp b/control_toolbox/include/control_toolbox/rate_limiter.hpp index 4f7638cd..63543f64 100644 --- a/control_toolbox/include/control_toolbox/rate_limiter.hpp +++ b/control_toolbox/include/control_toolbox/rate_limiter.hpp @@ -207,6 +207,9 @@ 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_; @@ -215,7 +218,8 @@ void RateLimiter::set_params( { 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"); }