tcVerySlow.maxv = 0.05;
tcVerySlow.maxacc = 0.05;
- act_vidle(VIDLE_UP);
-
FSM_TRANSITION(wait_for_start);
break;
default:
DEG2RAD(180));
}
+ void actuators_home()
+ {
+ act_vidle(VIDLE_UP);
+ }
+
#ifdef COMPETITION
#define WAIT_FOR_START
#else
case EV_START:
/* start competition timer */
sem_post(&robot.start);
+ actuators_home();
set_initial_position();
FSM_TRANSITION(climb_the_slope);
break;
// if the team color is changed during waiting
// for start.
set_initial_position();
+ if (robot.start_state == START_PLUGGED_IN)
+ actuators_home();
break;
case EV_RETURN:
case EV_GOAL_NOT_REACHABLE:
robot_trajectory_add_final_point_trans(PLAYGROUND_WIDTH_M-0.35, 0.45, ARRIVE_FROM(DEG2RAD(90),0.05));
break;
case EV_MOTION_DONE:
+ FSM_TIMER(10000);
act_vidle(VIDLE_DOWN);
break;
- case EV_START:
case EV_TIMER:
+ //act_vidle(VIDLE_UP);
+ //FSM_TRANSITION(experiment);
+ break;
+ case EV_START:
case EV_RETURN:
case EV_ACTION_DONE:
case EV_ACTION_ERROR:
}
}
+enum where_to_go {
+ CORN,
+ CONTAINER
+};
+
static int cnt = 0;
FSM_STATE(experiment)
{
+ static enum where_to_go where_to_go;
+ static struct corn *corn_to_get;
switch(FSM_EVENT) {
case EV_ENTRY: {
double x, y, phi;
robot_get_est_pos(&x, &y, &phi);
- printf("experiment: corn cnt: %d, est pos %.3f, %.3f, %.3f\n",
+ printf("experiment: puck cnt: %d, est pos %.3f, %.3f, %.3f\n",
cnt, x, y, phi);
- struct corn * corn = choose_next_corn();
- Pos *p = get_corn_approach_position(corn /*&robot.corns->corns[cnt++]*/);
- corn->was_collected = true;
- //robot_trajectory_new(&tcFast);
- //robot_trajectory_add_final_point_trans(robot_trajectory_add_final_point_trans(p->x, p->y, TURN(p->phi));
- robot_goto_trans(p->x, p->y, TURN(p->phi), &tcFast);
- delete(p);
+ corn_to_get = choose_next_corn();
+ if (corn_to_get) {
+ Pos *p = get_corn_approach_position(corn_to_get);
+ corn_to_get->was_collected = true;
+ //robot_trajectory_new(&tcFast);
+ //robot_trajectory_add_final_point_trans(robot_trajectory_add_final_point_trans(p->x, p->y, TURN(p->phi));
+ robot_goto_trans(p->x, p->y, TURN(p->phi), &tcFast);
+ delete(p);
+ }
+ where_to_go = CONTAINER;
break;
}
case EV_MOTION_DONE:
- FSM_TRANSITION(experiment);
+ cnt++;
+ if (where_to_go == CORN) {
+ FSM_TRANSITION(experiment);
+ } else {
+ remove_wall_around_corn(corn_to_get);
+ robot_goto_trans(PLAYGROUND_WIDTH_M - 0.4, 0.15, ARRIVE_FROM(DEG2RAD(-90), 0.02), &tcFast);
+ where_to_go = CORN;
+ }
break;
case EV_START:
case EV_TIMER:
}
}
-
-
/************************************************************************
* MAIN FUNCTION
************************************************************************/