From 126c4bb2963676b8911ec34eb1c0abcaaf4da5de Mon Sep 17 00:00:00 2001 From: Dan Katzuv Date: Sun, 16 Feb 2025 19:10:23 +0200 Subject: [PATCH] Add limit setters to `SlewRateLimiter` --- .../first/math/filter/SlewRateLimiter.java | 28 +++++++++++++++++-- .../include/frc/filter/SlewRateLimiter.h | 25 +++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/wpimath/src/main/java/edu/wpi/first/math/filter/SlewRateLimiter.java b/wpimath/src/main/java/edu/wpi/first/math/filter/SlewRateLimiter.java index d9eca58419a..d627cbcde9a 100644 --- a/wpimath/src/main/java/edu/wpi/first/math/filter/SlewRateLimiter.java +++ b/wpimath/src/main/java/edu/wpi/first/math/filter/SlewRateLimiter.java @@ -14,8 +14,8 @@ * edu.wpi.first.math.trajectory.TrapezoidProfile} instead. */ public class SlewRateLimiter { - private final double m_positiveRateLimit; - private final double m_negativeRateLimit; + private double m_positiveRateLimit; + private double m_negativeRateLimit; private double m_prevVal; private double m_prevTime; @@ -82,4 +82,28 @@ public void reset(double value) { m_prevVal = value; m_prevTime = MathSharedStore.getTimestamp(); } + + /** + * Sets the rate-of-change limit. + * + * @param positiveRateLimit The rate-of-change limit in the positive direction, in units per + * second. This is expected to be positive. + * @param negativeRateLimit The rate-of-change limit in the negative direction, in units per + * second. This is expected to be negative. + */ + public void setLimit(double positiveRateLimit, double negativeRateLimit) { + m_positiveRateLimit = positiveRateLimit; + m_negativeRateLimit = negativeRateLimit; + } + + /** + * Sets the rate-of-change limit in both directions. + * + * @param rateLimit The rate-of-change limit in both directions, in units per second. This is + * expected to be positive. + */ + public void setLimit(double rateLimit) { + m_positiveRateLimit = rateLimit; + m_negativeRateLimit = rateLimit; + } } diff --git a/wpimath/src/main/native/include/frc/filter/SlewRateLimiter.h b/wpimath/src/main/native/include/frc/filter/SlewRateLimiter.h index f04aac4855a..65d630cb1d9 100644 --- a/wpimath/src/main/native/include/frc/filter/SlewRateLimiter.h +++ b/wpimath/src/main/native/include/frc/filter/SlewRateLimiter.h @@ -92,6 +92,31 @@ class SlewRateLimiter { m_prevTime = wpi::math::MathSharedStore::GetTimestamp(); } + /** + * Sets the rate-of-change limit. + * + * @param positiveRateLimit The rate-of-change limit in the positive direction, in units per + * second. This is expected to be positive. + * @param negativeRateLimit The rate-of-change limit in the negative direction, in units per + * second. This is expected to be negative. + */ + void SetLimit(Rate_t positiveRateLimit, Rate_t negativeRateLimit) { + m_positiveRateLimit = positiveRateLimit; + m_negativeRateLimit = negativeRateLimit; + } + + /** + * Sets the rate-of-change limit in both directions. + * + * @param rateLimit The rate-of-change limit in both directions, in units per second. This is + * expected to be positive. + */ + void SetLimit(Rate_t rateLimit) { + m_positiveRateLimit = rateLimit; + m_negativeRateLimit = rateLimit; + } + + private: Rate_t m_positiveRateLimit; Rate_t m_negativeRateLimit;