etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
RightNormalCourse.cpp
[詳解]
1 
7 #include "RightNormalCourse.h"
8 
10 {
12  status = old_status = RightStatus::STRAIGHT_LONG;
13 }
14 
15 /*
16  *ここの値を変更して色々調整する(微分が一番重要、積分も入れないとズレていく!?)
17  * マイナス値は入れないほうがいい
18  *lineTracerWalker.speedControl.setPid ( 2.0, 4.8, 0.024, 速度mm/s );
19  */
20 bool RightNormalCourse::runNormalCourse(int16_t target_brightness, int16_t black, int16_t white,
21  int16_t gray)
22 {
23  switch(status) {
25  lineTracerWalker.speedControl.setPid(8.0, 1.0, 0.1, 180.0);
26  lineTracerWalker.turnControl.setPid(2.0, 1.0, 0.1, target_brightness);
27  // lineTracerWalker.turnControl.setPid(0.49999, 0.0, 0.0, target_brightness);
28  break;
29 
31  lineTracerWalker.speedControl.setPid(2.4, 1.0, 0.1, 180.0);
32  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.1, target_brightness);
33  break;
34 
36  lineTracerWalker.speedControl.setPid(2.0, 1.0, 0.12, 150.0);
37  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.1, target_brightness);
38  break;
39 
41  lineTracerWalker.speedControl.setPid(2.0, 1.0, 0.12, 150.0);
42  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.1, target_brightness);
43  break;
44 
46  lineTracerWalker.speedControl.setPid(2.5, 0.01, 0.12, 175.0);
47  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.15, target_brightness);
48  break;
49 
50  case RightStatus::SLOW:
51  lineTracerWalker.speedControl.setPid(2.5, 0.01, 0.12, 175.0);
52  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.1, target_brightness);
53  break;
54 
55  case RightStatus::START:
56  lineTracerWalker.speedControl.setPid(1.5, 0.01, 0.12, 170.0);
57  lineTracerWalker.turnControl.setPid(2.0, 0.1, 0.1, target_brightness);
58  break;
59 
61  lineTracerWalker.speedControl.setPid(10.0, 0.0001, 0.12, 140.0);
62  lineTracerWalker.turnControl.setPid(2.0, 1.7, 0.6, target_brightness);
63  break;
64 
66  // lineTracerWalker.speedControl.setPid(1.5, 0.01, 0.12, 160.0);
67  lineTracerWalker.speedControl.setPid(2.0, 1.0, 0.1, 165.0);
68  lineTracerWalker.speedControl.setPid(2.0, 0.1, 0.1, target_brightness);
69 
70  case RightStatus::STOP:
71  stop();
72  break;
73 
74  default:
75  stop();
76  }
77  if(status == RightStatus::STOP) return false;
78  return true;
79 }
80 
81 bool RightNormalCourse::statusCheck(int32_t countL, int32_t countR)
82 {
83  std::int32_t distance_total = motor_angle.absoluteAngleMean(countL, countR);
84  old_status = status;
85 
86  if(distance_total < CALIBRATE_DISTANCE_R)
87  status = RightStatus::START;
88  else if(distance_total < FIRST_STRAIGHT_DISTANCE_R)
90  else if(distance_total < FIRST_CURVE_DISTANCE_R)
92  else if(distance_total < SECOND_STRAIGHT_DISTANCE_R)
94  else if(distance_total < SECOND_CURVE_DISTANCE_IN_R)
96  else if(distance_total < SECOND_CURVE_DISTANCE_OUT_R)
98  else if(distance_total < THIRD_STRAIGHT_DISTANCE_R)
99  status = RightStatus::SLOW;
100  else if(distance_total < THIRD_CURVE_DISTANCE_R)
102  else if(distance_total < FOURTH_STRAIGHT_DISTANCE_R)
104  else if(distance_total < FOR_DECREASE_JACKKNIFE_R)
105  status = RightStatus::SLOW_DOWN;
106  // else if(distanse_total < 11607)
107  // status = RightStatus::SLOW;
108  else if(distance_total < AFTER_GOAL_CURVE_R)
110  else if(distance_total < GRAY_FIND_AREA_R)
111  status = RightStatus::START;
112  else
113  status = RightStatus::STOP;
114  if(old_status != status) return true;
115  return false;
116 }
117 
119 {
120  return (int)status;
121 }
RコースのNormalCourseの処理を行うクラス
void isLeftsideLine(bool b)
bool statusCheck(int32_t countL, int32_t countR)
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39
bool runNormalCourse(int16_t target_brightness, int16_t black, int16_t white, int16_t gray)
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:13
MotorAngle motor_angle
Definition: NormalCourse.h:16
TurnControl turnControl
SpeedControl speedControl