MicroMouse Control Module  v1.3.2-2-ge2c6882
feedback_controller.h
[詳解]
1 
8 #pragma once
9 
13 namespace ctrl {
14 
19 template <typename T>
21  public:
28  struct Model {
29  T K1;
30  T T1;
31  };
39  struct Gain {
40  T Kp;
41  T Ki;
42  T Kd;
43  };
48  struct Breakdown {
49  T ff;
50  T fb;
51  T fbp;
52  T fbi;
53  T fbd;
54  T u;
55  };
56 
57  public:
64  FeedbackController(const Model& M, const Gain& G) : M(M), G(G) { reset(); }
68  void reset() {
69  e_int = T();
70  bd = Breakdown();
71  }
82  const T& update(const T& r, const T& y, const T& dr, const T& dy,
83  const float Ts) {
84  /* feedforward signal */
85  bd.ff = (M.T1 * dr + r) / M.K1;
86  /* feedback signal */
87  bd.fbp = G.Kp * (r - y);
88  bd.fbi = G.Ki * e_int;
89  bd.fbd = G.Kd * (dr - dy);
90  bd.fb = bd.fbp + bd.fbi + bd.fbd;
91  /* calculate control input value */
92  bd.u = bd.ff + bd.fb;
93  /* integrate error */
94  e_int += (r - y) * Ts;
95  /* complete */
96  return bd.u;
97  }
101  const T& getErrorIntegral() const { return e_int; }
105  const Model& getModel() const { return M; }
109  void setModel(const Model& model) { M = model; }
113  const Gain& getGain() const { return G; }
117  void setGain(const Gain& gain) { G = gain; }
121  const Breakdown& getBreakdown() const { return bd; }
122 
123  protected:
125  Gain G;
127  T e_int;
128 };
129 
130 }; // namespace ctrl
1次フィードフォワード補償付きフィードバック制御器クラス
Definition: feedback_controller.h:20
const T & getErrorIntegral() const
エラー積分値を取得
Definition: feedback_controller.h:101
T e_int
追従誤差の積分値
Definition: feedback_controller.h:127
const T & update(const T &r, const T &y, const T &dr, const T &dy, const float Ts)
状態を更新して、次の制御入力を得る関数
Definition: feedback_controller.h:82
Breakdown bd
制御入力の計算内訳
Definition: feedback_controller.h:126
void setGain(const Gain &gain)
フィードバックゲインを設定する関数
Definition: feedback_controller.h:117
const Breakdown & getBreakdown() const
制御入力の内訳を取得する関数
Definition: feedback_controller.h:121
const Model & getModel() const
フィードフォワードモデルを取得する関数
Definition: feedback_controller.h:105
FeedbackController(const Model &M, const Gain &G)
コンストラクタ
Definition: feedback_controller.h:64
void setModel(const Model &model)
フィードフォワードモデルを設定する関数
Definition: feedback_controller.h:109
const Gain & getGain() const
フィードバックゲインを取得する関数
Definition: feedback_controller.h:113
Model M
フィードフォワードモデル
Definition: feedback_controller.h:124
Gain G
フィードバックゲイン
Definition: feedback_controller.h:125
void reset()
積分項をリセットする関数
Definition: feedback_controller.h:68
制御関係の名前空間
Definition: accel_curve.h:54
制御入力の成分内訳。
Definition: feedback_controller.h:48
T fbi
フィードバック成分のうち積分成分
Definition: feedback_controller.h:52
T ff
フィードフォワード成分
Definition: feedback_controller.h:49
T fb
フィードバック成分
Definition: feedback_controller.h:50
T u
成分の総和
Definition: feedback_controller.h:54
T fbd
フィードバック成分のうち微分成分
Definition: feedback_controller.h:53
T fbp
フィードバック成分のうち比例成分
Definition: feedback_controller.h:51
フィードバック成分に使用するPIDゲイン 使用しない成分は、0に設定すること。
Definition: feedback_controller.h:39
T Kp
フィードバック比例ゲイン
Definition: feedback_controller.h:40
T Ki
フィードバック積分ゲイン
Definition: feedback_controller.h:41
T Kd
フィードバック微分ゲイン
Definition: feedback_controller.h:42
フィードフォワード成分に使用する1次モデル
Definition: feedback_controller.h:28
T K1
1次モデルの定常ゲイン (使用しない場合は 1 とすること)
Definition: feedback_controller.h:29
T T1
1次モデルの時定数 (使用しない場合は 0 とすること)
Definition: feedback_controller.h:30