etrobocon2018 feat.KatLab  770af34cce41ae9c30c41303275e1add2daae0c3 (with uncommitted changes)
 全て クラス 名前空間 ファイル 関数 変数 列挙型 列挙値 フレンド マクロ定義 ページ
公開メンバ関数 | 全メンバ一覧
RightCourse クラス

#include <RightCourse.h>

RightCourse 連携図
Collaboration graph

公開メンバ関数

 RightCourse ()=default
 
 RightCourse (Controller &controller_, std::int32_t ipc)
 
void runNormalCourse (std::int16_t brightness)
 
void run (std::int16_t brightness, std::int16_t black, std::int16_t white, std::int16_t gray)
 
void runParking (std::int16_t brightness, LineTracerWalker lineTracer, std::int16_t black, std::int16_t white)
 
void runPuzzle (std::int16_t target_brightness)
 
void moveBlockAreaTo8 (std::int16_t target_brightness)
 
void throughArea ()
 
void runNormalCourse (std::int16_t brightness, std::int16_t black, std::int16_t white, std::int16_t gray)
 
void solveBlockPuzzle (std::int16_t brightness)
 

詳解

Rコースを走らせるときに呼び出されるクラス

RightCourse.h21 行目に定義があります。

構築子と解体子

RightCourse::RightCourse ( )
default

コンストラクタ。センサ類の初期化を行う

RightCourse::RightCourse ( Controller controller_,
std::int32_t  ipc 
)
inlineexplicit

RightCourse.h25 行目に定義があります。

26  : walker(controller_), controller(controller_), initialPositionCode(ipc)
27  {
28  }

関数詳解

void RightCourse::moveBlockAreaTo8 ( std::int16_t  target_brightness)

RightCourse.cpp39 行目に定義があります。

40 {
41  Distinguisher d{ controller };
42  MotorAngle motor_angle;
43  bool isAlreadyChangedGear = false;
44 
45  lineTracer.speedControl.setPid(5.0, 1.0, 0.1, 90.0);
46  lineTracer.turnControl.setPid(2.0, 1.0, 0.14, target_brightness);
47  controller.tslpTsk(500);
48 
49  walker.reset();
50  while(1) {
51  Color result = d.getColor();
52  auto luminance = controller.getBrightness();
53  lineTracer.runLine(walker.get_count_L(), walker.get_count_R(), luminance);
54  walker.run(lineTracer.getForward(), lineTracer.getTurn());
55  controller.printDisplay(4, "Brightness: %d, Target: %d", luminance, result);
56  if(result == Color::RED) break;
57  if(!isAlreadyChangedGear
58  && motor_angle.absoluteAngleMean(walker.get_count_L(), walker.get_count_R()) > 1750) {
59  lineTracer.speedControl.setPid(5.0, 1.0, 0.1, 25.0);
60  lineTracer.turnControl.setPid(1.0, 1.0, 0.14, target_brightness);
61  controller.speakerPlayTone(controller.noteFs6, 100);
62  isAlreadyChangedGear = true;
63  }
64  controller.tslpTsk(4);
65  }
66 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
uint16_t noteFs6
Definition: Controller.h:40
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
Color
Definition: Distinguisher.h:16
void runLine(int32_t countL, int32_t countR, int16_t light_value)
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39
int16_t getBrightness()
Definition: Controller.cpp:59
void reset()
Definition: Walker.cpp:15
std::int32_t get_count_R()
Definition: Walker.cpp:54
走行体のカラーセンサを用いて、RGB情報より色を推定するクラス。
Definition: Distinguisher.h:55
TurnControl turnControl
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
SpeedControl speedControl
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

void RightCourse::run ( std::int16_t  brightness,
std::int16_t  black,
std::int16_t  white,
std::int16_t  gray 
)

Rコースの走行範囲の切り替えを行う

RightCourse.cpp15 行目に定義があります。

17 {
18  LineTracerWalker lineTracer;
19  runNormalCourse(brightness, black, white, gray);
20  controller.tslpTsk(400);
21  solveBlockPuzzle(brightness);
22  runParking(brightness, lineTracer, black, white);
23 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
void runParking(std::int16_t brightness, LineTracerWalker lineTracer, std::int16_t black, std::int16_t white)
Definition: RightCourse.cpp:32
void runNormalCourse(std::int16_t brightness)
void solveBlockPuzzle(std::int16_t brightness)
Definition: RightCourse.cpp:25

呼び出し関係図:

void RightCourse::runNormalCourse ( std::int16_t  brightness)

各エリアの処理を呼び出す NormalCourseエリアの処理

被呼び出し関係図:

void RightCourse::runNormalCourse ( std::int16_t  brightness,
std::int16_t  black,
std::int16_t  white,
std::int16_t  gray 
)

RightCourse.cpp102 行目に定義があります。

104 {
105  RightNormalCourse normalCourse;
106  bool isNormalCourse;
107 
108  /*灰色を検知用*/
109  /*
110  int8_t counter = 0;
111  std::int16_t target_brightness_gray = (white + gray) / 2;
112  */
113 
114  // NormalCourseを抜けるまでループする
115  while(1) {
116  auto luminance = controller.getBrightness();
117 
118  /*灰色を検知用*/
119  /*
120  auto distance_total_r = (walker.get_count_L() + walker.get_count_R()) / 2;
121  */
122  controller.printDisplay(4, "Brightness: %d, Target: %d", luminance, brightness);
123  if(normalCourse.statusCheck(walker.get_count_L(), walker.get_count_R()))
124  controller.speakerPlayTone(controller.noteFs6, 100);
125  isNormalCourse = normalCourse.runNormalCourse(brightness, black, white, gray);
126  normalCourse.lineTracerWalker.runLine(walker.get_count_L(), walker.get_count_R(), luminance);
127 
128  normalCourse.runOrStop(walker);
129  if(!isNormalCourse) {
130  walker.run(0, 0);
131  break;
132  }
133  if(controller.buttonIsPressedBack()) {
134  walker.run(0, 0);
135  break;
136  }
137  /*灰色を検知したら止まる*/
138  /*
139  const std::std::int16_t AFTER_GOAL_CURVE_R = 11900;
140  if(distance_total_r > AFTER_GOAL_CURVE_R && target_brightness_gray + 20 > luminance &&
141  luminance > target_brightness_gray - 3){ if(counter > 10){ controller.printDisplay(4, "Find Gray
142  Line¥n Brightness: %d, Target: %d", luminance, brightness);
143  controller.speakerPlayTone(controller.noteFs6, 100);
144  }
145  controller.speakerPlayTone(controller.noteFs6, 20);
146  counter++;
147  }else{
148  counter = 0;
149  }
150  */
151  controller.tslpTsk(4); // 4msec周期起動
152  }
153 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
bool statusCheck(int32_t countL, int32_t countR)
uint16_t noteFs6
Definition: Controller.h:40
void runLine(int32_t countL, int32_t countR, int16_t light_value)
bool buttonIsPressedBack()
Definition: Controller.cpp:24
void runOrStop(Walker &walker)
Definition: NormalCourse.cpp:8
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
bool runNormalCourse(int16_t target_brightness, int16_t black, int16_t white, int16_t gray)
int16_t getBrightness()
Definition: Controller.cpp:59
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:13
std::int32_t get_count_R()
Definition: Walker.cpp:54
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

void RightCourse::runParking ( std::int16_t  brightness,
LineTracerWalker  lineTracer,
std::int16_t  black,
std::int16_t  white 
)

RightCourse.cpp32 行目に定義があります。

34 {
35  Parking parking{ controller };
36  parking.runParpendicular(brightness, lineTracer, black, white);
37 }
駐車クラス
Definition: Parking.h:18

被呼び出し関係図:

void RightCourse::runPuzzle ( std::int16_t  target_brightness)

RightCourse.cpp68 行目に定義があります。

69 {
70  Controller controller;
71  Distinguisher d{ controller };
72  LineTracerWalker lineTracerWalker;
73 
74  lineTracerWalker.speedControl.setPid(1.0, 0.8, 0.8, 60.0);
75  lineTracerWalker.turnControl.setPid(1.0, 1.7, 0.6, target_brightness);
76  walker.reset();
77  Color result = d.getColor();
78  controller.printDisplay(6, "in the loop, Color: %d", static_cast<int>(result));
79  controller.speakerPlayTone(controller.noteFs4, 100);
80  while(1) {
81  Color result = d.getColor();
82  auto luminance = controller.getBrightness();
83  lineTracerWalker.runLine(walker.get_count_L(), walker.get_count_R(), luminance);
84  walker.run(lineTracerWalker.getForward(), lineTracerWalker.getTurn());
85  controller.printDisplay(4, "Brightness: %d, Target: %d", luminance, result);
86  controller.printDisplay(6, "out the loop, Color: %d", static_cast<int>(result));
87  }
88  controller.tslpTsk(4);
89 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
Color
Definition: Distinguisher.h:16
void runLine(int32_t countL, int32_t countR, int16_t light_value)
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
int16_t getBrightness()
Definition: Controller.cpp:59
uint16_t noteFs4
Definition: Controller.h:41
void reset()
Definition: Walker.cpp:15
std::int32_t get_count_R()
Definition: Walker.cpp:54
走行体のカラーセンサを用いて、RGB情報より色を推定するクラス。
Definition: Distinguisher.h:55
TurnControl turnControl
void printDisplay(int8_t row, const char *format,...)
Definition: Controller.cpp:79
SpeedControl speedControl
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

void RightCourse::solveBlockPuzzle ( std::int16_t  brightness)

RightCourse.cpp25 行目に定義があります。

26 {
27  walker.reset();
28  BlockSolver blockSolver{ controller, walker, initialPositionCode, brightness };
29  blockSolver.run();
30 }
void reset()
Definition: Walker.cpp:15

呼び出し関係図:

被呼び出し関係図:

void RightCourse::throughArea ( )

RightCourse.cpp91 行目に定義があります。

92 {
93  //ブロックエリアを通り過ぎる関数
94  BasicWalker basic{ controller };
95  Controller controller;
96  controller.speakerPlayTone(controller.noteFs4, 100);
97  basic.reset();
98  basic.setPidWithoutTarget(5.0, 1.0, 0.1);
99  basic.goStraight(15, 140);
100 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
uint16_t noteFs4
Definition: Controller.h:41

呼び出し関係図:


このクラス詳解は次のファイルから抽出されました: