rectangle.cc

00001 #define FSM_MAIN
00002 #include "fsmmove.h"
00003 #include "movehelper.h"
00004 #include "robot.h"
00005 #include "trgen.h"
00006 
00007 FSM_STATE_DECL(rectangle);
00008 FSM_STATE_DECL(turn);
00009 FSM_STATE_DECL(wait);
00010 
00011 FSM_STATE(main_init) {
00012         // Where we are at the begining?
00013         robot.act_pos.x = 1;
00014         robot.act_pos.y = 0.5;
00015         robot.act_pos.phi = M_PI/2;
00016         FSM_TRANSITION(rectangle);
00017 }
00018 
00019 
00020 void follow_rectangle()
00021 {
00022         static bool backward = false;
00023         struct TrajectoryConstraints tc = trajectoryConstraintsDefault;
00024         //tc.maxv *= 1.5;
00025 
00026         // Allocate new trajectory
00027         if (!backward)
00028                 robot_trajectory_new(&tc);
00029         else
00030                 robot_trajectory_new_backward(&tc);
00031         backward = !backward;
00032 
00033         // Add random point to the trajectory.
00034         robot_trajectory_add_point(2, 0.5);
00035         robot_trajectory_add_point(2, 1.5);
00036         robot_trajectory_add_point(1, 1.5);
00037         robot_trajectory_add_final_point(1, 0.5, 90);
00038 }
00039 
00040 FSM_STATE(rectangle)
00041 {
00042         switch (FSM_EVENT) {
00043                 case EV_STATE_ENTERED:
00044                         follow_rectangle();
00045                         break;
00046                 case EV_TRAJECTORY_ERROR:
00047                         FSM_TRANSITION(turn);
00048                         break;
00049                 case EV_MOTION_DONE:
00050                         FSM_TRANSITION(turn);
00051                         break;
00052                 default:
00053                         break;
00054         }
00055 }
00056 
00057 FSM_STATE(turn)
00058 {
00059         switch (FSM_EVENT) {
00060                 case EV_STATE_ENTERED:
00061                         robot_trajectory_new(NULL);
00062                         robot_trajectory_add_final_point(1, 0.5, -90);
00063                         break;
00064                 case EV_TRAJECTORY_ERROR:
00065                         FSM_TRANSITION(wait);
00066                         break;
00067                 case EV_MOTION_DONE:
00068                         FSM_TRANSITION(wait);
00069                         break;
00070                 default:
00071                         break;
00072         }
00073 }
00074 
00075 
00076 FSM_STATE(wait)
00077 {
00078         FSM_TIMER(1000);
00079         switch (FSM_EVENT) {
00080                 case EV_TIMER:
00081                         FSM_TRANSITION(rectangle);
00082                         break;
00083                 default:
00084                         break;
00085         }
00086 }
00087 
00088 int main()
00089 {
00090         /* robot initialization */
00091         robot_init();
00092 
00093         FSM(MAIN)->debug_states = 1;
00094 //      FSM(MOVE)->debug_states = 1;
00095 
00096         robot.fsm[FSM_ID_MAIN].state = &fsm_state_main_init;
00097         robot.fsm[FSM_ID_MOTION].state = &fsm_state_move_init;
00098 
00099         /* Start threads and wait */
00100         robot_start();
00101         robot_wait();
00102 
00103         /* clean up */
00104         robot_destroy();
00105 
00106         return 0;
00107 }

Generated on Thu Sep 13 11:28:28 2007 for DCE-Eurobot by  doxygen 1.5.3