chose PID library implement PID (weight is NOT determined)
Dependents: optWingforHAPS_Eigen hexaTest_Eigen
Diff: PIDcontroller.cpp
- Revision:
- 4:462dd38db926
- Parent:
- 3:c99dfa48b606
- Child:
- 6:dfd3e6512bd5
--- a/PIDcontroller.cpp Thu Aug 26 04:28:32 2021 +0000 +++ b/PIDcontroller.cpp Wed Sep 01 04:55:53 2021 +0000 @@ -12,7 +12,6 @@ prevControllerOutput_ = 0.0; accError_ = 0.0; - accErrorMax_ = 1.0; Error_ = 0.0; prevError_= 0.0; Bias_ = 0.0; @@ -64,10 +63,6 @@ Kp_ = Kp; Ki_ = Ki; Kd_ = Kd; } -void PID::setAccErrorMax(float maxVal) { - accErrorMax_ = maxVal; -} - float PID::compute(){ //現在値と目標値の値を0~100%の範囲に置き換える @@ -82,16 +77,13 @@ if (!(prevControllerOutput_ >= 1 && Error_ > 0) && !(prevControllerOutput_ <= 0 && Error_ < 0)) { accError_ += (Error_ + prevError_) / 2.0 * tSample_; //偏差の積分値の計算 } - if(accError_> accErrorMax_){accError_= accErrorMax_;} - if(accError_< -accErrorMax_){accError_= -accErrorMax_;} - + //偏差の微分値の計算(不完全微分が有効な場合,偏差の不完全微分値を計算) float diffError = usingIncompleteDifferential ? calcIncompleteDifferential() : (Error_ - prevError_) / tSample_; //フィードフォワード制御が有効な場合,バイアス値の計算 float scaledBias = usingFeedForward ? (Bias_ - outMin_) / outSpan_ : 0.0; - //PIDの計算 controllerOutput_ = scaledParcent(scaledBias + Kp_ * Error_ + Ki_ * accError_ + Kd_ * diffError);