ETrobocon2017 - 片山研究所モデルベース開発推進事業部
Navigation.cpp
[詳解]
1 #include "Navigation.h"
2 
3 Navigation::Navigation(std::int32_t left_degree, std::int32_t right_degree, bool isSave):
4  sl(left_degree, right_degree, isSave){
5  speedControl.setPid(2.0, 2.0, 0.024, 30.0);
6  turnControl.setPid(4.0, 0.0, 0.0, 0.0);
7  isLeftsideLine(true);
8  setLine(0.0, 0.0, 100.0, 100.0);
10 }
11 
12 bool Navigation::setLine(float _start_x, float _start_y, float _goal_x, float _goal_y){
13  if((_start_x == _goal_x) && (_start_y == _goal_y)){
14  return false;
15  }
16  current_x = start_x = _start_x;
17  current_y = start_y = _start_y;
18  goal_x = _goal_x;
19  goal_y = _goal_y;
20 
21  return true;
22 }
23 
24 float Navigation::getDiffLine(float _current_x, float _current_y){
25  current_x = _current_x;
26  current_y = _current_y;
28 }
29 
31  if(std::abs(current_x - goal_x) < 30.0){
32  if(std::abs(current_y - goal_y) < 30.0){
33  return true;
34  }
35  }
36  return false;
37 }
39  if(isBack == true){
40  goal_angle = int(std::atan2(start_y - goal_y, start_x - goal_x)*180/3.14);
41  }else{
42  goal_angle = int(std::atan2(goal_y - start_y, goal_x - start_x)*180/3.14);
43  }
44 }
45 
46 bool Navigation::calculateValue(std::int32_t left_degree, std::int32_t right_degree, bool isBack){
47  int minus = 1;
48  if(isBack == true)minus = -1;
49  sl.update(left_degree, right_degree);
50  diff_line = getDiffLine(sl.getPointX(), sl.getPointY()) * minus;
51  forward = speedControl.calculateSpeedForPid(left_degree, right_degree);
53  if(checkEndOfLine() == true){
54  return false;
55  }
56  return true;
57 }
58 
59 bool Navigation::calculateAngle(std::int32_t left_degree, std::int32_t right_degree, bool isBack){
60  sl.update(left_degree, right_degree);
62  forward = 0;
64  else turn = 20;
66  return true;
67  }
68  return false;
69 }
void isLeftsideLine(bool b)
float current_y
Definition: Navigation.h:61
float getDiffLine(float, float)
Definition: Navigation.cpp:24
bool calculateValue(std::int32_t, std::int32_t, bool)
Definition: Navigation.cpp:46
bool calculateAngle(std::int32_t, std::int32_t, bool)
Definition: Navigation.cpp:59
std::int32_t calculateSpeedForPid(std::int32_t curAngleL, std::int32_t curAngleR)
std::int8_t calculateTurnForPid(std::int8_t forward, std::int8_t light_value)
Definition: TurnControl.cpp:14
bool checkEndOfLine()
Definition: Navigation.cpp:30
float goal_y
Definition: Navigation.h:57
float diff_line
Definition: Navigation.h:63
void setPid(double _p_gain, double _i_gain, double _d_gain, double _target)
Definition: Pid.cpp:40
SelfLocalization sl
Definition: Navigation.h:44
void update(std::int32_t left_motor_sl, std::int32_t right_motor_sl)
void calculate_line_angle(bool)
Definition: Navigation.cpp:38
2点間を結ぶ仮想直線をライントレースするクラスのヘッダファイル
float start_y
Definition: Navigation.h:53
float calculate_between_ev3_and_border(float _start_x, float _start_y, float _goal_x, float _goal_y, float _current_x, float _current_y)
int goal_angle
Definition: Navigation.h:45
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
float start_x
Definition: Navigation.h:51
SpeedControl speedControl
Navigation(std::int32_t, std::int32_t, bool isSave=true)
Definition: Navigation.cpp:3