#define STATIC_DISPENSER_Y DISPENSER_TO_CUSHION_DISTANCE
#define TRAVELLING_DISPENSER_X (PLAYGROUND_WIDTH - DISPENSER_TO_CUSHION_DISTANCE)
// y coordinate of the travelling dispenser is not known in advance
+#define OPPONENTS_STATIC_DISPENSER_X STATIC_DISPENSER_WIDTH_OFFSET
+#define OPPONENTS_STATIC_DISPENSER_Y DISPENSER_TO_CUSHION_DISTANCE
/**
* FREE PUCKS POSITIONS
FSM_STATE_DECL(wait_for_start);
/* movement states */
FSM_STATE_DECL(approach_our_static_dispenser);
+FSM_STATE_DECL(approach_opponents_static_dispenser);
/************************************************************************
* INITIAL AND STARTING STATES
#endif
robot_set_est_pos_trans(ROBOT_WIDTH_M,
PLAYGROUND_HEIGHT_M - ROBOT_AXIS_TO_BACK_M - 0.1,
- DEG2RAD(-90));
+ DEG2RAD(-45));
/* start to do something */
ROBOT_LOCK(state);
robot.state = COMPETITION_STARTED;
ROBOT_UNLOCK(state);
- FSM_TRANSITION(approach_our_static_dispenser);
+ //FSM_TRANSITION(approach_our_static_dispenser);
+ FSM_TRANSITION(approach_opponents_static_dispenser);
break;
case EV_RETURN:
case EV_TIMER:
}
}
+FSM_STATE(approach_opponents_static_dispenser)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY: {
+ struct TrajectoryConstraints tc = trajectoryConstraintsDefault;
+ tc.maxv /= 1.0;
+ robot_trajectory_new(&tc);
+
+ robot_trajectory_add_point_trans(OPPONENTS_STATIC_DISPENSER_X,
+ OPPONENTS_STATIC_DISPENSER_Y + ROBOT_AXIS_TO_FRONT_M + 0.4);
+ robot_trajectory_add_final_point_trans(OPPONENTS_STATIC_DISPENSER_X,
+ OPPONENTS_STATIC_DISPENSER_Y + ROBOT_AXIS_TO_FRONT_M+0.15,
+ NO_TURN());
+ }
+ break;
+ case EV_MOTION_DONE:
+ FSM_SIGNAL(ACT, EV_PICK_UP_PUCK, NULL);
+ printf("Arrived to the static dispenser\n");
+ break;
+ case EV_PUCK_LOADED_UP:
+ printf("A Puck picked up\n");
+ break;
+ case EV_RETURN:
+ case EV_TIMER:
+ case EV_OBSTRUCTION_AHEAD:
+ case EV_LASER_POWER:
+ case EV_GOAL_NOT_REACHABLE:
+ case EV_SHORT_TIME_TO_END:
+ case EV_ENEMY_AHEAD:
+ case EV_STACK_FULL:
+ case EV_START:
+ DBG_PRINT_EVENT("unhandled event");
+ break;
+ case EV_EXIT:
+ break;
+ }
+}
+