etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
Pid.cpp
[詳解]
1 #include "Pid.h"
2 
3 // Constructor
4 Pid::Pid(double p_gain_, double i_gain_, double d_gain_, double target_)
5  : Pid(p_gain_, i_gain_, d_gain_, 0.0, 0.0, target_, 0.0)
6 {
7 }
8 
9 Pid::Pid(double p_gain_, double i_gain_, double d_gain_, double diff_, double integral_,
10  double target_, double output_)
11  : param(p_gain_, i_gain_, d_gain_, 0.004),
12  old_diff(diff_),
13  integral(integral_),
14  target(target_),
15  output(output_)
16 {
17 }
18 
19 void Pid::calculate(double current_value)
20 {
21  double p, i, d;
22  double diff = current_value - target;
23 
24  integral += (old_diff + diff) / 2 * param.del;
25  p = param.p_gain * diff;
26  i = param.i_gain * integral;
27  d = param.d_gain * (diff - old_diff) / param.del;
28  old_diff = diff;
29  output = p + i + d;
30 }
31 
33 {
34  return output;
35 }
36 
37 /*
38  * PID値を入力する
39  */
40 void Pid::setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
41 {
42  param.set(p_gain_, i_gain_, d_gain_);
43  target = target_;
44 }
45 
46 double Pid::limitOutput(double pid_value)
47 {
48  if(pid_value > 100.0) return 100.0;
49  if(pid_value < -100.0) return -100.0;
50  return pid_value;
51 }
double get_output()
Definition: Pid.cpp:32
void calculate(double light_value)
Definition: Pid.cpp:19
Pid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:4
double p_gain
Definition: Pid.h:18
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
double del
Definition: Pid.h:21
double i_gain
Definition: Pid.h:19
PID制御の計算を行うクラス
double limitOutput(double pid_value)
Definition: Pid.cpp:46
double d_gain
Definition: Pid.h:20
PID制御の計算を行うクラス
Definition: Pid.h:38
void set(double p_gain_, double i_gain_, double d_gain_)
Definition: Pid.h:27