ROBOT_UNLOCK(sharps);
}
-/**
- * Detection of the enemy ahead.
- *
- * @return enemy may be ahead us.
- */
-int enemy_ahead()
-{
- double sharp[3];
- int cnt = 0, i;
-
- get_front_sharp_m(sharp);
- printf("front sharp: %f %f\n", sharp[LEFT], sharp[RIGHT]);
- for (i=0; i<2; i++)
- if (sharp[i] > 0 && sharp[i] < 0.30)
- cnt++;
-
- /* FIXME: dont use enemy avoidance now */
-// return ((cnt >= 1) ? 1 : 0);
- return (0);
-}
-
/**
* Use bumpers check if we are closed to the dispenser
*/
brushes_out();
open_bottom_door();
close_back_door();
-// FSM_TRANSITION(wait_for_start);
+ FSM_TRANSITION(wait_for_start);
// FSM_TRANSITION(go_to_container);
// FSM_TRANSITION(get_balls);
/* FIXME: delete after the test */
- robot.carousel_cnt = 5;
- robot.carousel_pos = 0;
- FSM_TRANSITION(deposite_balls);
+// robot.carousel_cnt = 5;
+// robot.carousel_pos = 0;
+// FSM_TRANSITION(deposite_balls);
break;
default: break;
}
FSM_STATE(go_to_our_white_dispenser2)
{
- struct ref_pos_type des_pos = { 0.20, PLAYGROUND_HEIGHT_M - 0.65, 0};
+ struct ref_pos_type des_pos = {0.20, PLAYGROUND_HEIGHT_M - 0.65, 0};
+ static int approaching_attempts = 0;
+
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ robot_goto_point(des_pos);
+ break;
+ case EV_MOTION_DONE:
+ if (closed_to_dispenser() || approaching_attempts++ < 2) {
+ FSM_TRANSITION(go_from_our_dispenser);
+ } else {
+ FSM_TRANSITION(get_balls);
+ approaching_attempts = 0;
+ }
+ break;
+ default: break;
+ }
+}
+
+FSM_STATE(go_to_our_red_dispenser)
+{
+ switch (FSM_EVENT) {
+ case EV_ENTRY:
+ robot_trajectory_new_backward(NULL);
+ robot_trajectory_add_final_point_trans(0.7,
+ PLAYGROUND_HEIGHT_M - 0.65, NO_TURN());
+ break;
+ case EV_MOTION_DONE:
+ FSM_TRANSITION(go_to_our_white_dispenser2);
+ break;
+ default: break;
+ }
+}
+
+FSM_STATE(go_to_our_red_dispenser2)
+{
+ struct ref_pos_type des_pos = {0.65, PLAYGROUND_HEIGHT_M - 0.20, 0};
static int approaching_attempts = 0;
switch (FSM_EVENT) {
{
switch (FSM_EVENT) {
case EV_ENTRY:
- robot_trajectory_new_backward(NULL);
- robot_trajectory_add_final_point_trans(0.2,
- PLAYGROUND_HEIGHT_M - 0.7, NO_TURN());
+ /* FIXME: go backward by */
break;
case EV_MOTION_DONE:
FSM_TRANSITION(go_to_our_white_dispenser2);
if (robot.carousel_pos < CAROUSEL_SIZE) {
close_back_door();
SUBFSM_TRANSITION(next_carousel_position, NULL);
- robot.carousel_cnt--;
- robot.carousel_pos++;
} else {
robot.carousel_cnt = 0;
/* FIXME: */
FSM_TIMER(WAIT_FOR_DEPOSITION_TIMER);
break;
case EV_TIMER:
+ robot.carousel_cnt--;
+ robot.carousel_pos++;
close_back_door();
DBG("carousel_cnt = %d\n", robot.carousel_cnt);
FSM_TRANSITION(deposite_balls);