From dbbce723e0a125d875561d14766e5b4b690c3650 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Wed, 21 Sep 2011 20:11:23 +0200 Subject: digital/io-hub/src/robospierre: hacks for the IDF finals --- digital/io-hub/src/robospierre/bot.h | 2 +- digital/io-hub/src/robospierre/clamp.c | 4 ++-- digital/io-hub/src/robospierre/element.c | 20 ++++++++++++-------- digital/io-hub/src/robospierre/logistic.c | 9 +++++++-- digital/io-hub/src/robospierre/top.c | 20 ++++++++++---------- 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; -- cgit v1.2.3