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

#include <Navigator.h>

Navigator 連携図
Collaboration graph

公開メンバ関数

 Navigator (const Controller &controller_, const Walker &walker_)
 
 Navigator (const Controller &controller_)
 
 Navigator ()
 
void reset ()
 座標とエンコーダの値を初期化する [詳解]
 
void spin (float angle, bool clockwise=false, std::int8_t pwm=10)
 指定した角度まで走行体を回転させる(基本左エッジ) [詳解]
 
void move (float distance, std::int8_t pwm=20)
 指定した距離まで走行体を移動させる [詳解]
 
void back (float distance, std::int8_t pwm=10)
 指定した距離まで走行体を後退させる [詳解]
 
void moveWhileDetecting (float distance, std::int16_t target, std::int8_t pwm=10)
 指定した距離まで黒色の点を検出しながら走行体を移動させる [詳解]
 
void moveOnLine (float distance, std::int16_t target, std::int8_t pwm=20, bool is_leftside_line=true)
 指定した距離だけライントレースする [詳解]
 
void moveToColor (float distance, std::int16_t target_brightness, Color target_color, std::int8_t speed=20, bool is_leftside_line=true)
 指定した距離分ライントレースして指定した色があると停止する [詳解]
 
std::int16_t getBrightness ()
 光センサの値を取得する [詳解]
 
void moveToColorCheck (float distance, Color target_color, std::int8_t pwm=20)
 指定した距離特定の色を探しながら進む(ライントレースしない) [詳解]
 
std::int8_t getNearbyBrightness (float distance=20.0f)
 現在位置の周辺における光センサ値を取得する [詳解]
 
bool binarization (std::int16_t target)
 2値化処理を実行する [詳解]
 

詳解

Navigator.h16 行目に定義があります。

構築子と解体子

Navigator::Navigator ( const Controller controller_,
const Walker walker_ 
)
inline

Navigator.h26 行目に定義があります。

27  : controller(controller_),
28  walker(walker_),
29  odometry(),
30  line_tracer(),
31  distinguisher(controller),
32  color(Color::NONE)
33  {
34  }
Navigator::Navigator ( const Controller controller_)
inline

Navigator.h35 行目に定義があります。

36  : controller(controller_),
37  walker(),
38  odometry(),
39  line_tracer(),
40  distinguisher(controller),
41  color(Color::NONE)
42  {
43  }
Navigator::Navigator ( )
inline

Navigator.h44 行目に定義があります。

45  : controller(),
46  walker(),
47  odometry(),
48  line_tracer(),
49  distinguisher(controller),
50  color(Color::NONE)
51  {
52  }

関数詳解

void Navigator::back ( float  distance,
std::int8_t  pwm = 10 
)

指定した距離まで走行体を後退させる

[Navigator::back]

引数
distance距離 [mm]
pwmモータパワー

Navigator.cpp72 行目に定義があります。

73 {
74  // 測定距離の初期化
75  reset();
76  float radius = 0.0f;
77 
78  while(radius < distance) {
79  walker.run(-pwm, 0);
80  odometry.update(walker.get_count_L(), walker.get_count_R());
81  radius = -odometry.getCoordinate().radius;
82  controller.tslpTsk(4);
83  }
84 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
const Coordinate & getCoordinate()
走行体の位置情報を返す
float radius
Definition: WheelOdometry.h:17
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
std::int32_t get_count_R()
Definition: Walker.cpp:54
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:

bool Navigator::binarization ( std::int16_t  black)

2値化処理を実行する

[Navigator::binarization]

引数
black黒色の輝度値
戻り値
黒のときfalse, 白のときtrue

Navigator.cpp149 行目に定義があります。

150 {
151  auto brightness = getBrightness();
152  return (brightness < black) ? false : true;
153 }
std::int16_t getBrightness()
光センサの値を取得する
Definition: Navigator.cpp:115

呼び出し関係図:

被呼び出し関係図:

std::int16_t Navigator::getBrightness ( )

光センサの値を取得する

光センサの値を所得する

[Navigator::getBrightness]

戻り値
光センサの値

Navigator.cpp115 行目に定義があります。

116 {
117  return controller.getBrightness();
118 }
int16_t getBrightness()
Definition: Controller.cpp:59

呼び出し関係図:

被呼び出し関係図:

std::int8_t Navigator::getNearbyBrightness ( float  distance = 20.0f)

現在位置の周辺における光センサ値を取得する

[Navigator::getNearbyBrightness]

引数
distance距離 [mm]
戻り値
光センサの値

Navigator.cpp126 行目に定義があります。

127 {
128  auto center = getBrightness();
129 
130  // distanceだけ前に移動した点のセンサ値を取る
131  move(distance, 10);
132  auto front_value = getBrightness();
133  back(distance, 10);
134 
135  // distanceだけ後ろに移動した点のセンサ値を取る
136  back(distance, 10);
137  auto back_value = getBrightness();
138  move(distance, 10);
139 
140  return std::min({ front_value, center, back_value });
141 }
void move(float distance, std::int8_t pwm=20)
指定した距離まで走行体を移動させる
Definition: Navigator.cpp:48
std::int16_t getBrightness()
光センサの値を取得する
Definition: Navigator.cpp:115
void back(float distance, std::int8_t pwm=10)
指定した距離まで走行体を後退させる
Definition: Navigator.cpp:72

呼び出し関係図:

void Navigator::move ( float  distance,
std::int8_t  pwm = 20 
)

指定した距離まで走行体を移動させる

[Navigator::move]

引数
distance距離 [mm]
pwmモータパワー

Navigator.cpp48 行目に定義があります。

49 {
50  // 測定距離の初期化
51  reset();
52  float radius = 0.0f;
53 
54  while(radius < distance) {
55  walker.run(pwm, 0);
56  odometry.update(walker.get_count_L(), walker.get_count_R());
57  radius = odometry.getCoordinate().radius;
58  controller.tslpTsk(4);
59  }
60 
61  // 移動停止
62  walker.run(0, 0);
63  reset();
64 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
const Coordinate & getCoordinate()
走行体の位置情報を返す
float radius
Definition: WheelOdometry.h:17
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
std::int32_t get_count_R()
Definition: Walker.cpp:54
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:

void Navigator::moveOnLine ( float  distance,
std::int16_t  target,
std::int8_t  pwm = 20,
bool  is_leftside_line = true 
)

指定した距離だけライントレースする

[Navigator::moveOnLine]

引数
distance距離 [mm]
target黒色と白色の境界の輝度値
pwmモータパワー
isLeftsideLinetrue = 左エッジ,false = 右エッジ

Navigator.cpp163 行目に定義があります。

165 {
166  // 測定距離の初期化
167  reset();
168  float radius = 0.0f;
169 
170  // ライントレースで用いるPID値のセット
171  line_tracer.speedControl.setPid(2.0, 0.8, 0.1, pwm);
172  line_tracer.turnControl.setPid(1.1, 0.1, 0.2, target);
173  // 左エッジか右エッジか設定
174  line_tracer.isLeftsideLine(is_leftside_line);
175 
176  while(radius < distance) {
177  odometry.update(walker.get_count_L(), walker.get_count_R());
178  radius = odometry.getCoordinate().radius;
179  line_tracer.runLine(walker.get_count_L(), walker.get_count_R(), getBrightness());
180  if(line_tracer.getForward() < 0)
181  walker.run(0, 0);
182  else
183  walker.run(line_tracer.getForward(), line_tracer.getTurn());
184  controller.tslpTsk(4);
185  }
186 
187  walker.run(0, 0);
188  reset();
189 }
void isLeftsideLine(bool b)
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
const Coordinate & getCoordinate()
走行体の位置情報を返す
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
float radius
Definition: WheelOdometry.h:17
void runLine(int32_t countL, int32_t countR, int16_t light_value)
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
std::int16_t getBrightness()
光センサの値を取得する
Definition: Navigator.cpp:115
std::int32_t get_count_R()
Definition: Walker.cpp:54
TurnControl turnControl
SpeedControl speedControl
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:

void Navigator::moveToColor ( float  distance,
std::int16_t  target_brightness,
Color  target_color,
std::int8_t  speed = 20,
bool  is_leftside_line = true 
)

指定した距離分ライントレースして指定した色があると停止する

Navigator.cpp211 行目に定義があります。

213 {
214  reset(); // 距離の初期化
215  float radius = 0.0f;
216  line_tracer.isLeftsideLine(is_leftside_line); // 左エッジか右エッジか設定
217  // ライントレースで用いるPID値のセット
218  line_tracer.speedControl.setPid(2.0, 0.8, 0.1, speed);
219  line_tracer.turnControl.setPid(1.1, 0.1, 0.2, target_brightness);
220  // 距離を超過するか目的の色を見つけるまでループ
221  while(radius < distance) {
222  color = distinguisher.getColor();
223  odometry.update(walker.get_count_L(), walker.get_count_R());
224  radius = odometry.getCoordinate().radius;
225  line_tracer.runLine(walker.get_count_L(), walker.get_count_R(), getBrightness());
226  walker.run(line_tracer.getForward(), line_tracer.getTurn());
227  controller.printDisplay(5, "color: %d", color);
228  if(color == target_color) {
229  controller.speakerPlayTone(NOTE_A5, 300);
230  break;
231  }
232  controller.tslpTsk(4); // 4msec周期
233  }
234 
235  color = Color::NONE;
236  walker.run(0, 0);
237  reset();
238 }
void isLeftsideLine(bool b)
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
const Coordinate & getCoordinate()
走行体の位置情報を返す
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
float radius
Definition: WheelOdometry.h:17
void runLine(int32_t countL, int32_t countR, int16_t light_value)
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
std::int16_t getBrightness()
光センサの値を取得する
Definition: Navigator.cpp:115
std::int32_t get_count_R()
Definition: Walker.cpp:54
TurnControl turnControl
Color getColor()
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 Navigator::moveToColorCheck ( float  distance,
Color  target_color,
std::int8_t  pwm = 20 
)

指定した距離特定の色を探しながら進む(ライントレースしない)

Navigator.cpp191 行目に定義があります。

192 {
193  reset();
194  float radius = 0.0f;
195  while(radius < distance) {
196  color = distinguisher.getColor();
197  odometry.update(walker.get_count_L(), walker.get_count_R());
198  radius = odometry.getCoordinate().radius;
199  walker.run(pwm, 0);
200  if(color == target_color) {
201  controller.speakerPlayTone(NOTE_A4, 300);
202  break;
203  }
204  controller.tslpTsk(4); // 4msec周期
205  }
206  walker.run(0, 0);
207  reset();
208  color = Color::NONE;
209 }
void speakerPlayTone(uint16_t frequency, int32_t duration)
Definition: Controller.cpp:9
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
const Coordinate & getCoordinate()
走行体の位置情報を返す
float radius
Definition: WheelOdometry.h:17
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
std::int32_t get_count_R()
Definition: Walker.cpp:54
Color getColor()
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:

void Navigator::moveWhileDetecting ( float  distance,
std::int16_t  black,
std::int8_t  pwm = 10 
)

指定した距離まで黒色の点を検出しながら走行体を移動させる

[Navigator::moveWhileDetecting]

引数
distance距離 [mm]
black黒色の輝度値
pwmモータパワー

Navigator.cpp92 行目に定義があります。

93 {
94  // 測定距離の初期化
95  reset();
96  controller.ledSetColorGreen();
97  while(odometry.update(walker.get_count_L(), walker.get_count_R()).radius < distance) {
98  walker.run(pwm, 0);
99  if(binarization(black) == false)
100  controller.ledSetColorOrange();
101  else
102  controller.ledSetColorGreen();
103  controller.tslpTsk(4);
104  }
105 
106  walker.run(0, 0);
107  reset();
108 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
void ledSetColorOrange()
Definition: Controller.cpp:14
void ledSetColorGreen()
Definition: Controller.cpp:19
std::int32_t get_count_R()
Definition: Walker.cpp:54
std::int32_t get_count_L()
Definition: Walker.cpp:49
bool binarization(std::int16_t target)
2値化処理を実行する
Definition: Navigator.cpp:149

呼び出し関係図:

被呼び出し関係図:

void Navigator::reset ( void  )

座標とエンコーダの値を初期化する

[Navigator::reset]

Navigator.cpp12 行目に定義があります。

13 {
14  walker.reset();
15  odometry.reset();
16 }
const Coordinate & reset()
走行体の位置情報を初期化する
void reset()
Definition: Walker.cpp:15

呼び出し関係図:

被呼び出し関係図:

void Navigator::spin ( float  angle,
bool  clockwise = false,
std::int8_t  pwm = 10 
)

指定した角度まで走行体を回転させる(基本左エッジ)

指定した角度まで走行体を回転させる

[Navigator::spin]

引数
angle回転角度 [deg]
clockwise時計回りに回転させるか(デフォルトは、反時計回り)
pwmモータパワー

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

26 {
27  // 測定角度の初期化
28  reset();
29  angle = (angle < 0) ? -angle : angle;
30 
31  while(odometry.getRotationAngle(walker.get_count_L(), walker.get_count_R()) < angle) {
32  // 時計回りのときは-pwmを渡す
33  walker.run(0, clockwise ? -pwm : pwm);
34  controller.tslpTsk(4);
35  }
36 
37  // 回転停止
38  walker.run(0, 0);
39  reset();
40 }
void tslpTsk(int16_t time)
Definition: Controller.cpp:74
float getRotationAngle(std::int32_t left_motor, std::int32_t right_motor)
走行体の回転角度を返す
void reset()
座標とエンコーダの値を初期化する
Definition: Navigator.cpp:12
void run(std::int8_t pwm, std::int8_t turn)
Definition: Walker.cpp:30
std::int32_t get_count_R()
Definition: Walker.cpp:54
std::int32_t get_count_L()
Definition: Walker.cpp:49

呼び出し関係図:

被呼び出し関係図:


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