line.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 = 0;
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                 robot_trajectory_add_final_point(2, 0.5, 0);
00030         } else {
00031                 robot_trajectory_new_backward(&tc);
00032                 robot_trajectory_add_final_point(1, 0.5, 180);
00033         }
00034         backward = !backward;
00035 }
00036 
00037 FSM_STATE(rectangle)
00038 {
00039         switch (FSM_EVENT) {
00040                 case EV_STATE_ENTERED:
00041                         follow_rectangle();
00042                         break;
00043                 case EV_TRAJECTORY_ERROR:
00044                         FSM_TRANSITION(wait);
00045                         break;
00046                 case EV_MOTION_DONE:
00047                         FSM_TRANSITION(wait);
00048                         break;
00049                 default:
00050                         break;
00051         }
00052 }
00053 
00054 FSM_STATE(turn)
00055 {
00056         switch (FSM_EVENT) {
00057                 case EV_STATE_ENTERED:
00058                         robot_trajectory_new(NULL);
00059                         robot_trajectory_add_final_point(1, 0.5, -90);
00060                         break;
00061                 case EV_TRAJECTORY_ERROR:
00062                         FSM_TRANSITION(wait);
00063                         break;
00064                 case EV_MOTION_DONE:
00065                         FSM_TRANSITION(wait);
00066                         break;
00067                 default:
00068                         break;
00069         }
00070 }
00071 
00072 
00073 FSM_STATE(wait)
00074 {
00075         FSM_TIMER(1000);
00076         switch (FSM_EVENT) {
00077                 case EV_TIMER:
00078                         FSM_TRANSITION(rectangle);
00079                         break;
00080                 default:
00081                         break;
00082         }
00083 }
00084 
00085 int main()
00086 {
00087         /* robot initialization */
00088         robot_init();
00089 
00090         FSM(MAIN)->debug_states = 1;
00091 //      FSM(MOVE)->debug_states = 1;
00092 
00093         robot.fsm[FSM_ID_MAIN].state = &fsm_state_main_init;
00094         robot.fsm[FSM_ID_MOTION].state = &fsm_state_move_init;
00095 
00096         /* Start threads and wait */
00097         robot_start();
00098         robot_wait();
00099 
00100         /* clean up */
00101         robot_destroy();
00102 
00103         return 0;
00104 }

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