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

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