1#ifndef PROPORTIONALINTEGRAL_CONTROLLER_H
2#define PROPORTIONALINTEGRAL_CONTROLLER_H
27 :
Controller(symbol, value, number_signals, refs) {
28 if (value.size() != 2) {
29 throw std::invalid_argument(
"Controller values must contain at least Kp and Ki.");
44 void updateParameters(
double newKp,
double newKi,
double newZeta,
double newBandwidth);
54 virtual Eigen::VectorXd
define_equations(
const Eigen::VectorXd& x,
const Eigen::VectorXd& u,
const Eigen::VectorXd& c)
override;
63 virtual Eigen::VectorXd
define_equations(
const double x,
const double u,
const double c)
override;
67 std::cout <<
" Controller type: PI \n"
68 <<
" Proportional Gain (Kp): " << Kp <<
"\n"
69 <<
" Integral Gain (Ki): " << Ki <<
"\n"
70 <<
" Damping Ratio (zeta): " << zeta <<
"\n"
71 <<
" Bandwidth: " << bandwidth <<
" Hz\n"
72 <<
" Reference Values: ";
74 std::cout << ref <<
" ";
76 std::cout << std::endl;
101 return { Kp, Ki, zeta, bandwidth };
106 if (params.size() != 4) {
107 throw std::invalid_argument(
"Parameter vector must contain Kp, Ki, zeta, and bandwidth.");
112 bandwidth = params[3];
Base class for reference-tracking controllers.
Abstract controller with per-channel reference values.
Definition Controller.h:17
std::vector< double > reference
Definition Controller.h:105
PI controller with optional damping and bandwidth metadata.
Definition ProportionalIntegral_controller.h:17
double getKi() const
Return the integral gain Ki.
Definition ProportionalIntegral_controller.h:85
virtual void printValues() override
Print controller type, gains, damping, bandwidth, and references.
Definition ProportionalIntegral_controller.h:66
double getKp() const
Return the proportional gain Kp.
Definition ProportionalIntegral_controller.h:80
double getBandwidth() const
Return the bandwidth (Hz).
Definition ProportionalIntegral_controller.h:95
double getZeta() const
Return the damping ratio.
Definition ProportionalIntegral_controller.h:90
virtual vector< double > getParameters() const override
Return { Kp, Ki, zeta, bandwidth }.
Definition ProportionalIntegral_controller.h:100
virtual Eigen::VectorXd define_equations(const Eigen::VectorXd &x, const Eigen::VectorXd &u, const Eigen::VectorXd &c) override
Vector PI-controller dynamics.
Definition ProportionalIntegral_controller.cpp:39
ProportionalIntegralController(const std::string &symbol, const std::vector< double > &value, int number_signals, std::vector< double > refs={ 0 })
Construct a PI controller.
Definition ProportionalIntegral_controller.h:26
void updateParameters(double newKp, double newKi, double newZeta, double newBandwidth)
Replace Kp, Ki, damping ratio, and bandwidth.
Definition ProportionalIntegral_controller.cpp:15
virtual void setParameters(const vector< double > ¶ms) override
Set parameters from { Kp, Ki, zeta, bandwidth }.
Definition ProportionalIntegral_controller.h:105