ETrobocon2017 - 片山研究所モデルベース開発推進事業部
LeftCourse.cpp
[詳解]
1 
6 #include "LeftCourse.h"
7 
9  colorSensor( PORT_3 ),
10  sl(walker.get_count_L(), walker.get_count_R(), true),
11  navi(walker.get_count_L(), walker.get_count_R()) {
12 }
13 
14 void LeftCourse::setFirstCode( int32_t code ) {
15  firstCode = code;
16 }
17 
22  // Normal Area
23  /* ショートカットする場合は外す
24  //最初のまっすぐ
25  runTyokusen(0.0, 0.0, -20.0, 1.0, true);
26  //GATE2クリア
27  runTyokusen(-20.0, 1.0, -80.0, 100.0, true);
28  //GATE1クリア
29  runTyokusen(-80.0, 100.0, -240.0, 101.0, true);
30  //GATE1まっすぐ
31  runTyokusen(-240.0, 101.0, -180.0, 100.0, false);
32  //緑超え
33  runTyokusen(-180.0, 100.0, -160.0, 180.0, false);
34  //最後の直線
35  runTyokusen(-141.0, 130.0, -160.0, 600.0, false);
36  while(1){
37  walker.run(10, 0);
38  if(colorSensor.getBrightness() < 5)break;
39  }
40  */
41 
43  //msg_f("Finish NormalCourse", 3);
44 
45  msg_f("Finished NormalArea", 3);
46 
47  // Puzzle
48  runBlockRange();
49  msg_f("Finished BlockRange", 3);
50 
51  // Park
53  msg_f("Finished ParallelParking", 3);
54 }
55 
57  LeftNormalCourse normalCourse;
58  bool isNormalCourse;
59  // NormalCourseを抜けるまでループする
60  while ( 1 ) {
61  sl.update(walker.get_count_L(), walker.get_count_R());
62  if(normalCourse.statusCheck(walker.get_count_L(), walker.get_count_R())) ev3_speaker_play_tone (NOTE_FS6, 100);
63  isNormalCourse = normalCourse.runNormalCourse(walker.get_count_L(), walker.get_count_R(), colorSensor.getBrightness());
64 
65  if(normalCourse.lineTracerWalker.getForward() < 0){
66  walker.run(0, 0);
67  }else{
68  walker.run( normalCourse.lineTracerWalker.getForward(), normalCourse.lineTracerWalker.getTurn());
69  }
70  if(! isNormalCourse){
71  walker.run(0, 0);
72  break;
73  }
74  if(ev3_button_is_pressed(BACK_BUTTON)){
75  walker.run(0, 0);
76  break;
77  }
78 
79  tslp_tsk(4); // 4msec周期起動
80  }
81 }
82 
83 void LeftCourse::runTyokusen(float _start_x, float _start_y, float _goal_x, float _goal_y, bool _isBack){
84  bool isEndAngle = false;
85  int minus = 1;
86  if(_isBack == true)minus = -1;
87 
88  navi.turnControl.wrapper_of_constructor(4.0, 0.5, 3.0, 0, 0, 0.0, 0);
89  navi.speedControl.wrapper_of_constructor(4.0, 2.0, 0.024, 0, 0, 210.0 * minus, 0);
90 
91  navi.setLine(_start_x, _start_y, _goal_x, _goal_y);
92  navi.getDiffLine(navi.sl.getPointX(), navi.sl.getPointY());
93  navi.calculate_line_angle(_isBack);
94  navi.sl.init_normal_vector(navi.start_x, navi.start_y, navi.goal_x, navi.goal_y, navi.current_x, navi.current_y);
95  // NormalCourseを抜けるまでループする
96  while (!navi.sl.is_over_normal_vector(navi.current_x, navi.current_y)) {
97  //navi.calculateValue(walker.get_count_L(), walker.get_count_R());
98  if(! isEndAngle){
99  isEndAngle = navi.calculateAngle(walker.get_count_L(), walker.get_count_R(), _isBack);
100  }else{
101  navi.calculateValue(walker.get_count_L(), walker.get_count_R(), _isBack);
102  }
103  walker.run(navi.getForward(), navi.getTurn());
104  navi.sl.update(walker.get_count_L(), walker.get_count_R());
105  if(ev3_button_is_pressed(BACK_BUTTON)){
106  walker.run(0, 0);
107  break;
108  }
109 
110  tslp_tsk(4); // 4msec周期起動
111  }
112  walker.run(0, 0);
113  tslp_tsk(100); // 4msec周期起動
114  ev3_speaker_play_tone (NOTE_FS6, 100);
115 }
116 
118  PuzzleField puzzleField ;
119 
120  puzzleField.testGame () ;
121 }
122 
124  Parking parking;
125  parking.runParallel();
126 }
駐車クラス
Definition: Parking.h:15
int32_t get_count_L()
Definition: Walker.cpp:48
void setFirstCode(int32_t)
Definition: LeftCourse.cpp:14
float current_y
Definition: Navigation.h:61
float getDiffLine(float, float)
Definition: Navigation.cpp:24
int32_t get_count_R()
Definition: Walker.cpp:52
void wrapper_of_constructor(double _p_gain, double _i_gain, double _d_gain, double _diff, double _integral, double _target, double _output)
Definition: Pid.cpp:9
bool calculateValue(std::int32_t, std::int32_t, bool)
Definition: Navigation.cpp:46
void init_normal_vector(float _start_x, float _start_y, float _goal_x, float _goal_y, float _current_x, float _current_y)
void runTyokusen(float, float, float, float, bool)
Definition: LeftCourse.cpp:83
bool runNormalCourse(int32_t countL, int32_t countR, int8_t light_value)
bool calculateAngle(std::int32_t, std::int32_t, bool)
Definition: Navigation.cpp:59
bool statusCheck(int32_t countL, int32_t countR)
float goal_y
Definition: Navigation.h:57
void runBlockRange()
Definition: LeftCourse.cpp:117
Definition: Port.h:22
SelfLocalization sl
Definition: Navigation.h:44
void testGame(void)
void update(std::int32_t left_motor_sl, std::int32_t right_motor_sl)
void calculate_line_angle(bool)
Definition: Navigation.cpp:38
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:10
void msg_f(const char *str, int32_t line)
Definition: util.cpp:17
void run()
Definition: LeftCourse.cpp:21
float start_y
Definition: Navigation.h:53
Lコースを走らせるときに呼び出されるクラス
int8_t getBrightness(void) const
Definition: ColorSensor.cpp:34
float current_x
Definition: Navigation.h:59
bool setLine(float, float, float, float)
Definition: Navigation.cpp:12
TurnControl turnControl
float goal_x
Definition: Navigation.h:55
bool is_over_normal_vector(float _current_x, float _current_y)
float start_x
Definition: Navigation.h:51
void runParallelParking()
Definition: LeftCourse.cpp:123
void run(int8_t pwm, int8_t turn)
Definition: Walker.cpp:31
void runNormalCourse()
Definition: LeftCourse.cpp:56
SpeedControl speedControl
void runParallel()
Definition: Parking.cpp:9