+FSM_STATE(rush_the_corn)
+{
+ switch(FSM_EVENT) {
+ case EV_ENTRY:
+ 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 = TURN_AROUND;
+ break;
+ case EV_MOTION_DONE:
+ FSM_TRANSITION(experiment_decider);
+ break;
+ case EV_START:
+ case EV_TIMER:
+ case EV_RETURN:
+ case EV_ACTION_DONE:
+ case EV_ACTION_ERROR:
+ case EV_GOAL_NOT_REACHABLE:
+ DBG_PRINT_EVENT("unhandled event");
+ case EV_EXIT:
+ break;
+ }
+}
+
+// used to perform the maneuvre
+FSM_STATE(turn_around)
+{
+ switch(FSM_EVENT) {
+ case EV_ENTRY:
+ robot_trajectory_new_backward(&tcFast);
+ robot_trajectory_add_final_point_trans(PLAYGROUND_WIDTH_M-0.35, 0.45, TURN_CCW(90));
+ break;
+ case EV_MOTION_DONE:
+ where_to_go = CORN;
+ FSM_TRANSITION(experiment_decider);
+ break;
+ case EV_START:
+ case EV_TIMER:
+ case EV_RETURN:
+ case EV_ACTION_DONE:
+ case EV_ACTION_ERROR:
+ case EV_GOAL_NOT_REACHABLE:
+ DBG_PRINT_EVENT("unhandled event");
+ case EV_EXIT:
+ break;
+ }
+}
+
+