summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/robospierre/bot.h
blob: 02b74da93418a792c5b258c5c0ebf1745c9e5e7a (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
#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.0415178942124
#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

/** 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

/** Speed used for initialisation. */
#define BOT_SPEED_INIT 0x10, 0x10, 0x10, 0x10
/** Normal cruise speed. */
#define BOT_SPEED_NORMAL 0x40, 0x40, 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_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_CLOSED_FRONT_ROTATION_OFFSET 0
#define BOT_CLAMP_CLOSED_BACK_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 0x34f7
# 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 0x3535
# 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_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 0x10de

#define BOT_CLAMP_CLOSED_FRONT_ROTATION_OFFSET -129
#define BOT_CLAMP_CLOSED_BACK_ROTATION_OFFSET -60

#endif /* !HOST */

#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 : 0))

#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 125
#define BOT_PWM_CLAMP_OPEN 0x1ff, 125, 0
#define BOT_PWM_CLAMP_CLOSE_TIME 75
#define BOT_PWM_CLAMP_CLOSE -0x3ff, 75, 0

#define BOT_PWM_DOOR_OPEN_TIME 12
#define BOT_PWM_DOOR_OPEN 0x3ff, 37, 0x55
#define BOT_PWM_DOOR_CLOSE_TIME 50
#define BOT_PWM_DOOR_CLOSE(slot) \
    -0x3ff, 50, ((slot == CLAMP_SLOT_FRONT_BOTTOM \
		  || slot == CLAMP_SLOT_BACK_BOTTOM) ? -0x100 : -0x180)

#endif /* bot_h */