ETrobocon2017 - 片山研究所モデルベース開発推進事業部
PuzzleLineTracer.h
[詳解]
1 #ifndef __PUZZLELINETRACER__
2 #define __PUZZLELINETRACER__
3 
4 #include "ev3api.h"
5 #include "Walker.h"
6 #include "ColorSensor.h"
7 #include "Distance.h"
8 #include "LineTracerWalker.h"
9 
10 #define X 0x00
11 
12 #define PUZZLE_POSITION_CURRENT 16
13 #define PUZZLE_POSITION_NEXT 16
14 #define PUZZLE_POSITION_DESTINATE 5
15 #define PUZZLE_POLAR_COODINATE 2
16 
17 #define DEGREE 0
18 #define DISTANCE 1
19 
20 #define PUZZLE_LINE_LONG 1130
21 #define PUZZLE_LINE_NORMAL 770
22 #define PUZZLE_LINE_SHORT 500
23 
24 using namespace ev3api;
25 
27 public:
28  PuzzleLineTracer () ;
29  void preparatePuzzle ( void ) ;
30  void puzzleLineTrace ( int8_t, int8_t, int8_t ) ;
31 
32 private:
33  Walker walker ;
34  ColorSensor colorSensor;
35  LineTracerWalker lineTracer;
36  Distance distance;
37  int8_t color ;
38  int8_t forward;
39  int32_t traceDistance ;
40  int8_t currentDegree ;
41  int8_t leftMotorDeg ;
42  int8_t rightMotorDeg ;
43  int8_t connectPosition ;
44  int8_t beforeConnectPosition ;
45  int8_t beforeDegree ;
46  int8_t nextDegree ;
47  int32_t nextDistance ;
48  int8_t moveDegree ;
49  int8_t connectNumberManager[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_NEXT] = {
50  /* 接続ノード番号付与テーブル ( 'X'は非接続を示す ) */
51  /* N E X T */
52  /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, */
53  /* 0 */{ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X },
54  /* 1 */{ X, X, 0, X, X, 1, X, X, X, X, 2, X, X, X, X, X },
55  /* 2 */{ X, 0, X, 1, X, 2, 3, X, X, X, X, X, X, X, X, X },
56  /* 3 */{ X, X, 0, X, 1, X, 2, 3, X, X, X, X, X, X, X, X },
57  /* C 4 */{ X, X, X, 0, X, X, X, 1, X, X, X, 2, X, X, X, X },
58  /* U 5 */{ X, 0, 1, X, X, X, X, X, 2, X, 3, X, X, X, X, X },
59  /* R 6 */{ 0, X, 1, 2, X, X, X, X, 3, 4, X, X, X, X, X, X },
60  /* R 7 */{ X, X, X, 0, 1, X, X, X, X, 2, X, 3, X, X, X, X },
61  /* E 8 */{ 0, X, X, X, X, 1, 2, X, X, X, X, X, 3, 4, X, X },
62  /* N 9 */{ 0, X, X, X, X, X, 1, 2, X, X, X, X, X, X, 3, 4 },
63  /* T 10 */{ X, 0, X, X, X, 1, X, X, X, X, X, X, 2, X, X, X },
64  /* 11 */{ X, X, X, X, 0, X, X, 1, X, X, X, X, X, X, X, 2 },
65  /* 12 */{ X, X, X, X, X, X, X, X, 0, X, 1, X, X, 2, X, X },
66  /* 13 */{ 0, X, X, X, X, X, X, X, 1, X, X, X, 2, X, 3, X },
67  /* 14 */{ 0, X, X, X, X, X, X, X, X, 1, X, X, X, 2, X, 3 },
68  /* 15 */{ X, X, X, X, X, X, X, X, X, 0, X, 1, X, X, 2, X }
69  } ;
71  {
72  /* 0 */{ X, X }, { X, X }, { X, X }, { X, X }, { X, X }
73  },
74  {
75  /* 1 */{ 0, PUZZLE_LINE_LONG }, { -30, PUZZLE_LINE_SHORT }, { -75, PUZZLE_LINE_NORMAL }, { 0, 0 }, { 0, 0 }
76  },
77  {
78  /* 2 */{ 180, PUZZLE_LINE_LONG }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }
79  },
80  {
81  /* 3 */{ 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }
82  },
83  {
84  /* 4 */{ 180, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -105, PUZZLE_LINE_NORMAL }, { 0, 0 }, { X, X }
85  },
86  {
87  /* 5 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }
88  },
89  {
90  /* 6 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }
91  },
92  {
93  /* 7 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X }
94  },
95  {
96  /* 8 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X }
97  },
98  {
99  /* 9 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { X, X }
100  },
101  {
102  /* 10 */{ 105, PUZZLE_LINE_NORMAL }, { 60, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X }
103  },
104  {
105  /* 11 */{ 75, PUZZLE_LINE_NORMAL }, { 120, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X }
106  },
107  {
108  /* 12 */{ 60, PUZZLE_LINE_SHORT }, { 150, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X }
109  },
110  {
111  /* 13 */{ 0, 0 }, { 120, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X }
112  },
113  {
114  /* 14 */{ 60, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X }
115  },
116  {
117  /* 15 */{ 120, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, 0 }, { X, X }
118  },
119  } ;
120 
121 } ;
122 
123 #endif
Definition: Clock.h:12
#define X
#define PUZZLE_POSITION_NEXT
タイヤの進んだ距離(回転角)に関するクラス
#define PUZZLE_LINE_NORMAL
#define PUZZLE_LINE_LONG
#define PUZZLE_LINE_SHORT
#define PUZZLE_POLAR_COODINATE
Definition: Walker.h:10
#define PUZZLE_POSITION_CURRENT
#define PUZZLE_POSITION_DESTINATE