11 #ifndef CONTROLLERPIDCONTROLLER_H
12 #define CONTROLLERPIDCONTROLLER_H
18 #include <base/Time.hpp>
21 bool zeroCrossing(
double currValue,
double prevValue,
double refValue = 0);
29 namespace motor_controller
95 return !(*
this == other);
164 return !(*
this == other);
292 double update (
double _measuredValue,
double _referenceValue,
double time = 0.0 );
369 double prevReferenceValue;
372 double Bi, Ad, Bd, Ao;
374 double P, I, D, rawCommand, saturatedCommand;
381 bool bDerivativeFiltering;
397 void computeCoefficients();
401 void autoEnableModes();
410 double _stepRef = 1.0,
411 double _inputAmplitude = 0.1,
412 double _testTimeSec = 10.0);
415 double _stepRef = 1.0,
416 double _inputAmplitude = 0.1,
417 double _testTimeSec = 10.0);
419 double update(
double _measuredValue);
423 void getTunedPID(
double &_Kp,
double &_Ti,
double &_Td);
430 double inputAmplitude;
432 double outputTimePeriodSec;
433 double outputAmplitude;
441 bool firstZeroCrossing;
444 double deltaOutputTime;
446 double maxAmplitude, minAmplitude;
465 double _riseTimeFractionReference = 1.0,
466 double _settlingTimeFractionReference = 0.05);
469 double _riseTimeFractionReference = 1.0,
470 double _settlingTimeFractionReference = 0.05);
474 void update(
double _actualOutput,
478 double &_settlingTimeSec,
479 double &_percentOvershoot,
480 double &_steadyStateError);
488 double settlingTimeSec;
489 double percentOvershoot;
490 double steadyStateError;
491 double steadyStateErrorTimeSec;
493 std::vector<double> maxAmplitudes;
496 double riseTimeFractionReference;
497 double settlingTimeFractionReference;
503 bool riseTimeDetected;
504 bool firstZeroCrossing;
PID Implementation in C++.
Definition: PID.hpp:231
double Kp
Proportional gain.
Definition: PID.hpp:111
bool operator!=(const ParallelPIDSettings &other) const
Definition: PID.hpp:163
double Ki
Integral gain.
Definition: PID.hpp:114
double N
Derivative term.
Definition: PID.hpp:124
PIDStepResponseProperties()
Definition: PID.hpp:463
void setIdealCoefficients(double _K=0, double _Ti=0, double _Td=0)
Definition: PID.cpp:48
double K
Proportional gain.
Definition: PID.hpp:42
bool initialized
Definition: PID.hpp:181
void printProperties()
Definition: PID.cpp:649
void setParallelCoefficients(double _Ts, double _Kp=0, double _Ki=0, double _Kd=0, double _N=0, double _B=1, double _Tt=-1, double _YMin=0, double _YMax=0)
Sets the coefficients for a 'PARALLEL' type PID.
Definition: PID.cpp:95
double saturatedOutput
Definition: PID.hpp:186
double YMax
Maximum output value.
Definition: PID.hpp:145
double YMax
Maximum output value.
Definition: PID.hpp:76
PID()
Constructor.
Definition: PID.cpp:59
void reset()
Resets the controller.
Definition: PID.cpp:307
double reference
Definition: PID.hpp:184
double update(double _measuredValue)
Definition: PID.cpp:444
base::Time time
Definition: PID.hpp:179
double Ti
Integral time constant, 0 to disable it.
Definition: PID.hpp:45
bool isIntegralEnabled() const
Returns whether integral part is enabled.
Definition: PID.hpp:311
ParallelPIDSettings()
Constructor.
Definition: PID.hpp:148
double N
Derivative term.
Definition: PID.hpp:55
double rawOutput
Definition: PID.hpp:185
double B
Setpoint weighing term.
Definition: PID.hpp:131
double YMin
Minimum output value.
Definition: PID.hpp:143
void update(double _actualOutput, double _refInput)
Definition: PID.cpp:573
Structure to hold the PID parameters for 'IDEAL' type PID.
Definition: PID.hpp:36
double Ts
Sampling time in seconds.
Definition: PID.hpp:108
double Ts
Sampling time in seconds.
Definition: PID.hpp:39
void getTunedPI(double &_Kp, double &_Ti)
Definition: PID.cpp:511
double B
Setpoint weighing term.
Definition: PID.hpp:62
double Td
Derivative time constant, 0 to disable it.
Definition: PID.hpp:48
bool isDerivativeEnabled() const
Returns whether derivative part is enabled.
Definition: PID.hpp:324
void enableDerivative()
Enables the derivative part of the controller.
Definition: PID.cpp:343
double I
Definition: PID.hpp:182
double P
Definition: PID.hpp:182
bool operator==(const PIDSettings &other) const
Definition: PID.hpp:81
double YMin
Minimum output value.
Definition: PID.hpp:74
void getTunedPID(double &_Kp, double &_Ti, double &_Td)
Definition: PID.cpp:518
void setDerivativeMode(DerivativeMode mode)
Sets the derivative mode.
Definition: PID.cpp:378
PIDState getState() const
Returns the internal state of the controller.
Definition: PID.cpp:396
bool negativeZeroCrossing(double currValue, double prevValue, double refValue=0)
Detects negative zero crossing.
Definition: PID.cpp:24
void setPIDSettings(const PIDSettings &_settings)
Sets the coefficients for a 'IDEAL' type PID using the struct PIDSettings.
Definition: PID.cpp:114
double Tt
Anti-integrator-windup.
Definition: PID.hpp:70
void disableIntegral()
Diables the integral part of the controller.
Definition: PID.cpp:315
PID auto tuning using Relay Feedback.
Definition: PID.hpp:405
bool isSaturated()
Returns true if the controller got saturated in the last run.
Definition: PID.cpp:390
double update(double _measuredValue, double _referenceValue, double time=0.0)
Returns the Controller command at each sampling time.
Definition: PID.cpp:257
DerivativeMode getDerivativeMode() const
Returns the current derivative mode.
Definition: PID.cpp:384
PIDAutoTuning()
Definition: PID.cpp:411
void disableDerivative()
Diables the derivative part of the controller.
Definition: PID.cpp:336
void setIdealCoefficients(double _Ts, double _K=0, double _Ti=0, double _Td=0, double _N=0, double _B=1, double _Tt=-1, double _YMin=0, double _YMax=0)
Sets the coefficients for a 'PARALLEL' type PID.
Definition: PID.cpp:133
double Kd
Derivative gain.
Definition: PID.hpp:117
void getProperties(double &_riseTimeSec, double &_settlingTimeSec, double &_percentOvershoot, double &_steadyStateError)
Definition: PID.cpp:637
void printCoefficients()
Prints the controller coefficients.
Definition: PID.cpp:234
PIDSettings()
Constructor.
Definition: PID.hpp:79
DerivativeMode
Definition: PID.hpp:195
void setParallelPIDSettings(const ParallelPIDSettings &_settings)
Sets the coefficients for a 'PARALLEL' type PID using the struct ParallelPIDSettings.
Definition: PID.cpp:82
void setCoefficients(double _Ts, double _stepRef=1.0, double _inputAmplitude=0.1, double _testTimeSec=10.0)
Definition: PID.cpp:432
void disableDerivativeFiltering()
Diables the derivative filtering.
Definition: PID.cpp:357
bool zeroCrossing(double currValue, double prevValue, double refValue=0)
Detects zero crossing.
Definition: PID.cpp:7
double saturate(double _val)
Sets the saturation limit to +/- _val, disables if _val = 0.0.
Definition: PID.cpp:176
void getTunedP(double &_Kp)
Definition: PID.cpp:505
bool operator==(const ParallelPIDSettings &other) const
Definition: PID.hpp:150
bool operator!=(const PIDSettings &other) const
Definition: PID.hpp:94
Structure to hold the PID parameters for 'PARALLEL' type PID.
Definition: PID.hpp:105
void enableDerivativeFiltering()
Enables the derivative filtering.
Definition: PID.cpp:364
void setParallelCoefficients(double _Kp=0, double _Ki=0, double _Kd=0)
Definition: PID.cpp:31
void enableIntegral()
Enables the integral part of the controller.
Definition: PID.cpp:322
void setCoefficients(double _Ts, double _riseTimeFractionReference=1.0, double _settlingTimeFractionReference=0.05)
Definition: PID.cpp:544
double input
Definition: PID.hpp:183
bool isDerivativeFilteringEnabled() const
Returns whether derivative filtering part is enabled.
Definition: PID.hpp:336
void reset()
Definition: PID.cpp:554
double D
Definition: PID.hpp:182
bool positiveZeroCrossing(double currValue, double prevValue, double refValue=0)
Detects positive zero crossing.
Definition: PID.cpp:16
double Tt
Anti-integrator-windup.
Definition: PID.hpp:139