summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/robospierre/bot.h
blob: 499046e2058d4719b103e987ecfa935a9647a858 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#ifndef bot_h
#define bot_h
/* bot.h */
/* robospierre - Eurobot 2011 AI. {{{
 *
 * Copyright (C) 2011 Nicolas Schodet
 *
 * APBTeam:
 *        Web: http://apbteam.org/
 *      Email: team AT apbteam DOT org
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 * }}} */

/** Robot specific defines. */

/** Scaling factor, millimeter per step. */
#ifdef HOST
# define BOT_SCALE 0.0395840674352314
#else
# define BOT_SCALE 0.0317975134344
#endif

/** Distance from the robot axis to the front. */
#define BOT_SIZE_FRONT 150
/** Distance from the robot axis to the back. */
#define BOT_SIZE_BACK 150
/** Distance from the robot axis to the side. */
#define BOT_SIZE_SIDE 190

/** Radius of an element. */
#define BOT_ELEMENT_RADIUS 100

/** Distance between the front contact point and the robot center. */
#define BOT_FRONT_CONTACT_DIST_MM 150
/** Angle error at the front contact point. */
#define BOT_FRONT_CONTACT_ANGLE_ERROR_DEG 0

/** Distance from robot center to front pawn detection threshold. */
#define BOT_PAWN_FRONT_DETECTION_THRESHOLD_MM 190
/** Distance from robot center to back pawn detection threshold. */
#define BOT_PAWN_BACK_DETECTION_THRESHOLD_MM -190
/** Distance from robot center to an element near enough to be taken. */
#define BOT_PAWN_TAKING_DISTANCE_MM 150

/** Distance from border to position in front of a green element. */
#define BOT_GREEN_ELEMENT_PLACE_DISTANCE_MM 600
/** Distance from border to go to capture a green element. */
#define BOT_GREEN_ELEMENT_DISTANCE_MM \
    (BOT_ELEMENT_RADIUS + BOT_SIZE_FRONT + 10)

/** Speed used for initialisation. */
#ifdef HOST
# define BOT_SPEED_INIT 0x20, 0x20, 0x20, 0x20
#else
# define BOT_SPEED_INIT 0x10, 0x10, 0x10, 0x10
#endif
/** Normal cruise speed. */
#define BOT_SPEED_NORMAL 0x50, 0x60, 0x20, 0x20

#ifdef HOST

# define BOT_CLAMP_SLOT_FRONT_BOTTOM_ELEVATION_STEP 0
# define BOT_CLAMP_SLOT_FRONT_MIDDLE_ELEVATION_STEP (0x3b0b / 2)
# define BOT_CLAMP_SLOT_FRONT_TOP_ELEVATION_STEP 0x3b0b
# define BOT_CLAMP_SLOT_BACK_BOTTOM_ELEVATION_STEP 0
# define BOT_CLAMP_SLOT_BACK_MIDDLE_ELEVATION_STEP (0x3b0b / 2)
# define BOT_CLAMP_SLOT_BACK_TOP_ELEVATION_STEP 0x3b0b
# define BOT_CLAMP_SLOT_SIDE_ELEVATION_STEP 0x3b0b
# define BOT_CLAMP_BAY_FRONT_LEAVE_ELEVATION_STEP (0x3b0b / 2 + 1000)
# define BOT_CLAMP_BAY_BACK_LEAVE_ELEVATION_STEP (0x3b0b / 2 + 1000)
# define BOT_CLAMP_BAY_SIDE_ENTER_LEAVE_ELEVATION_STEP (0x3b0b / 2)
#define BOT_CLAMP_INIT_ELEVATION_SWITCH_STEP \
    BOT_CLAMP_SLOT_FRONT_TOP_ELEVATION_STEP

# define BOT_CLAMP_SLOT_FRONT_BOTTOM_ROTATION_STEP 0
# define BOT_CLAMP_SLOT_FRONT_MIDDLE_ROTATION_STEP 0
# define BOT_CLAMP_SLOT_FRONT_TOP_ROTATION_STEP 0
# define BOT_CLAMP_SLOT_BACK_BOTTOM_ROTATION_STEP 0x233e
# define BOT_CLAMP_SLOT_BACK_MIDDLE_ROTATION_STEP 0x233e
# define BOT_CLAMP_SLOT_BACK_TOP_ROTATION_STEP 0x233e

# define BOT_CLAMP_BAY_FRONT_ROTATION_STEP \
    BOT_CLAMP_SLOT_FRONT_MIDDLE_ROTATION_STEP
# define BOT_CLAMP_BAY_BACK_ROTATION_STEP \
    BOT_CLAMP_SLOT_BACK_MIDDLE_ROTATION_STEP
# define BOT_CLAMP_BAY_SIDE_ROTATION_STEP \
    (BOT_CLAMP_BAY_BACK_ROTATION_STEP / 2)
# define BOT_CLAMP_BAY_SIDE_MARGIN_ROTATION_STEP 1000

#define BOT_CLAMP_CLOSED_FRONT_ROTATION_OFFSET 0
#define BOT_CLAMP_CLOSED_BACK_ROTATION_OFFSET 0
#define BOT_CLAMP_CLOSED_SIDE_ROTATION_OFFSET 0

#else /* !HOST */

# define BOT_CLAMP_SLOT_FRONT_BOTTOM_ELEVATION_STEP 0
# define BOT_CLAMP_SLOT_FRONT_MIDDLE_ELEVATION_STEP (0x1da7 - 250)
# define BOT_CLAMP_SLOT_FRONT_TOP_ELEVATION_STEP 0x35e2
# define BOT_CLAMP_SLOT_BACK_BOTTOM_ELEVATION_STEP 0x0169
# define BOT_CLAMP_SLOT_BACK_MIDDLE_ELEVATION_STEP (0x1f03 - 250)
# define BOT_CLAMP_SLOT_BACK_TOP_ELEVATION_STEP 0x3610
# define BOT_CLAMP_SLOT_SIDE_ELEVATION_STEP (0x3596 + 3 * 0x72)
# define BOT_CLAMP_BAY_FRONT_LEAVE_ELEVATION_STEP 0x1da7
# define BOT_CLAMP_BAY_BACK_LEAVE_ELEVATION_STEP 0x1f03
# define BOT_CLAMP_BAY_SIDE_ENTER_LEAVE_ELEVATION_STEP ((0x1da7 + 0x1f03) / 2)
#define BOT_CLAMP_INIT_ELEVATION_SWITCH_STEP 0x363f

# define BOT_CLAMP_SLOT_FRONT_BOTTOM_ROTATION_STEP 92
# define BOT_CLAMP_SLOT_FRONT_MIDDLE_ROTATION_STEP 92
# define BOT_CLAMP_SLOT_FRONT_TOP_ROTATION_STEP 92
# define BOT_CLAMP_SLOT_BACK_BOTTOM_ROTATION_STEP 0x2433
# define BOT_CLAMP_SLOT_BACK_MIDDLE_ROTATION_STEP 0x2433
# define BOT_CLAMP_SLOT_BACK_TOP_ROTATION_STEP 0x2433

# define BOT_CLAMP_BAY_FRONT_ROTATION_STEP \
    BOT_CLAMP_SLOT_FRONT_MIDDLE_ROTATION_STEP
# define BOT_CLAMP_BAY_BACK_ROTATION_STEP \
    BOT_CLAMP_SLOT_BACK_MIDDLE_ROTATION_STEP
# define BOT_CLAMP_BAY_SIDE_ROTATION_STEP (0x1183 + 120)
# define BOT_CLAMP_BAY_SIDE_MARGIN_ROTATION_STEP 1000

#define BOT_CLAMP_CLOSED_FRONT_ROTATION_OFFSET -129
#define BOT_CLAMP_CLOSED_BACK_ROTATION_OFFSET -60
#define BOT_CLAMP_CLOSED_SIDE_ROTATION_OFFSET -120

#endif /* !HOST */

#define BOT_CLAMP_INIT_ELEVATION_STEP \
    (BOT_CLAMP_SLOT_FRONT_MIDDLE_ELEVATION_STEP + 10 * 0x72)

#define BOT_CLAMP_CLOSED_ROTATION_OFFSET(pos) \
    (CLAMP_IS_SLOT_IN_FRONT_BAY (pos) \
     ? BOT_CLAMP_CLOSED_FRONT_ROTATION_OFFSET \
     : (CLAMP_IS_SLOT_IN_BACK_BAY (pos) \
	? BOT_CLAMP_CLOSED_BACK_ROTATION_OFFSET \
	: BOT_CLAMP_CLOSED_SIDE_ROTATION_OFFSET))

#define BOT_CLAMP_INIT_ELEVATION_SPEED 0x10
#define BOT_CLAMP_INIT_ROTATION_SPEED -0x04
#define BOT_CLAMP_ELEVATION_SPEED 0x60
#define BOT_CLAMP_ROTATION_SPEED 0x60
#define BOT_CLAMP_ROTATION_OFFSET_SPEED 1

#define BOT_PWM_CLAMP 2
#define BOT_PWM_DOOR_FRONT_BOTTOM 0
#define BOT_PWM_DOOR_FRONT_TOP 1
#define BOT_PWM_DOOR_BACK_BOTTOM 3
#define BOT_PWM_DOOR_BACK_TOP 4

#define BOT_PWM_CLAMP_OPEN_TIME 150
#define BOT_PWM_CLAMP_OPEN 0x1ff, 150, 0
#define BOT_PWM_CLAMP_CLOSE_TIME 150
#define BOT_PWM_CLAMP_CLOSE -0x1ff, 150, 0

#define BOT_PWM_DOOR_OPEN_TIME 12
#define BOT_PWM_DOOR_OPEN(slot) \
    0x1ff, (((slot) == CLAMP_SLOT_FRONT_BOTTOM \
	     || (slot) == CLAMP_SLOT_BACK_BOTTOM) ? 80 : 62), 0x55
#define BOT_PWM_DOOR_CLOSE_TIME 100
#define BOT_PWM_DOOR_CLOSE(slot) \
    -0x1ff, (((slot) == CLAMP_SLOT_FRONT_BOTTOM \
	     || (slot) == CLAMP_SLOT_BACK_BOTTOM) ? 80 : 62), \
    (((slot) == CLAMP_SLOT_FRONT_BOTTOM \
      || (slot) == CLAMP_SLOT_BACK_BOTTOM) ? -0x100 : -0x200)

#define BOT_PWM_CLAMP_INIT 0x1ff, 150, 0
#define BOT_PWM_DOOR_INIT 0x100, 160, 0
#define BOT_PWM_DOOR_INIT_START 0x55
#define BOT_PWM_CLAMP_DOOR_INIT 250

#endif /* bot_h */