13#include <include/qlibs_types.hpp>
14#include <include/numa.hpp>
66 :
Kc(kc),
Ki(ki),
Kd(kd) {}
68 constexpr pidGains operator+(
const pidGains& other)
const {
79 constexpr pidGains operator"" _kc(
long double v) {
80 return {
static_cast<real_t>(v), 0.0_re, 0.0_re};
82 constexpr pidGains operator"" _ki(
long double v) {
83 return {0.0_re,
static_cast<real_t>(v), 0.0_re};
85 constexpr pidGains operator"" _kd(
long double v) {
86 return {0.0_re, 0.0_re,
static_cast<real_t>(v)};
118 static bool isValidValue(
const real_t x )
noexcept;
120 void initialize(
const pidGains current,
121 const real_t dt )
noexcept;
122 inline void enable(
const uint32_t tEnable )
noexcept
126 inline bool isComplete(
void )
const noexcept
130 inline void setMemoryFactor(
const real_t lambda )
noexcept
134 inline void setMomentum(
const real_t Mu )
noexcept
138 inline void setEstimatedControllerSpeed(
const real_t alpha )
noexcept
142 inline void setEstimatedControllerType(
const pidType t )
noexcept
146 static inline bool isValidParam(
const real_t p )
noexcept
148 return ( p > 0.0_re ) && ( p <= 1.0_re );
150 bool step(
const real_t u,
152 const real_t dt )
noexcept;
165 real_t b, c, sat_Min, sat_Max, epsilon, kw, kt, D, u1, beta, uSat, gainBlend;
169 const real_t *yr{
nullptr };
176 bool isInitialized{
false };
180 const real_t vMax )
noexcept;
181 void adaptGains(
const real_t u,
182 const real_t y )
noexcept;
198 const real_t dT )
noexcept;
207 const real_t dT )
noexcept
209 return setup( g.Kc, g.Ki, g.Kd, dT );
229 const real_t td )
noexcept;
240 const real_t kd )
noexcept;
257 const real_t Kt )
noexcept;
266 const real_t Max )
noexcept;
321 const real_t gc )
noexcept;
340 const real_t Gamma = 0.5_re,
341 const real_t Alpha = 0.01_re )
noexcept;
362 const real_t y )
noexcept;
395 const bool retValue =
nullptr != adapt;
430 const real_t Tb = 3.0_re )
noexcept;
443 bool reset(
void )
noexcept;
459 explicit operator bool() const noexcept {
460 return isInitialized;
nState(const real_t x0=0.0_re, const real_t sn_1=0.0_re, const real_t sn_2=0.0_re) noexcept
Constructor for the state object.
Definition numa.hpp:71
A PID Auto-tuning object.
Definition pid.hpp:95
pidGains getEstimates(void) const noexcept
Definition pid.cpp:368
static const uint32_t UNDEFINED
Constant to keep the auto-tuner enabled indefinitely.
Definition pid.hpp:101
friend class pidController
Definition pid.hpp:96
bool setup(const real_t kc, const real_t ki, const real_t kd, const real_t dT) noexcept
Setup and initialize the PID controller instance.
Definition pid.cpp:10
bool setEpsilon(const real_t eps) noexcept
Set the minimum value considered as error.
Definition pid.cpp:141
bool setManualInput(const real_t manualInput) noexcept
Set the PID manual input mode. This value will be used as the manual input when the controller it set...
Definition pid.cpp:203
bool setGains(const real_t kc, const real_t ki, const real_t kd) noexcept
Set/Change the PID controller gains.
Definition pid.cpp:61
bool isAutoTuningComplete(void) const noexcept
Verifies that the auto tuning process has finished with new gains set on the controller.
Definition pid.cpp:459
virtual ~pidController()
Definition pid.hpp:184
bool setExtraGains(const real_t Kw, const real_t Kt) noexcept
Set/Change extra PID controller gains.
Definition pid.cpp:93
pidGains getGains(void) const noexcept
Retrieve the current PID gains.
Definition pid.hpp:449
bool setSaturation(const real_t Min, const real_t Max) noexcept
Setup the output saturation for the PID controller.
Definition pid.cpp:107
bool enableAutoTuning(const uint32_t tEnable) noexcept
Set the number of time steps where the auto tuner algorithm will modify the controller gains.
Definition pid.cpp:447
bool setSeries(void) noexcept
Convert the controller gains to conform the series or interacting form.
Definition pid.cpp:121
bool unbindAutoTuning(void) noexcept
Unbind and disable the PID controller auto-tuning algorithm.
Definition pid.hpp:393
bool setDerivativeFilter(const real_t Beta) noexcept
Set the tuning parameter for the derivative filter.
Definition pid.cpp:153
bool setDerivativeFilterTimeConstant(const real_t Tf) noexcept
Set the time constant for the derivative filter.
Definition pid.cpp:165
bool setAutoTuningParameters(const real_t Mu, const real_t Alpha, const real_t lambda, const real_t Tb=3.0_re) noexcept
Change parameters of the auto-tuning algorithm.
Definition pid.cpp:470
real_t operator()(const real_t w, const real_t y)
Computes the control action for given PID controller instance.
Definition pid.hpp:375
bool setModelReferenceControl(const real_t &modelRef, const real_t Gamma=0.5_re, const real_t Alpha=0.01_re) noexcept
Enable the additive MRAC(Model Reference Adaptive Control) feature.
Definition pid.cpp:233
bool setReferenceWeighting(const real_t gb, const real_t gc) noexcept
Set the PID Reference(Set-Point) Weighting. This value is used in order to avoid the increase of the ...
Definition pid.cpp:189
bool setDirection(const pidDirection d) noexcept
Set the PID control action direction.
Definition pid.cpp:35
bool removeModelReferenceControl(void) noexcept
Removes the additive MRAC(Model Reference Adaptive Control) feature from the control loop....
Definition pid.cpp:250
bool reset(void) noexcept
Reset the internal PID controller calculations.
Definition pid.cpp:215
bool setAutoTuningControllerType(const pidType t) noexcept
Select the PID type to tune.
Definition pid.cpp:493
bool bindAutoTuning(pidAutoTuning &at) noexcept
Binds the specified instance to enable the PID controller auto tuning algorithm.
Definition pid.cpp:434
bool setMode(const pidMode Mode) noexcept
Change the controller operational mode. In pidMode::PID_AUTOMATIC, the computed output of the PID con...
Definition pid.cpp:177
bool setup(const pidGains &g, const real_t dT) noexcept
Setup and initialize the PID controller instance.
Definition pid.hpp:206
real_t control(const real_t w, const real_t y) noexcept
Computes the control action for given PID controller instance.
Definition pid.cpp:273
bool setParams(const real_t kc, const real_t ti, const real_t td) noexcept
Set/Change the PID controller gains by using the [Kc, Ti Td ] triplet.
Definition pid.cpp:47
type
An enum with the inference system types supported by qlibs::fis.
Definition fis.hpp:108
pidType
Enumeration class with the operational modes for the PID controller.
Definition pid.hpp:36
pidMode
Enumeration class with the operational modes for the PID controller.
Definition pid.hpp:28
pidDirection
Direction modes of the PID controller.
Definition pid.hpp:46
@ PID_TYPE_PID
Definition pid.hpp:40
@ PID_TYPE_PD
Definition pid.hpp:39
@ PID_TYPE_PI
Definition pid.hpp:38
@ PID_TYPE_P
Definition pid.hpp:37
@ PID_AUTOMATIC
Definition pid.hpp:29
@ PID_MANUAL
Definition pid.hpp:30
@ PID_BACKWARD
Definition pid.hpp:48
@ PID_FORWARD
Definition pid.hpp:47
The qLibs++ library namespace.
Definition mat.hpp:18
float real_t
A type to instantiate a real variable double-precision of 64-bits IEEE 754.
Definition qlibs_types.hpp:43
PID Gains structure.
Definition pid.hpp:58
real_t Kc
Definition pid.hpp:59
real_t Kd
Definition pid.hpp:61
real_t Ki
Definition pid.hpp:60