Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PIDCONTROLLER_HPP
00035 #define PIDCONTROLLER_HPP
00036
00037 #include <string>
00038 #include <youbot_driver/generic/Time.hpp>
00039
00040 namespace youbot
00041 {
00042
00043
00093
00094
00095 class PidController
00096 {
00097 public:
00098
00109 PidController(double P = 0.0, double I = 0.0, double D = 0.0, double I1 = 0.0, double I2 = -0.0);
00110
00114 ~PidController();
00115
00122 double updatePid(double p_error, boost::posix_time::time_duration dt);
00123
00133 void initPid(double P, double I, double D, double I1, double I2);
00134
00138 void reset();
00139
00143 void setCurrentCmd(double cmd);
00144
00148 double getCurrentCmd();
00149
00156 void getCurrentPIDErrors(double& pe, double& ie, double& de);
00157
00166 void setGains(double P, double I, double D, double i_max, double i_min);
00167
00176 void getGains(double &p, double &i, double &d, double &i_max, double &i_min);
00177
00186 double updatePid(double error, double error_dot, boost::posix_time::time_duration dt);
00187
00188 PidController &operator =(const PidController& p)
00189 {
00190 if (this == &p)
00191 return *this;
00192
00193 p_gain_ = p.p_gain_;
00194 i_gain_ = p.i_gain_;
00195 d_gain_ = p.d_gain_;
00196 i_max_ = p.i_max_;
00197 i_min_ = p.i_min_;
00198
00199 p_error_last_ = p_error_ = i_error_ = d_error_ = cmd_ = 0.0;
00200 return *this;
00201 }
00202
00203 private:
00204 double p_error_last_;
00205 double p_error_;
00206 double d_error_;
00207 double i_error_;
00208 double p_gain_;
00209 double i_gain_;
00210 double d_gain_;
00211 double i_max_;
00212 double i_min_;
00213 double cmd_;
00214 double last_i_error;
00215 };
00216
00217 }
00218
00219 #endif