etrobocon2019 feat.KatLab  ece30a9a007fff7d3ad48592c0d09a74643377bb
SpeedControl.cpp
[詳解]
1 
7 #include "SpeedControl.h"
8 
9 SpeedControl::SpeedControl(Controller& controller_, int targetSpeed, double Kp, double Ki,
10  double Kd)
11  : controller(controller_), dist(), pid(targetSpeed, Kp, Ki, Kd)
12 {
13  // 左右のモータの角位置を取得
14  int leftAngle = controller.getLeftMotorCount();
15  int rightAngle = controller.getRightMotorCount();
16 
17  // 走行距離の取得[mm]
18  prevDistance = dist.getDistance(leftAngle, rightAngle);
19 }
20 
21 double SpeedControl::calculateSpeed(int targetSpeed, double Kp, double Ki, double Kd)
22 {
23  // pidの値を更新(パラメータに変更がなくても更新する)
24  pid.setParameter(targetSpeed, Kp, Ki, Kd);
25 
26  // 4ms後の左右のモータの角位置を取得
27  int leftAngle = controller.getLeftMotorCount();
28  int rightAngle = controller.getRightMotorCount();
29 
30  // 4ms後の走行距離の取得[mm]
31  double nextDistance = dist.getDistance(leftAngle, rightAngle);
32 
33  //現在の速度を求める
34  double currentSpeed = nextDistance - prevDistance;
35 
36  // prevDistanceの更新
37  prevDistance = dist.getDistance(leftAngle, rightAngle);
38 
39  // pid値を求める
40  double pidValue = pid.control(currentSpeed);
41 
42  // PWM値 = pid値
43  double pwmValue = pidValue;
44 
45  // PWM値を返す
46  return pwmValue;
47 }
int getRightMotorCount()
Definition: Controller.cpp:188
double calculateSpeed(int targetSpeed, double Kp, double Ki, double Kd)
SpeedControl(Controller &controller_, int targetSpeed, double Kp, double Ki, double Kd)
Definition: SpeedControl.cpp:9
const double setParameter(double target_, double Kp_, double Ki_=0.0, double Kd_=0.0)
目標値とPIDゲインの設定をする関数
Definition: Pid.cpp:58
int getLeftMotorCount()
Definition: Controller.cpp:183
double control(double value, double delta=0.004)
Definition: Pid.cpp:28
double getDistance(int leftAngle, int rightAngle)
左右の平均走行距離を計算して戻り値として返す
Definition: Distance.cpp:15
前進値制御クラス