LightLib
PROS library for VEX V5: EKF/MCL localization, RAMSETE path following, high-level chassis API
Loading...
Searching...
No Matches
iterativeVelPidController.hpp
Go to the documentation of this file.
1/*
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 */
6#pragma once
7
14
15namespace okapi {
17 public:
18 struct Gains {
19 double kP{0};
20 double kD{0};
21 double kF{0};
22 double kSF{0};
23
24 bool operator==(const Gains &rhs) const;
25 bool operator!=(const Gains &rhs) const;
26 };
27
41 double ikP,
42 double ikD,
43 double ikF,
44 double ikSF,
45 std::unique_ptr<VelMath> ivelMath,
46 const TimeUtil &itimeUtil,
47 std::unique_ptr<Filter> iderivativeFilter = std::make_unique<PassthroughFilter>(),
48 std::shared_ptr<Logger> ilogger = Logger::getDefaultLogger());
49
60 const Gains &igains,
61 std::unique_ptr<VelMath> ivelMath,
62 const TimeUtil &itimeUtil,
63 std::unique_ptr<Filter> iderivativeFilter = std::make_unique<PassthroughFilter>(),
64 std::shared_ptr<Logger> ilogger = Logger::getDefaultLogger());
65
73 double step(double inewReading) override;
74
80 void setTarget(double itarget) override;
81
88 void controllerSet(double ivalue) override;
89
95 double getTarget() override;
96
102 double getTarget() const;
103
107 double getProcessValue() const override;
108
112 double getOutput() const override;
113
119 double getMaxOutput() override;
120
126 double getMinOutput() override;
127
131 double getError() const override;
132
141 bool isSettled() override;
142
148 void setSampleTime(QTime isampleTime) override;
149
156 void setOutputLimits(double imax, double imin) override;
157
165 void setControllerSetTargetLimits(double itargetMax, double itargetMin) override;
166
171 void reset() override;
172
177 void flipDisable() override;
178
185 void flipDisable(bool iisDisabled) override;
186
192 bool isDisabled() const override;
193
199 QTime getSampleTime() const override;
200
207 virtual QAngularSpeed stepVel(double inewReading);
208
214 virtual void setGains(const Gains &igains);
215
222
228 virtual void setTicksPerRev(double tpr);
229
233 virtual QAngularSpeed getVel() const;
234
235 protected:
236 std::shared_ptr<Logger> logger;
237 double kP, kD, kF, kSF;
238 QTime sampleTime{10_ms};
239 double error{0};
240 double derivative{0};
241 double target{0};
242 double outputSum{0};
243 double output{0};
244 double outputMax{1};
245 double outputMin{-1};
249
250 std::unique_ptr<VelMath> velMath;
251 std::unique_ptr<Filter> derivativeFilter;
252 std::unique_ptr<AbstractTimer> loopDtTimer;
253 std::unique_ptr<SettledUtil> settledUtil;
254};
255} // namespace okapi
void setOutputLimits(double imax, double imin) override
Set controller output bounds.
double getMinOutput() override
Get the lower output bound.
void setControllerSetTargetLimits(double itargetMax, double itargetMin) override
Sets the (soft) limits for the target range that controllerSet() scales into.
virtual void setTicksPerRev(double tpr)
Sets the number of encoder ticks per revolution.
std::unique_ptr< AbstractTimer > loopDtTimer
IterativeVelPIDController(const Gains &igains, std::unique_ptr< VelMath > ivelMath, const TimeUtil &itimeUtil, std::unique_ptr< Filter > iderivativeFilter=std::make_unique< PassthroughFilter >(), std::shared_ptr< Logger > ilogger=Logger::getDefaultLogger())
Velocity PD controller.
void controllerSet(double ivalue) override
Writes the value of the controller output.
void reset() override
Resets the controller's internal state so it is similar to when it was first initialized,...
double getTarget() const
Gets the last set target, or the default target if none was set.
double getTarget() override
Gets the last set target, or the default target if none was set.
bool isDisabled() const override
Returns whether the controller is currently disabled.
void flipDisable(bool iisDisabled) override
Sets whether the controller is off or on.
double step(double inewReading) override
Do one iteration of the controller.
double getError() const override
Returns the last error of the controller.
bool isSettled() override
Returns whether the controller has settled at the target.
void flipDisable() override
Changes whether the controller is off or on.
QTime getSampleTime() const override
Get the last set sample time.
double getOutput() const override
Returns the last calculated output of the controller.
void setTarget(double itarget) override
Sets the target for the controller.
virtual void setGains(const Gains &igains)
Set controller gains.
double getProcessValue() const override
double getMaxOutput() override
Get the upper output bound.
Gains getGains() const
Gets the current gains.
virtual QAngularSpeed stepVel(double inewReading)
Do one iteration of velocity calculation.
void setSampleTime(QTime isampleTime) override
Set time between loops in ms.
std::unique_ptr< SettledUtil > settledUtil
IterativeVelPIDController(double ikP, double ikD, double ikF, double ikSF, std::unique_ptr< VelMath > ivelMath, const TimeUtil &itimeUtil, std::unique_ptr< Filter > iderivativeFilter=std::make_unique< PassthroughFilter >(), std::shared_ptr< Logger > ilogger=Logger::getDefaultLogger())
Velocity PD controller.
virtual QAngularSpeed getVel() const
Returns the current velocity.
static std::shared_ptr< Logger > getDefaultLogger()
Utility class for holding an AbstractTimer, AbstractRate, and SettledUtil together in one class since...
Definition timeUtil.hpp:18
bool operator!=(const Gains &rhs) const
bool operator==(const Gains &rhs) const