summaryrefslogtreecommitdiff
path: root/digital/io-hub/src
diff options
context:
space:
mode:
authorNicolas Schodet2011-09-21 20:11:23 +0200
committerNicolas Schodet2011-09-21 20:11:23 +0200
commitdbbce723e0a125d875561d14766e5b4b690c3650 (patch)
tree92f27362ca13bdcf92bbf3f49e261ecc23bc6210 /digital/io-hub/src
parent456d1d6670a1a1cf6a01dbbf718a84cfa0a0f34c (diff)
digital/io-hub/src/robospierre: hacks for the IDF finalsidf-2011-finals
Diffstat (limited to 'digital/io-hub/src')
-rw-r--r--digital/io-hub/src/robospierre/bot.h2
-rw-r--r--digital/io-hub/src/robospierre/clamp.c4
-rw-r--r--digital/io-hub/src/robospierre/element.c20
-rw-r--r--digital/io-hub/src/robospierre/logistic.c9
-rw-r--r--digital/io-hub/src/robospierre/top.c20
5 files changed, 32 insertions, 23 deletions
diff --git a/digital/io-hub/src/robospierre/bot.h b/digital/io-hub/src/robospierre/bot.h
index 499046e2..82fd4c12 100644
--- a/digital/io-hub/src/robospierre/bot.h
+++ b/digital/io-hub/src/robospierre/bot.h
@@ -60,7 +60,7 @@
#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)
+ (BOT_ELEMENT_RADIUS + BOT_SIZE_FRONT + 1)
/** Speed used for initialisation. */
#ifdef HOST
diff --git a/digital/io-hub/src/robospierre/clamp.c b/digital/io-hub/src/robospierre/clamp.c
index 84b2771c..c4bbaed4 100644
--- a/digital/io-hub/src/robospierre/clamp.c
+++ b/digital/io-hub/src/robospierre/clamp.c
@@ -654,13 +654,13 @@ FSM_TRANS (CLAMP_INIT_GOING_REST, clamp_move_success, CLAMP_INIT_READY)
return FSM_NEXT (CLAMP_INIT_GOING_REST, clamp_move_success);
}
-FSM_TRANS (CLAMP_INIT_READY, init_start_round, CLAMP_GOING_IDLE)
+FSM_TRANS (CLAMP_INIT_READY, init_start_round, CLAMP_IDLE)
{
pwm_set (BOT_PWM_DOOR_FRONT_BOTTOM, BOT_PWM_DOOR_INIT_START);
pwm_set (BOT_PWM_DOOR_FRONT_TOP, BOT_PWM_DOOR_INIT_START);
pwm_set (BOT_PWM_DOOR_BACK_BOTTOM, BOT_PWM_DOOR_INIT_START);
pwm_set (BOT_PWM_DOOR_BACK_TOP, BOT_PWM_DOOR_INIT_START);
- clamp_move (logistic_global.clamp_pos_idle);
+ //clamp_move (logistic_global.clamp_pos_idle);
return FSM_NEXT (CLAMP_INIT_READY, init_start_round);
}
diff --git a/digital/io-hub/src/robospierre/element.c b/digital/io-hub/src/robospierre/element.c
index 881e1be6..c9db9098 100644
--- a/digital/io-hub/src/robospierre/element.c
+++ b/digital/io-hub/src/robospierre/element.c
@@ -64,8 +64,8 @@ struct element_t element_table[] =
{ELEMENT_NONE | ELEMENT_PAWN, {1500 + 1 * 350, 2 * 350}, ELEMENT_INTERSEC | ELEMENT_RIGHT, 30, 0, 0},
{ELEMENT_NONE | ELEMENT_PAWN, {1500 - 2 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_LEFT, 0, 0, 0}, /* 5th line left */
{ELEMENT_NONE | ELEMENT_PAWN, {1500 + 2 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_RIGHT, 0, 0, 0},
- {ELEMENT_NONE | ELEMENT_PAWN, {1500 - 1 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_LEFT, -30, 0, 0},
- {ELEMENT_NONE | ELEMENT_PAWN, {1500 + 1 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_RIGHT, -30, 0, 0},
+ {ELEMENT_NONE | ELEMENT_PAWN, {1500 - 1 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_LEFT, -99, 0, 0},
+ {ELEMENT_NONE | ELEMENT_PAWN, {1500 + 1 * 350, 1 * 350}, ELEMENT_INTERSEC | ELEMENT_RIGHT, -99, 0, 0},
/* Central pawn. (see ELEMENT_CENTRAL_PAWN) */
{ELEMENT_PAWN, {1500, 3 * 350}, ELEMENT_INTERSEC | ELEMENT_CENTER, 30, 0, 0},
@@ -91,12 +91,12 @@ struct element_t element_table[] =
Altern colors in order to retrieve position % 2.
See ELEMENT_UNLOAD_START and ELEMENT_UNLOAD_END
*/
- {ELEMENT_NONE | ELEMENT_ANY, {1500 - 2 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, 0, 0, 0}, /* Top left blue */
- {ELEMENT_NONE | ELEMENT_ANY, {1500 - 1 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, 0, 10, 0},
- {ELEMENT_NONE | ELEMENT_ANY, {1500 - 0 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, 0, 0, 0},
- {ELEMENT_NONE | ELEMENT_ANY, {1500 + 0 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, 0, 0, 0},
- {ELEMENT_NONE | ELEMENT_ANY, {1500 + 1 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, 0, 10, 0},
- {ELEMENT_NONE | ELEMENT_ANY, {1500 + 2 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, 0, 0, 0},
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 - 2 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, -100, 0, 0}, /* Top left blue */
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 - 1 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, -100, 10, 0},
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 - 0 * 350 - 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, -100, 0, 0},
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 + 0 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, -100, 0, 0},
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 + 1 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT, -100, 10, 0},
+ {ELEMENT_NONE | ELEMENT_ANY, {1500 + 2 * 350 + 175, 5 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, -100, 0, 0},
{ELEMENT_NONE | ELEMENT_ANY, {1500 - 2 * 350 - 175, 4 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, 0, 0, 0}, /* 2nd line left red */
{ELEMENT_NONE | ELEMENT_ANY, {1500 - 1 * 350 - 175, 4 * 350 + 175}, ELEMENT_CENTER | ELEMENT_RIGHT | ELEMENT_BONUS, 0, 10, 0}, /* bonus */
{ELEMENT_NONE | ELEMENT_ANY, {1500 - 0 * 350 - 175, 4 * 350 + 175}, ELEMENT_CENTER | ELEMENT_LEFT, 0, 0, 0},
@@ -280,6 +280,10 @@ element_score (position_t robot_pos, uint8_t element_id)
&& e.failure_until_s + failure_offset_s < (int) (chrono_remaining_time () / 1000))
return -1;
+ /* Forbidden element. */
+ if (e.bonus_load == -100)
+ return -1;
+
if (e.type == ELEMENT_KING)
score += ELEMENT_KING_SCORE;
else if (e.type == ELEMENT_QUEEN)
diff --git a/digital/io-hub/src/robospierre/logistic.c b/digital/io-hub/src/robospierre/logistic.c
index 82f5a4fa..d3f0293f 100644
--- a/digital/io-hub/src/robospierre/logistic.c
+++ b/digital/io-hub/src/robospierre/logistic.c
@@ -449,7 +449,7 @@ logistic_decision (void)
/* Reset. */
ctx.moving_from = CLAMP_SLOT_NB;
ctx.moving_to = CLAMP_SLOT_NB;
- ctx.construct_possible = 0;
+ ctx.construct_possible = 1;
ctx.ready = 0;
ctx.need_prepare = 0;
@@ -578,7 +578,12 @@ logistic_drop_element_type (uint8_t direction)
element_type = ctx.slots[i];
}
}
- return nb > 1 ? ELEMENT_TOWER : element_type;
+ if (ELEMENT_IS_HEAD (element_type))
+ return ELEMENT_TOWER;
+ else if (nb > 1)
+ return ELEMENT_TOWER;
+ else
+ return ELEMENT_PAWN;
}
void
diff --git a/digital/io-hub/src/robospierre/top.c b/digital/io-hub/src/robospierre/top.c
index 93fb447f..f8e0d342 100644
--- a/digital/io-hub/src/robospierre/top.c
+++ b/digital/io-hub/src/robospierre/top.c
@@ -101,6 +101,7 @@ struct top_t top_global;
FSM_TRANS (TOP_START, init_start_round, TOP_GOING_OUT1)
{
element_init ();
+ ctx.broken = 1;
ctx.green_again = 3;
asserv_goto (PG_X (PG_GREEN_WIDTH_MM + 100),
PG_Y (PG_LENGTH - 200), 0);
@@ -153,18 +154,18 @@ top_go_element (void)
asserv_get_position (&robot_pos);
ctx.target_element_id = element_best (robot_pos);
element_t e = element_get (ctx.target_element_id);
- if (!ctx.broken)
+ if (e.attr & ELEMENT_GREEN)
{
- if (e.attr & ELEMENT_GREEN)
- {
+ if (!ctx.broken)
logistic_global.prepare = 0;
- pawn_sensor_bumper_enable (0);
- }
else
- {
logistic_global.prepare = top_prepare_level ();
- pawn_sensor_bumper_enable (1);
- }
+ pawn_sensor_bumper_enable (0);
+ }
+ else
+ {
+ logistic_global.prepare = top_prepare_level ();
+ pawn_sensor_bumper_enable (1);
}
vect_t element_pos = element_get_pos (ctx.target_element_id);
top_go_this_element (element_pos, 0);
@@ -179,8 +180,7 @@ top_go_drop (void)
ctx.target_element_id = element_unload_best (robot_pos);
position_t drop_pos;
drop_pos.v = element_get_pos (ctx.target_element_id);
- if (!ctx.broken)
- logistic_global.prepare = top_prepare_level ();
+ logistic_global.prepare = top_prepare_level ();
pawn_sensor_bumper_enable (0);
uint8_t backward = logistic_global.collect_direction == DIRECTION_FORWARD
? 0 : ASSERV_BACKWARD;