ETrobocon2017 - 片山研究所モデルベース開発推進事業部
LeftNormalCourse.cpp
[詳解]
1 
7  #include "LeftNormalCourse.h"
8 
10  isChangedEdge(false),
11  time_count(0){
13  status = old_status = LeftStatus::STRAIGHT;
14 }
15 
16 bool LeftNormalCourse::runNormalCourse(int32_t countL, int32_t countR, int8_t light_value){
17  float center = 30.0;
18  switch(status){
20  lineTracerWalker.speedControl.setPid ( 2.0, 4.8, 0.024, 150.0 );
21  lineTracerWalker.turnControl.setPid ( 2.0, 1.0, 0.048, center );
22  lineTracerWalker.runLine(countL, countR, light_value);
23  break;
24 
26  lineTracerWalker.speedControl.setPid ( 2.0, 2.0, 0.024, 120.0 );
27  lineTracerWalker.turnControl.setPid ( 2.0, 1.0, 0.048, center );
28  lineTracerWalker.runLine(countL, countR, light_value);
29  break;
30 
32  lineTracerWalker.speedControl.setPid ( 4.0, 0.8, 0.08, 70.0 );
33  lineTracerWalker.turnControl.setPid ( 2.0, 1.0, 0.048, center - 5.0 );
34  lineTracerWalker.runLine(countL, countR, light_value);
35  break;
36 
41  time_count++;
42  if(light_value > 30 && time_count > 125) isChangedEdge = true;
43  break;
44 
46  lineTracerWalker.speedControl.setPid ( 4.0, 0.8, 0.08, 10.0 );
47  lineTracerWalker.turnControl.setPid ( 2.0, 1.0, 0.048, center - 5.0 );
48  lineTracerWalker.runLine(countL, countR, light_value);
49  break;
50 
52  lineTracerWalker.speedControl.setPid ( 4.0, 0.8, 0.08, 80.0 );
53  lineTracerWalker.turnControl.setPid ( 4.0, 2.0, 0.1, 35.0 );
54  //lineTracerWalker.turnControl.setPid ( 4.0, 2.0, 0.096, 40.0 );
55  lineTracerWalker.runLine(countL, countR, light_value);
56  break;
57 
59  lineTracerWalker.speedControl.setPid ( 4.0, 0.8, 0.1, 100.0 );
60  lineTracerWalker.turnControl.setPid ( 2.0, 0.5, 0.048, center - 5.0 );
61  lineTracerWalker.runLine(countL, countR, light_value);
62  break;
63 
65  lineTracerWalker.speedControl.setPid ( 4.0, 0.8, 0.1, 100.0 );
66  lineTracerWalker.turnControl.setPid ( 4.0, 2.0, 0.096, center - 5.0 );
67  lineTracerWalker.runLine(countL, countR, light_value);
68  break;
69 
70  case LeftStatus::STOP: stop(); break;
71  default: stop();
72  }
73  if (status == LeftStatus::STOP) return false;
74  return true;
75 }
76 
77 bool LeftNormalCourse::statusCheck(int32_t countL, int32_t countR){
78  distanse_total = distance.getDistanceTotal(countL, countR);
79  old_status = status;
80  if(distanse_total < 2740)status = LeftStatus::STRAIGHT;
81  else if(distanse_total < 3240)status = LeftStatus::STRAIGHT_SLOW;
82  else if(distanse_total < 5200)status = LeftStatus::CURVE_RIGHT;
83  else if(distanse_total < 7500)status = LeftStatus::CURVE_LEFT_SHORT;
84  else if(distanse_total < 11000)status = LeftStatus::CURVE_LEFT;
85  else if(distanse_total < 12200)status = LeftStatus::CURVE_RIGHT;
86  else if(distanse_total < 14750)status = LeftStatus::NEUTRAL;
87  else status = LeftStatus::EDGE_CHANGE;
88  if(isChangedEdge){
89  status = LeftStatus::STOP;
90  }
91  if(old_status != status) return true;
92  return false;
93 }
94 
96  return (int)status;
97 }
void isLeftsideLine(bool b)
void setForward(int8_t setValue)
Distance distance
Definition: NormalCourse.h:13
bool runNormalCourse(int32_t countL, int32_t countR, int8_t light_value)
bool statusCheck(int32_t countL, int32_t countR)
void runLine(int32_t countL, int32_t countR, int8_t light_value)
void setPid(double _p_gain, double _i_gain, double _d_gain, double _target)
Definition: Pid.cpp:40
LコースのNormalCourseの処理を行うクラス
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:10
std::int32_t getDistanceTotal(std::int32_t countL, std::int32_t countR)
Definition: Distance.cpp:9
TurnControl turnControl
void setTurn(int8_t setValue)
int32_t distanse_total
Definition: NormalCourse.h:16
SpeedControl speedControl