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

#include <RightNormalCourse.h>

RightNormalCourse の継承関係図
Inheritance graph
RightNormalCourse 連携図
Collaboration graph

公開メンバ関数

 RightNormalCourse ()
 
bool runNormalCourse (int16_t target_brightness, int16_t black, int16_t white, int16_t gray)
 
bool statusCheck (int32_t countL, int32_t countR)
 
int getStatus ()
 
- 基底クラス NormalCourse に属する継承公開メンバ関数
 NormalCourse ()
 
void stop ()
 
void runOrStop (Walker &walker)
 

その他の継承メンバ

- 基底クラス NormalCourse に属する継承公開変数類
LineTracerWalker lineTracerWalker
 
- 基底クラス NormalCourse に属する継承限定公開変数類
MotorAngle motor_angle
 
int8_t forward
 
int8_t turn
 

詳解

RコースのNormalCourseの処理を行うクラス

RightNormalCourse.h31 行目に定義があります。

構築子と解体子

RightNormalCourse::RightNormalCourse ( )

コンストラクタ。 右エッジである設定をしている

RightNormalCourse.cpp9 行目に定義があります。

10 {
12  status = old_status = RightStatus::STRAIGHT_LONG;
13 }
void isLeftsideLine(bool b)
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:13

呼び出し関係図:

関数詳解

int RightNormalCourse::getStatus ( )

現在の走行場所の状態を取得する

戻り値
現在の走行場所の状態(int型)

RightNormalCourse.cpp118 行目に定義があります。

119 {
120  return (int)status;
121 }
bool RightNormalCourse::runNormalCourse ( int16_t  target_brightness,
int16_t  black,
int16_t  white,
int16_t  gray 
)

走行場所でのPID値を設定する

戻り値
Goalしたかどうか

RightNormalCourse.cpp20 行目に定義があります。

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 }
void setPid(double p_gain_, double i_gain_, double d_gain_, double target_)
Definition: Pid.cpp:40
LineTracerWalker lineTracerWalker
Definition: NormalCourse.h:13
TurnControl turnControl
SpeedControl speedControl

呼び出し関係図:

被呼び出し関係図:

bool RightNormalCourse::statusCheck ( int32_t  countL,
int32_t  countR 
)

現在の走行場所の状態を設定する

引数
[in]countL左タイヤの回転角
[in]countR右タイヤの回転角
戻り値
走行場所の状態が変わったかどうか

RightNormalCourse.cpp81 行目に定義があります。

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 }
float absoluteAngleMean(std::int32_t left_motor, std::int32_t right_motor)
左右モータの絶対角度の平均値を計算する
Definition: MotorAngle.cpp:39
MotorAngle motor_angle
Definition: NormalCourse.h:16

呼び出し関係図:

被呼び出し関係図:


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