]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
robofsm: Prepare state files for strategies
authorpetr <silhavik.p@gmail.com>
Mon, 16 Apr 2012 19:53:40 +0000 (21:53 +0200)
committerpetr <silhavik.p@gmail.com>
Mon, 16 Apr 2012 19:53:40 +0000 (21:53 +0200)
Remove file content from last year and prepare for this year competitions.

src/robofsm/common-states.cc
src/robofsm/common-states.h

index 657571b9a94f43c50b41daf7298788c1d250b37c..d0c3b1c1f226cd6fca0a66144c893f1971046a68 100644 (file)
@@ -42,9 +42,9 @@ void set_initial_position()
 
 void actuators_home()
 {
-       act_jaws(CLOSE);
+//     act_jaws(CLOSE);
 
-        bool pokus = robot.fsm.motion.state_name == "wait_and_try_again";
+//        bool pokus = robot.fsm.motion.state_name == "wait_and_try_again";
        // drive lift to home position
        //act_lift(0, 0, 1);
        // unset the homing request
@@ -97,15 +97,7 @@ void inline enable_bumpers(bool enabled)
        robot.use_back_bumpers = enabled;
 }
 
-void enable_my_square_walls(bool enabled)
-{
-       for (int i = 0; i < 15; i++) {
-               if (robot.team_color == RED)
-                       ShmapSetCircleFlag(red_sq[i].x, red_sq[i].y, 0.2, enabled*MAP_FLAG_WALL, (!enabled)*MAP_FLAG_WALL);
-               else
-                       ShmapSetCircleFlag(blue_sq[i].x, blue_sq[i].y, 0.2,enabled*MAP_FLAG_WALL, (!enabled)*MAP_FLAG_WALL);
-       }
-}
+
 
 /************************************************************************
  * Trajectory constraints used; They are  initialized in the main() function in competition.cc
@@ -113,917 +105,140 @@ void enable_my_square_walls(bool enabled)
 
 struct TrajectoryConstraints tcFast, tcVeryFast, tcSlow, tcVerySlow;
 
-bool tower = false;
-bool bonus_placed = false;
 
-const double load_dist = 0.04; // TODO distance from side when loading green figures
-const double app_dist = 0.04;  // TODO distance from green figures when approach
-
-/* fields with numbers of opponent squares, we have five variations of movement style across opp. squares*/
-const int move_around[][8] = {{12, 14, 11, 13, 11, 8, 6, 9},
-                            {6, 8, 11, 13, 11, 14, 12, 9},
-                            {11, 13, 11, 8, 11, 14, 12, 9},
-                            {6, 8, 11, 13, 11, 14, 12, 9},
-                            {11, 8, 11, 13, 11, 14, 12, 9}};
-
-/** generate "random" positions on oponent squares and goto this position */
-FSM_STATE(move_around)
+FSM_STATE(approach_central_buillon)
 {
-       static int next_sq = 0;
-        static int max_wait = 0;
-        // choose randomly one of five move_around strategies
-        static int strategy = rand() % 5;
-        int goal;
-       double goal_x, goal_y;
-       static bool entry = true;
-
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                        max_wait = 0;
-                        FSM_TIMER(2000);
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       act_jaws(CLOSE);
-
-                       enable_my_square_walls(true);
-
-                       srand((int)(robot_current_time()*10000));
-
-                        // save next square number where to go to
-                        goal = move_around[strategy][next_sq];
-
-                        // pick position on opponent squares with goal index
-                       if (robot.team_color == RED) {
-                               goal_x = blue_sq[goal].x;
-                               goal_y = blue_sq[goal].y;
-                       } else {
-                               goal_x = red_sq[goal].x;
-                               goal_y = red_sq[goal].y;
-                       }
-
-                       robot_goto_notrans(goal_x, goal_y, NO_TURN(), &tcFast);
-                        printf("strategy: %d, next_sq: %d, goal: %d\n",strategy, next_sq, goal);
-                        next_sq = (next_sq + 1 < sizeof(move_around[strategy]) ? next_sq + 1 : next_sq);
-                       break;
-               case EV_START:
-               case EV_TIMER:
-                        // every two seconds check if short time to end
-                        FSM_TIMER(2000);
-                        if (robot.short_time_to_end == true) {
-                                // if short time to end - send stop signal to motion FSM and return to main FSM
-                                FSM_SIGNAL(MOTION, EV_MOVE_STOP, NULL);
-                                SUBFSM_RET(NULL);
-                                printf("return from move around state\n");
-                        } else if (robot.fsm.motion.state_name == "wait_and_try_again") {
-                                // if goal position unawailable (obstacle) try max. X-times
-                                if (++max_wait >= 3) {
-                                        // if goal not awailable, send stop signal to motion FSM and generate new target trom move_around
-                                        printf("go to next square!\n");
-                                        max_wait = 0;
-                                        next_sq = (next_sq + 1 < sizeof(move_around[strategy]) ? next_sq + 1 : next_sq);
-                                        FSM_SIGNAL(MOTION, EV_MOVE_STOP, NULL);
-                                        FSM_TRANSITION(move_around);
-                                 } else {
-                                         printf("waiting for opponent! %d\n", max_wait);
-                                 }
-                        }
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_DONE:
-                        if (robot.short_time_to_end == true)
-                                SUBFSM_RET(NULL);
-                        else
-                                FSM_TRANSITION(move_around);
-                       break;
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-/** pick figure from opponent bonus square */
-FSM_STATE(approach_opp_bonus_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = false;
-
-                        robot_goto_trans(
-                                0.45 + 2*0.35 + 0.175,
-                                0.35 + 0.175,
-                                TURN(DEG2RAD(-50)), &tcFast);
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TRANSITION(load_opp_bonus_figure);
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_SWITCH_STRATEGY:
-                        DBG_PRINT_EVENT("unhandled event");
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(load_opp_bonus_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        enable_my_square_walls(false);
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        //robot_trajectory_new(&tcSlow);
-                        robot_move_by(0.35, NO_TURN(), &tcSlow);
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(CLOSE);
-                        FSM_TRANSITION(place_opp_bonus_figure);
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_SWITCH_STRATEGY:
-                        DBG_PRINT_EVENT("unhandled event");
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(place_opp_bonus_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        robot_trajectory_new_backward(&tcSlow);
-                        robot_trajectory_add_point_trans(
-                                0.45 + 2*0.35 + 0.175,
-                                0.35 + 0.2);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 2*0.35 + 0.175,
-                                2*0.35 + 0.175 + ROBOT_AXIS_TO_FIGURE_CENTER_M,
-                                ARRIVE_FROM(DEG2RAD(90), 0.1));
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TRANSITION(leave_opp_bonus_figure);
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_SWITCH_STRATEGY:
-                        DBG_PRINT_EVENT("unhandled event");
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(leave_opp_bonus_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        robot_trajectory_new_backward(&tcSlow);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 2*0.35 + 0.175,
-                                5*0.35 + 0.1,
-                                NO_TURN());
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(CLOSE);
-                        SUBFSM_RET();
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_SWITCH_STRATEGY:
-                        DBG_PRINT_EVENT("unhandled event");
-                case EV_EXIT:
-                        break;
-        }
-}
-
-/** securely bypass firt figure in front of starting area */
-FSM_STATE(bypass_figure_in_front_of_start)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = false;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcFast);
+                       robot_trajectory_new(&tcSlow); // new trajectory
                        robot_trajectory_add_point_trans(
-                               0.45 + 0.3,
-                               PLAYGROUND_HEIGHT_M - (ROBOT_WIDTH_M/2));
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3,
-                               4*0.35,
-                               NO_TURN());
-                       break;
-               case EV_MOTION_DONE:
-                       SUBFSM_RET(NULL);
-                       break;
-               case EV_START:
-               case EV_TIMER:
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_SWITCH_STRATEGY:
-                       DBG_PRINT_EVENT("unhandled event");
-               case EV_EXIT:
-                       break;
-       }
-}
-
-/** pick second figure from green area */
-FSM_STATE(approach_second_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcFast);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3 - app_dist,
-                               0.29 + 0.28,
-                               TURN(DEG2RAD(180)));
-                       break;
-               case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TIMER(1000);
-                       break;
-               case EV_TIMER:
-                       FSM_TRANSITION(load_second_green_figure);
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(load_second_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new(&tcSlow);
-                       robot_trajectory_add_final_point_trans(
-                               ROBOT_AXIS_TO_FRONT_M + ROBOT_JAWS_LENGHT_M + load_dist,
-                               0.29 + 0.28,
-                               ARRIVE_FROM(DEG2RAD(180), 0.10));
-                       break;
-               case EV_MOTION_DONE:
-                       FSM_TIMER(1000);
-                       act_jaws(CLOSE);
-                       break;
-               case EV_TIMER:
-                       FSM_TRANSITION(go_out_second_green_figure);
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(go_out_second_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new_backward(&tcFast);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3,
-                               0.7,
-                               NO_TURN());
-                       break;
-               case EV_MOTION_DONE:
-                        if (read_sharp()) {
-                                FSM_TRANSITION(place_figure_to_bonus_area);
-                        } else {
-                                FSM_TRANSITION(place_figure_to_protected_block);
-                        }
-                        break;
-               case EV_TIMER:
-                       break;
-               case EV_START:
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(place_figure_to_protected_block)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcSlow);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.175,
-                               0.12 + 0.08 + ROBOT_AXIS_TO_FIGURE_CENTER_M,
-                               ARRIVE_FROM(DEG2RAD(-90), 0.20));
-                       break;
-               case EV_START:
-               case EV_TIMER:
-                       FSM_TRANSITION(leave_protected_figure);
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_DONE:
-                       act_jaws(OPEN);
-                       FSM_TIMER(1000);
-                       break;
-               case EV_MOTION_ERROR:
-               case EV_SWITCH_STRATEGY:
-                       DBG_PRINT_EVENT("unhandled event");
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(leave_protected_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new_backward(&tcFast);
+                               0.55,
+                               PLAYGROUND_HEIGHT_M - (ROBOT_WIDTH_M/2.0));
                        robot_trajectory_add_point_trans(
-                               0.45 + 0.175,
+                               0.64,
                                0.7);
                        robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3,
-                               0.29 + 2*0.28,
+                               1.0,
+                               0.45,
                                NO_TURN());
+//                     robot_trajectory_add_final_point_trans(
+//                             1.3,
+//                             0.58,
+//                             NO_TURN());
                        break;
-               case EV_START:
-               case EV_TIMER:
-                       break;
-               case EV_RETURN:
                case EV_MOTION_DONE:
-                       act_jaws(CLOSE);
-                        SUBFSM_RET(NULL);
-                       break;
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-/** pick third figure from green area */
-FSM_STATE(approach_third_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcFast);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3 - app_dist,
-                               0.29 + 2*0.28,
-                               TURN(DEG2RAD(180)));
-                       break;
-               case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TIMER(1000);
+                       FSM_TIMER(2000);
                        break;
                case EV_TIMER:
-                       FSM_TRANSITION(load_third_green_figure);
+                       FSM_TRANSITION(catch_central_buillon);
                        break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
+               default:
                        break;
        }
 }
 
-FSM_STATE(load_third_green_figure)
+FSM_STATE(catch_central_buillon)
 {
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new(&tcSlow);
+                       robot_trajectory_new(&tcSlow); // new trajectory
                        robot_trajectory_add_final_point_trans(
-                               ROBOT_AXIS_TO_FRONT_M + ROBOT_JAWS_LENGHT_M + load_dist,
-                               0.29 + 2*0.28,
-                               ARRIVE_FROM(DEG2RAD(180), 0.20));
-                       break;
-               case EV_MOTION_DONE:
-                        act_jaws(CLOSE);
-                       FSM_TIMER(1000);
-                       break;
-               case EV_TIMER:
-                       FSM_TRANSITION(go_out_third_green_figure);
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(go_out_third_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new_backward(&tcFast);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.35,
-                               0.29 + 2*0.28,
+                               1.3,
+                               0.58,
                                NO_TURN());
                        break;
                case EV_MOTION_DONE:
-                        if (bonus_placed)
-                                FSM_TRANSITION(place_figure_to_near_area);
-                        else
-                                FSM_TRANSITION(place_figure_to_bonus_area);
-                        break;
-               case EV_TIMER:
-                       break;
-               case EV_START:
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       robot.ignore_hokuyo = false;
-                       break;
-       }
-}
-
-FSM_STATE(place_figure_to_near_area)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = false;
-
-                        robot_trajectory_new(&tcFast);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 0.35 + 0.175,
-                                0.35 + 0.175 + ROBOT_AXIS_TO_FIGURE_CENTER_M,
-                                TURN(DEG2RAD(-90)));
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TIMER(1000);
-                        break;
-                case EV_TIMER:
-                        FSM_TRANSITION(leave_near_figure);
-                        break;
-                case EV_START:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(leave_near_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = false;
-
-                        robot_trajectory_new_backward(&tcFast);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 0.35 + 0.175,
-                                0.29 + 3*0.28,
-                                NO_TURN());
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(CLOSE);
-                        FSM_TIMER(1000);
-                        break;
-                case EV_TIMER:
-                        SUBFSM_RET(NULL);
-                        break;
-                case EV_START:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(place_figure_to_bonus_area)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcSlow);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.7 + 0.175,
-                               0.08 + ROBOT_AXIS_TO_FIGURE_CENTER_M,
-                               ARRIVE_FROM(DEG2RAD(-90), 0.3));
+                       FSM_TIMER(2000);
                        break;
-               case EV_START:
                case EV_TIMER:
-                       FSM_TRANSITION(leave_bonus_figure);
+                       FSM_TRANSITION(leave_central_buillon);
                        break;
-               case EV_RETURN:
-               case EV_MOTION_DONE:
-                        bonus_placed = true;
-                       act_jaws(OPEN);
-                       FSM_TIMER(1000);
-                       break;
-               case EV_MOTION_ERROR:
-               case EV_SWITCH_STRATEGY:
-                       DBG_PRINT_EVENT("unhandled event");
-               case EV_EXIT:
+               default:
                        break;
        }
 }
 
-FSM_STATE(leave_bonus_figure)
+FSM_STATE(leave_central_buillon)
 {
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new_backward(&tcFast);
+                       robot_trajectory_new_backward(&tcSlow); // new trajectory
                        robot_trajectory_add_final_point_trans(
-                               0.45 + 0.7 + 0.2,
-                               0.7,
+                               1.0,
+                               0.45,
                                NO_TURN());
                        break;
-               case EV_START:
-               case EV_TIMER:
-                       break;
-               case EV_RETURN:
                case EV_MOTION_DONE:
-                       act_jaws(CLOSE);
-                        act_lift(DOWN, 0, 0);
+                       enable_bumpers(false);
                        SUBFSM_RET(NULL);
                        break;
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
+               default:
                        break;
        }
 }
 
-/** pick fourth green figure from green area */
-FSM_STATE(approach_fourth_green_figure)
+FSM_STATE(push_bottle_bw)
 {
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new(&tcFast);
+                       robot_trajectory_new_backward(&tcSlow); // new trajectory
+                       robot_trajectory_add_point_trans(
+                               0.7,
+                               0.3);
                        robot_trajectory_add_final_point_trans(
-                               0.45 + 0.3 - app_dist,
-                               0.29 + 3*0.28,
-                               TURN(DEG2RAD(180)));
+                               0.64+0.08,
+                               ROBOT_AXIS_TO_BACK_M + 0.05,
+                               ARRIVE_FROM(DEG2RAD(270), 0.10));
                        break;
                case EV_MOTION_DONE:
-                        tower = read_sharp();
-                        act_jaws(OPEN);
-                        FSM_TIMER(1000);
-                       break;
-               case EV_TIMER:
-                       FSM_TRANSITION(load_fourth_green_figure);
+                       FSM_TRANSITION(return_home);
                        break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
+               default:
                        break;
        }
 }
 
-FSM_STATE(load_fourth_green_figure)
+FSM_STATE(return_home)
 {
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new(&tcSlow);
+                       robot_trajectory_new(&tcSlow); // new trajectory
+                       robot_trajectory_add_point_trans(
+                               0.64 + 0.08,
+                               0.7);
                        robot_trajectory_add_final_point_trans(
-                               ROBOT_AXIS_TO_FRONT_M + ROBOT_JAWS_LENGHT_M + load_dist,
-                               0.29 + 3*0.28,
-                               ARRIVE_FROM(DEG2RAD(180), 0.20));
+                               0.4,
+                               1.0,
+                               ARRIVE_FROM(DEG2RAD(180), 0.10));
                        break;
                case EV_MOTION_DONE:
-                       FSM_TIMER(1000);
-                       act_jaws(CLOSE);
+                       FSM_TIMER(2000);
                        break;
                case EV_TIMER:
-                       FSM_TRANSITION(go_out_fourth_green_figure);
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(go_out_fourth_green_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = true;
-
-                       robot_trajectory_new_backward(&tcFast);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.175,
-                               3*0.35 + 0.175,
-                               NO_TURN());
+                       FSM_TRANSITION(leave_home);
                        break;
-               case EV_MOTION_DONE:
-                        FSM_TRANSITION(place_figure_to_red_square);
-                        break;
-               case EV_TIMER:
-                        break;
-               case EV_START:
-               case EV_RETURN:
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
+               default:
                        break;
        }
 }
 
-FSM_STATE(place_figure_to_red_square)
+FSM_STATE(leave_home)
 {
        switch(FSM_EVENT) {
                case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-                       robot_trajectory_new(&tcSlow);
+                       robot_trajectory_new_backward(&tcSlow); // new trajectory
                        robot_trajectory_add_final_point_trans(
-                               0.45 + 0.175,
-                               0.7 + 0.15 + ROBOT_AXIS_TO_FIGURE_CENTER_M,
-                               ARRIVE_FROM(DEG2RAD(-90), 0.05));
+                               0.6,
+                               1.0,
+                               TURN_CCW(DEG2RAD(90)));
                        break;
-               case EV_START:
-               case EV_TIMER:
-                       FSM_TRANSITION(leave_red_square_figure);
-                       break;
-               case EV_RETURN:
                case EV_MOTION_DONE:
-                       act_jaws(OPEN);
-                       FSM_TIMER(1000);
-                       break;
-               case EV_MOTION_ERROR:
-               case EV_SWITCH_STRATEGY:
-                       DBG_PRINT_EVENT("unhandled event");
-               case EV_EXIT:
-                       break;
-       }
-}
-
-FSM_STATE(leave_red_square_figure)
-{
-       switch(FSM_EVENT) {
-               case EV_ENTRY:
-                       robot.use_left_bumper = true;
-                       robot.use_right_bumper = true;
-                       robot.use_back_bumpers = true;
-                       robot.ignore_hokuyo = false;
-
-                       robot_trajectory_new_backward(&tcFast);
-//                     robot_trajectory_add_point_trans(
-//                             0.45 + 0.175,
-//                             0.7 + 0.7);
-                       robot_trajectory_add_final_point_trans(
-                               0.45 + 0.175,
-                               0.7 + 0.7,
-                               NO_TURN());
+                       FSM_TIMER(2000);
                        break;
-               case EV_START:
                case EV_TIMER:
-                       break;
-               case EV_RETURN:
-               case EV_MOTION_DONE:
-                       act_jaws(CLOSE);
                        SUBFSM_RET(NULL);
                        break;
-               case EV_MOTION_ERROR:
-               case EV_EXIT:
+               default:
                        break;
        }
-}
-
-/** pick fifth green figure from green area */
-FSM_STATE(approach_fifth_green_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        robot_trajectory_new(&tcFast);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 0.3 - app_dist,
-                                0.29 + 4*0.28,
-                                TURN(DEG2RAD(180)));
-                        break;
-                case EV_MOTION_DONE:
-                        act_jaws(OPEN);
-                        FSM_TIMER(1000);
-                        break;
-                case EV_TIMER:
-                        FSM_TRANSITION(load_fifth_green_figure);
-                        break;
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(load_fifth_green_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        robot_trajectory_new(&tcSlow);
-                        robot_trajectory_add_final_point_trans(
-                                ROBOT_AXIS_TO_FRONT_M + ROBOT_JAWS_LENGHT_M + load_dist,
-                                0.29 + 4*0.28,
-                                ARRIVE_FROM(DEG2RAD(180), 0.20));
-                        break;
-                case EV_MOTION_DONE:
-                        FSM_TIMER(1000);
-                        act_jaws(CLOSE);
-                        break;
-                case EV_TIMER:
-                        FSM_TRANSITION(go_out_fifth_green_figure);
-                        break;
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(go_out_fifth_green_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = true;
-
-                        robot_trajectory_new_backward(&tcFast);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 2*0.35 + 0.175,
-                                4*0.35,
-                                NO_TURN());
-                        break;
-                case EV_MOTION_DONE:
-                        break;
-                case EV_TIMER:
-                        break;
-                case EV_START:
-                case EV_RETURN:
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-/** pick center figure */
-FSM_STATE(approach_center_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = false;
-                        robot.ignore_hokuyo = false;
-
-                        robot_trajectory_new(&tcVeryFast);
-                        robot_trajectory_add_point_trans(
-                              0.45 + 0.35,
-                              5*0.35 + 0.175);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 3*0.35,
-                                4*0.35 + 0.1,
-                                TURN(DEG2RAD(-90)));
-                        FSM_TIMER(2000);
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                        robot.use_back_bumpers = true;
-                        break;
-                case EV_RETURN:
-                case EV_MOTION_DONE:
-                        FSM_TRANSITION(load_center_figure);
-                        break;
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
-}
-
-FSM_STATE(load_center_figure)
-{
-        switch(FSM_EVENT) {
-                case EV_ENTRY:
-                        act_jaws(OPEN);
-                        robot.use_left_bumper = true;
-                        robot.use_right_bumper = true;
-                        robot.use_back_bumpers = true;
-                        robot.ignore_hokuyo = false;
-
-                        robot_trajectory_new(&tcFast);
-                        robot_trajectory_add_final_point_trans(
-                                0.45 + 3*0.35,
-                                3*0.35 + 0.1,
-                                ARRIVE_FROM(DEG2RAD(-90), 0.1));
-                        break;
-                case EV_START:
-                case EV_TIMER:
-                        break;
-                case EV_RETURN:
-                case EV_MOTION_DONE:
-                        act_jaws(CLOSE);
-                        FSM_TRANSITION(place_figure_to_bonus_area);
-                        break;
-                case EV_MOTION_ERROR:
-                case EV_EXIT:
-                        break;
-        }
 }
\ No newline at end of file
index a4c916c76ac8ba18865e533111097526c9318e3a..8be60eb57847d8b4278cc786dfacbbefbcc1ce19 100644 (file)
@@ -7,61 +7,42 @@
 #include <fsm.h>
 
 extern struct TrajectoryConstraints tcFast, tcVeryFast, tcSlow, tcVerySlow;
-extern bool build_tower, tower, bonus_placed;
 
 /* strategy FSM */
-FSM_STATE_DECL(start_pick_all_our_figures);
-FSM_STATE_DECL(start_pick_two_our_figures);
-FSM_STATE_DECL(start_pick_third_figure);
-FSM_STATE_DECL(start_pick_fourth_figure);
-FSM_STATE_DECL(start_pick_center_figure);
-
-/* common FSM states */
-FSM_STATE_DECL(bypass_figure_in_front_of_start);
-FSM_STATE_DECL(move_around);
-FSM_STATE_DECL(place_figure_to_near_area);
-FSM_STATE_DECL(leave_near_figure);
-
-/* pick opponent bonus figure states */
-FSM_STATE_DECL(approach_opp_bonus_figure);
-FSM_STATE_DECL(load_opp_bonus_figure);
-FSM_STATE_DECL(place_opp_bonus_figure);
-FSM_STATE_DECL(leave_opp_bonus_figure);
-
-/* pick second green figure FSM */
-FSM_STATE_DECL(approach_second_green_figure);
-FSM_STATE_DECL(load_second_green_figure);
-FSM_STATE_DECL(go_out_second_green_figure);
-FSM_STATE_DECL(place_figure_to_protected_block);
-FSM_STATE_DECL(leave_protected_figure);
-
-/* pick third green figure FSM */
-FSM_STATE_DECL(approach_third_green_figure);
-FSM_STATE_DECL(load_third_green_figure);
-FSM_STATE_DECL(go_out_third_green_figure);
-FSM_STATE_DECL(place_figure_to_bonus_area);
-FSM_STATE_DECL(leave_bonus_figure);
-
-/* pick fourth green figure FSM */
-FSM_STATE_DECL(approach_fourth_green_figure);
-FSM_STATE_DECL(load_fourth_green_figure);
-FSM_STATE_DECL(go_out_fourth_green_figure);
-FSM_STATE_DECL(place_figure_to_red_square);
-FSM_STATE_DECL(leave_red_square_figure);
-
-/* pick fifth green figure FSM */
-FSM_STATE_DECL(approach_fifth_green_figure);
-FSM_STATE_DECL(load_fifth_green_figure);
-FSM_STATE_DECL(go_out_fifth_green_figure);
-
-/* pick center figure FSM */
-FSM_STATE_DECL(approach_center_figure);
-FSM_STATE_DECL(load_center_figure);
-
+FSM_STATE_DECL(get_central_buillon_first);
+FSM_STATE_DECL(ignore_central_buillon);
+//FSM_STATE_DECL(calibrate);
+
+/* Strategy catch buillon in center */
+FSM_STATE_DECL(approach_central_buillon);
+FSM_STATE_DECL(catch_central_buillon);
+FSM_STATE_DECL(leave_central_buillon);
+FSM_STATE_DECL(push_bottle_bw);
+FSM_STATE_DECL(return_home);
+FSM_STATE_DECL(leave_home);
+
+/* Ignore central buillon */
+//FSM_STATE_DECL(push_nearest_buillon);
+//FSM_STATE_DECL(push_bottle_fw);
+
+/* Common states */
+/*FSM_STATE_DECL(approach_totem_down);
+FSM_STATE_DECL(catch_down_totem_buillon);
+FSM_STATE_DECL(leave_totem_down);
+FSM_STATE_DECL(place_down_buillon);
+FSM_STATE_DECL(approach_totem_up);
+FSM_STATE_DECL(catch_up_totem_buillon);
+FSM_STATE_DECL(leave_totem_up);
+FSM_STATE_DECL(place_up_buillon);
+
+FSM_STATE_DECL(push_second_bottle);
+*/
 void start_entry();
 void start_timer();
 void start_go();
 void start_exit();
 bool read_sharp();
 
+
+
 #endif