2 * robodim_eb2008.h 08/04/18
4 * Dimensions for the robot, playground and other stuffs.
7 * Copyright: (c) 2008 CTU Dragons
8 * CTU FEE - Department of Control Engineering
12 #ifndef ROBODIM_EB2008_H
13 #define ROBODIM_EB2008_H
16 * FIXME: update robot's dimensions !!!
20 * S4 +--------------------------+ S2
22 * ^ | | ------- ABE | |
23 * RR| | | :<--------------------->|
25 * W| | + Center (L)|__| |
26 * | | AB : AF HOK |--,
27 * | |<---->:<----------------->| |
30 * S5 +--------------------------+ S3
37 /* FIXME needs update (?) // comment added by Filip */
38 #define ROBOT_WIDTH_MM 290 /* W*/
39 #define ROBOT_WIDTH_M (ROBOT_WIDTH_MM/1000.0)
40 #define ROBOT_ROTATION_RADIUS_MM (275/2) /* RR */
41 #define ROBOT_ROTATION_RADIUS_M (ROBOT_ROTATION_RADIUS_MM/1000.0)
42 #define LASER_CENTER_OFFSET_MM 50 /*FIXME*/ /* Distance of the laser from rotation axis (Center to L) */
43 #define LASER_CENTER_OFFSET_M (LASER_CENTER_OFFSET_MM/1000.0)
44 #define ROBOT_WHEEL_RADIUS_MM 40 /* WR */
45 #define ROBOT_WHEEL_RADIUS_M (ROBOT_WHEEL_RADIUS_MM/1000.0)
46 #define ROBOT_AXIS_TO_BACK_MM 75 /* AB */
47 #define ROBOT_AXIS_TO_BACK_M (ROBOT_AXIS_TO_BACK_MM/1000.0)
48 #define ROBOT_AXIS_TO_FRONT_MM 183 /* AF */
49 #define ROBOT_AXIS_TO_FRONT_M (ROBOT_AXIS_TO_FRONT_MM/1000.0)
50 #define ROBOT_AXIS_TO_BRUSH_MM 280 /* ABE */
51 #define ROBOT_AXIS_TO_BRUSH_M (ROBOT_AXIS_TO_BRUSH_MM/1000.0)
52 #define HOKUYO_CENTER_OFFSET_MM 170
53 #define HOKUYO_CENTER_OFFSET_M (HOKUYO_CENTER_OFFSET_MM/1000.0)
55 #define ROBOT_AXIS_TO_PUCK_M 0.2 // puck approach distance
56 #define PUCK_REACHABLE(x) ((x<0.13)?true:false)
57 #define PUCK_INSIDE(x) ((x<=0.055)?true:false)
60 * PLAYGROUND DIMENSIONS
63 * +---------------------------------+---------------------------------+
70 * | |O? G G G G G G ||
72 * H | R1+| G G G G G G |+ S1
74 * | || G G G G G G ?T|
81 * +---------------------------------+---------------------------------+
83 * <----------------------------------------------------------------->
87 * O? - opponent's "travelling" dispenser
88 * O - opponent's static dispenser
89 * S - our static dispenser
90 * ?T - our travelling dispenser
93 #define PLAYGROUND_WIDTH_MM 3000
94 #define PLAYGROUND_WIDTH_M (PLAYGROUND_WIDTH_MM/1000.0)
95 #define PLAYGROUND_HEIGHT_MM 2100
96 #define PLAYGROUND_HEIGHT_M (PLAYGROUND_HEIGHT_MM/1000.0)
98 #define ACROPOLIS_CENTER_X (PLAYGROUND_WIDTH_M/2.0)
99 #define ACROPOLIS_CENTER_Y (PLAYGROUND_HEIGHT_M/2.0)
100 #define ACROPOLIS_RADIUS 0.15
101 #define ACROPOLIS_DIAMETER (ACROPOLIS_RADIUS*2.0)
104 * PUCK DISPENSERS (= COLUMN ELEMENT DISPENSERS)
106 #define STATIC_DISPENSER_X_OFFSET 0.289
107 #define DISPENSER_TO_CUSHION_DISTANCE 0.04
108 #define STATIC_DISPENSER_X (PLAYGROUND_WIDTH_M - STATIC_DISPENSER_X_OFFSET)
109 #define STATIC_DISPENSER_Y DISPENSER_TO_CUSHION_DISTANCE
110 #define TRAVELLING_DISPENSER_X (PLAYGROUND_WIDTH - DISPENSER_TO_CUSHION_DISTANCE) // in the "PLAYGROUND DIMENSIONS" ASCII art: O?
111 // y coordinate of the travelling dispenser is not known in advance // in the "PLAYGROUND DIMENSIONS" ASCII art: O?
112 #define OPPONENTS_STATIC_DISPENSER_X STATIC_DISPENSER_X_OFFSET // in the "PLAYGROUND DIMENSIONS" ASCII art: O
113 #define OPPONENTS_STATIC_DISPENSER_Y DISPENSER_TO_CUSHION_DISTANCE // in the "PLAYGROUND DIMENSIONS" ASCII art: O
116 * FREE PUCKS POSITIONS
118 #define PUCK_GRID_X_OFFSET 0.6
119 #define PUCK_GRID_Y_OFFSET 0.925
120 #define PUCK_GRID_DELTA_X 0.25
121 #define PUCK_GRID_DELTA_Y 0.2
122 #define PUCK_GRID_ROWS_NUM 4
123 #define PUCK_GRID_COLS_NUM 3
126 float x, y; /* In meters */
130 * boolean: free_puck_present[lot][ny][nx]
132 extern const char free_puck_present[10][4][3];
135 * tells, whether a puck is placed in grid at nx, ny
136 * (lot=0..9, nx=0..2, ny=0..3)
138 #define FREE_PUCK_PRESENT(lot,nx,ny) (free_puck_present[lot][y][x])
141 * returns position of a free puck
144 * !WARNING! The positions assume WE_ARE_GREEN
145 * The pucks are sorted according to growing x, y,
146 * ie. the nearest puck to the start position is @nx=0,ny=3
147 * (yes, a stupid coord system...)
149 static inline struct puck_pos free_puck_pos(int nx, int ny) {
150 struct puck_pos pos = {PUCK_GRID_X_OFFSET + nx*PUCK_GRID_DELTA_X,
151 PUCK_GRID_Y_OFFSET + ny*PUCK_GRID_DELTA_Y};
158 #define BASKET_WIDTH 0.5
159 #define BASKET_HEIGHT 0.34
160 #define BASKET_VERT_OFFSET 0.35
162 #define BLUE_BASKET_TARGET_X PLAYGROUND_WIDTH_M
163 #define BLUE_BASKET_TARGET_Y (BASKET_WIDTH/2.0)
165 #define RED_BASKET_TARGET_X 0
166 #define RED_BASKET_TARGET_Y (BASKET_WIDTH/2.0)
169 * 3 ultrasonic beacons
171 #define BEACON_WIDTH 0.08
172 #define BEACON_HEIGHT BEACON_WIDTH
174 #define BEACON_GREEN 0
182 extern const struct beacon_pos beacon_green[BEACON_CNT];
183 extern const struct beacon_pos beacon_red[BEACON_CNT];
186 * Position of Shapr sensors on the robot with respect to the robot center
187 * (not used in EB2009)
193 #define SHARP_COUNT 0 /* no sharp sensors in EB2009, I hope */
195 #endif /* ROBODIM_EB2008_H */