bhcontroller.h

Go to the documentation of this file.
00001 // ***************************************************************************
00002 //                           bhcontroller.h
00003 //
00004 //    copyright            : (C) 2004 by tbaier
00005 //    email                : tbaier@informatik.uni-hamburg.de
00006 // ***************************************************************************
00007 #ifndef BHCONTROLLER
00008 #define BHCONTROLLER
00009 
00010 
00011 #include <math.h>
00012 #include <iostream>
00013 
00016 // ***********************************************
00017 // **                                           **
00018 // **                                           **
00019 // ***********************************************
00025 class BHController
00026 {
00027  public:
00031   BHController(const double factor);
00032 
00035   virtual ~BHController() ;
00036 
00040   void setFactor(const double factor);
00041 
00045   double getFactor();
00046 
00050   virtual double getOutput(const double error) = 0;
00051 
00052  protected:
00053 
00056   double Factor;
00057 };
00058 
00059 // ****************************
00060 // **                        **
00061 // ****************************
00062 inline BHController::BHController(const double factor)
00063 {
00064   Factor = factor;
00065 }
00066 
00067 // ****************************
00068 // **                        **
00069 // ****************************
00070 inline void BHController::setFactor(const double factor)
00071 {
00072   Factor = factor;
00073 }
00074 
00075 // ****************************
00076 // **                        **
00077 // ****************************
00078 inline double BHController::getFactor()
00079 {
00080   return Factor;
00081 }
00082 
00083 // ****************************
00084 // **                        **
00085 // ****************************
00086 inline BHController::~BHController()
00087 {}
00088 
00089 
00090 // ***********************************************
00091 // **                                           **
00092 // **  P-CONTROLLER                             **
00093 // **                                           **
00094 // ***********************************************
00100 class BHPController : public BHController
00101 {
00102  public:
00106    BHPController(const double factor);
00107 
00111    double getOutput(const double error);
00112 };
00113 
00114 
00115 // ****************************
00116 // **                        **
00117 // ****************************
00118 inline  BHPController::BHPController(const double factor)
00119   : BHController(factor)
00120 {
00121 }
00122 
00123 // ****************************
00124 // **                        **
00125 // ****************************
00126 inline double BHPController::getOutput(const double error)
00127 {
00128   return Factor * error;
00129 }
00130 
00131 
00132 
00133 
00134 // ***********************************************
00135 // **                                           **
00136 // **  D-CONTROLLER                             **
00137 // **                                           **
00138 // ***********************************************
00144 class BHDController : public BHController
00145 {
00146  public:
00150    BHDController(const double factor);
00151 
00155    double getOutput(const double error);
00156 
00157  protected:
00158 
00161   double LastValue;
00162 };
00163 
00164 
00165 // ****************************
00166 // **                        **
00167 // ****************************
00168 inline  BHDController::BHDController(const double factor)
00169   :BHController(factor)
00170 {
00171   LastValue = 0.0;
00172 }
00173 
00174 // ****************************
00175 // **                        **
00176 // ****************************
00177 inline double BHDController::getOutput(const double error)
00178 {
00179   double last = LastValue;
00180 
00181   LastValue = error;
00182 
00183   return (error - last) * Factor;
00184 }
00185 
00186 
00187 
00188 
00189 
00190 // ***********************************************
00191 // **                                           **
00192 // **  I-CONTROLLER                             **
00193 // **                                           **
00194 // ***********************************************
00195 
00201 class BHIController : public BHController
00202 {
00203  public:
00208    BHIController(const double factor, const unsigned int size = 1);
00209 
00212    ~BHIController();
00213 
00217    double getOutput(const double error);
00218 
00221    void setISize(const unsigned int size);
00222 
00226    int getISize();
00227 
00231    void reset();
00232 
00233  protected:
00234 
00235    int IntPointer;
00236 
00239    int IntSize;
00240 
00243   double *IntArray;
00244 
00245 };
00246 
00247 
00248 // ****************************
00249 // **                        **
00250 // ****************************
00251 inline  BHIController::BHIController(const double factor, const unsigned int size)
00252   :BHController(factor)
00253 {
00254   IntPointer = 0;
00255   IntSize = size;
00256   IntArray = new double[size];
00257 
00258   memset(IntArray, 0, IntSize*sizeof(double));
00259 }
00260 
00261 
00262 // ****************************
00263 // **                        **
00264 // ****************************
00265 inline void BHIController::setISize(const unsigned int size)
00266 {
00267   if(IntArray)
00268     delete IntArray;
00269 
00270   IntSize = size;
00271   IntArray = new double[size];
00272 
00273   IntPointer = 0;
00274   memset(IntArray, 0, IntSize*sizeof(double));
00275 }
00276 
00277 
00278 // ****************************
00279 // **                        **
00280 // ****************************
00281 inline double BHIController::getOutput(const double error)
00282 {
00283   double result = 0.0;
00284 
00285   IntArray[IntPointer++] = error;
00286 
00287   IntPointer = (IntPointer > IntSize-1) ? 0 : IntPointer;
00288 
00289   for(int i = IntSize-1; i >= 0; i--)
00290     result += IntArray[i];
00291 
00292   return result *= Factor;
00293 }
00294 
00295 
00296 // ****************************
00297 // **                        **
00298 // ****************************
00299 inline int BHIController::getISize()
00300 {
00301   return IntSize;
00302 }
00303 
00304 
00305 // ****************************
00306 // **                        **
00307 // ****************************
00308 inline void BHIController::reset()
00309 {
00310   IntPointer = 0;
00311   memset(IntArray, 0, IntSize*sizeof(double));
00312 }
00313 
00314 
00315 // ****************************
00316 // **                        **
00317 // ****************************
00318 inline BHIController::~BHIController()
00319 {
00320    if(IntArray)
00321       delete []IntArray;
00322 }
00323 
00324 
00325 // ***********************************************
00326 // **                                           **
00327 // **  PD-CONTROLLER                           **
00328 // **                                           **
00329 // ***********************************************
00335 class BHPDController : public BHPController,
00336                         public BHDController
00337 {
00338  public:
00343    BHPDController(const double pfactor, const double dfactor);
00344 
00347    //  ~BHPDController();
00348 
00352    double getOutput(const double error);
00353 
00357    void setPFactor(const double factor);
00358 
00362    void setDFactor(const double factor);
00363 
00364  
00368    double getPFactor();
00369 
00373    double getDFactor();
00374 
00375  
00378    void showValues();
00379 
00380 };
00381 
00382 
00383 // ****************************
00384 // **                        **
00385 // ****************************
00386 inline BHPDController::BHPDController(const double pfactor,
00387                                       const double dfactor) :
00388   BHPController(pfactor),
00389      BHDController(dfactor)
00390 {
00391 }
00392 
00393 
00394 // ****************************
00395 // **                        **
00396 // ****************************
00397 inline double BHPDController::getOutput(const double error)
00398 {
00399   double result =  BHPController::getOutput(error);
00400   result += BHDController::getOutput(error);
00401 
00402   return result;
00403 }
00404 
00405 // ****************************
00406 // **                        **
00407 // ****************************
00408 inline void BHPDController::setPFactor(const double factor)
00409 {
00410   BHPController::setFactor(factor);
00411 }
00412 
00413 
00414 // ****************************
00415 // **                        **
00416 // ****************************
00417 inline void BHPDController::setDFactor(const double factor)
00418 {
00419   BHDController::setFactor(factor);
00420 }
00421 
00422 
00423 // ****************************
00424 // **                        **
00425 // ****************************
00426 inline double BHPDController::getPFactor()
00427 {
00428   return BHPController::getFactor();
00429 }
00430 
00431 // ****************************
00432 // **                        **
00433 // ****************************
00434 inline double BHPDController::getDFactor()
00435 {
00436   return BHDController::getFactor();
00437 }
00438 
00439 // ****************************
00440 // **                        **
00441 // ****************************
00442 inline void BHPDController::showValues()
00443 {
00444   std::cout << "\n\t ** P-Factor: " << getPFactor() << "\n"
00445             << "\t ** D-Factor: "   << getDFactor() << "\n" << std::endl;
00446 
00447 }
00448 
00449 
00450 
00451 // ***********************************************
00452 // **                                           **
00453 // **  PID-CONTROLLER                           **
00454 // **                                           **
00455 // ***********************************************
00461 class BHPIDController : public BHPController,
00462                         public BHDController,
00463                         public BHIController
00464 {
00465  public:
00472    BHPIDController(const double pfactor, const double dfactor, const double ifactor, const int size = 1);
00473 
00476    //  ~BHPIDController();
00477 
00481    double getOutput(const double error);
00482 
00486    void setPFactor(const double factor);
00487 
00491    void setDFactor(const double factor);
00492 
00496    void setIFactor(const double factor);
00497 
00501    double getPFactor();
00502 
00506    double getDFactor();
00507 
00511    double getIFactor();
00512 
00515    void showValues();
00516 
00517 };
00518 
00519 
00520 // ****************************
00521 // **                        **
00522 // ****************************
00523 inline BHPIDController::BHPIDController(const double pfactor,
00524                                         const double dfactor,
00525                                         const double ifactor, const int isize) :
00526   BHPController(pfactor),
00527      BHDController(dfactor),
00528      BHIController(ifactor, isize)
00529 {
00530 }
00531 
00532 
00533 // ****************************
00534 // **                        **
00535 // ****************************
00536 inline double BHPIDController::getOutput(const double error)
00537 {
00538   double result =  BHPController::getOutput(error);
00539   result += BHDController::getOutput(error);
00540   result += BHIController::getOutput(error);
00541 
00542   return result;
00543 }
00544 
00545 // ****************************
00546 // **                        **
00547 // ****************************
00548 inline void BHPIDController::setPFactor(const double factor)
00549 {
00550   BHPController::setFactor(factor);
00551 }
00552 
00553 
00554 // ****************************
00555 // **                        **
00556 // ****************************
00557 inline void BHPIDController::setDFactor(const double factor)
00558 {
00559   BHDController::setFactor(factor);
00560 }
00561 
00562 // ****************************
00563 // **                        **
00564 // ****************************
00565 inline void BHPIDController::setIFactor(const double factor)
00566 {
00567   BHIController::setFactor(factor);
00568 }
00569 
00570 
00571 // ****************************
00572 // **                        **
00573 // ****************************
00574 inline double BHPIDController::getPFactor()
00575 {
00576   return BHPController::getFactor();
00577 }
00578 
00579 // ****************************
00580 // **                        **
00581 // ****************************
00582 inline double BHPIDController::getDFactor()
00583 {
00584   return BHDController::getFactor();
00585 }
00586 
00587 
00588 // ****************************
00589 // **                        **
00590 // ****************************
00591 inline double BHPIDController::getIFactor()
00592 {
00593   return BHIController::getFactor();
00594 }
00595 
00596 
00597 // ****************************
00598 // **                        **
00599 // ****************************
00600 inline void BHPIDController::showValues()
00601 {
00602   std::cout << "\n\t ** P-Factor: " << getPFactor() << "\n"
00603             << "\t ** D-Factor: "   << getDFactor() << "\n"
00604             << "\t ** I-Factor: "   << getIFactor() << "\n"
00605             << "\t ** I-Size  : "   << getISize()   << "\n" << std::endl;
00606 }
00607 
00608 
00609 #endif //BHCONTROLLER


tams Tim Baier bhandlib v0.25
Generated Wed Aug 16 14:57:09 2006 by doxygen 1.4.7