etrobocon2019 feat.KatLab  ece30a9a007fff7d3ad48592c0d09a74643377bb
LineTracer.cpp
[詳解]
1 
7 #include "LineTracer.h"
8 #include "Logger.h"
9 
10 LineTracer::LineTracer(Controller& controller_, int targetBrightness_, bool isLeftCourse_)
11  : controller(controller_),
12  targetBrightness(targetBrightness_),
13  isLeftCourse(isLeftCourse_),
14  distance(),
15  speedControl(controller, 0.0, 0.0, 0.0, 0.0),
16  turnControl(targetBrightness_, 0.0, 0.0, 0.0)
17 {
18 // Logger logger{ "dataw.csv" };
19 // logger << "Distance"<< "speed";
20 }
21 
23 {
24  // 関数呼び出し時の走行距離を取得・設定
25  int initialDistance
26  = distance.getDistance(controller.getLeftMotorCount(), controller.getRightMotorCount());
27 
28  int currentDistance = initialDistance; // 現在の走行距離
29  int turnValue = 0; // 旋回値
30  int speedValue = 0; // 直進値
31  int leftPWM = 0; // 左モータの出力
32  int rightPWM = 0; // 右モータの出力
33  //Logger logger{ "a" };
34 
35  // 目標距離を走り終えるまでループ
36  while(currentDistance - initialDistance < settings.targetDistance) {
37  // 前進値の計算
38  speedValue = speedControl.calculateSpeed(settings.targetSpeed, settings.speedPid.Kp,
39  settings.speedPid.Ki, settings.speedPid.Kd);
40 
41  // 旋回値の計算
42  turnValue
43  = turnControl.calculateTurn(speedValue, controller.getBrightness(), targetBrightness,
44  settings.turnPid.Kp, settings.turnPid.Ki, settings.turnPid.Kd);
45 
46  // モータ出力の計算
47  if(isLeftCourse) {
48  // Leftコースの場合
49  leftPWM = speedValue - turnValue;
50  rightPWM = speedValue + turnValue;
51  } else {
52  // Rightコースの場合
53  leftPWM = speedValue + turnValue;
54  rightPWM = speedValue - turnValue;
55  }
56  // PWM値の設定
57  controller.setLeftMotorPwm(leftPWM);
58  controller.setRightMotorPwm(rightPWM);
59 
60  // 現在の走行距離の取得
61  currentDistance
62  = distance.getDistance(controller.getLeftMotorCount(), controller.getRightMotorCount());
63  // Logger logger{"dataw.csv","a"};
64  // logger << currentDistance << speedValue;
65  controller.tslpTsk(4);
66  }
67 }
68 
69 void LineTracer::setTargetBrightness(int targetBrightness_)
70 {
71  targetBrightness = targetBrightness_;
72 }
int getRightMotorCount()
Definition: Controller.cpp:188
double calculateSpeed(int targetSpeed, double Kp, double Ki, double Kd)
double calculateTurn(int forward, int currentBrightness, int targetBrightness, double Kp, double Ki, double Kd)
旋回値を計算する関数
Definition: TurnControl.cpp:30
void run(NormalCourseProperty &settings)
走行距離や目標スピード、スピード制御PID、回転制御PIDを NormalCourseProperty 構造体を使用し渡す。 ...
Definition: LineTracer.cpp:22
double Kp
Definition: Pid.h:11
double Kd
Definition: Pid.h:13
double Ki
Definition: Pid.h:12
 ユーザーが与えたデータをcsv形式で記録するクラス 記録するためには、「write」または「<<演算子」機能...
void setLeftMotorPwm(const int pwm)
Definition: Controller.cpp:203
int getLeftMotorCount()
Definition: Controller.cpp:183
int getBrightness()
Definition: Controller.cpp:71
void setRightMotorPwm(const int pwm)
Definition: Controller.cpp:208
static void tslpTsk(int time)
Definition: Controller.cpp:163
double getDistance(int leftAngle, int rightAngle)
左右の平均走行距離を計算して戻り値として返す
Definition: Distance.cpp:15
LineTracer(Controller &controller_, int targetBrightness_, bool isLeftCourse_)
Definition: LineTracer.cpp:10
void setTargetBrightness(int targetBrightness_)
カラーセンサーの目標値を再設定する
Definition: LineTracer.cpp:69