testmove.cc

00001 #include "robot.h"
00002 #include "robofsm.h"
00003 #include "movefsm.h"
00004 #include "trgen.h"
00005 #include <orte.h>
00006 
00007 static int wait_move(struct robo_fsm *fsm, int ret);
00008 static int go2(struct robo_fsm *fsm, int ret);
00009 static int go1(struct robo_fsm *fsm, int ret); 
00010 static int test_move(struct robo_fsm *fsm, int ret);
00011 
00012 static int wait_move(struct robo_fsm *fsm, int ret) 
00013 {
00014         DBG_STATE();
00015         switch (fsm->event) {
00016                 case EV_TRAJECTORY_DONE:
00017                         DBG("Trajectory done\n");
00018                         FSM_TIMEOUT(3000);
00019                         return RC_WAIT;
00020                         break;
00021                 case EV_TRAJECTORY_DONE_AND_CLOSE:
00022                         DBG("Trajectory done and close\n");
00023                         FSM_TIMEOUT(3000);
00024                         return RC_WAIT;
00025                         break;
00026                 case EV_TRAJECTORY_LOST:
00027                         DBG("Trajectory lost\n");
00028                         FSM_TIMEOUT(3000);
00029                         return RC_WAIT;
00030                         break;
00031                 case EV_TIMEOUT:
00032                         DBG("Timeout\n");
00033                         FRET();
00034                         return RC_PROC;
00035                         break;
00036                 default:
00037                         break;
00038         }
00039         return RC_WAIT;
00040 }
00041 
00042 #define SPEED_RATIO 3
00043 
00044 static int go2(struct robo_fsm *fsm, int ret) 
00045 {
00046         DBG_STATE();
00047         struct TrajectoryConstraints tc = trajectoryConstraintsDefault;
00048         tc.maxv /= SPEED_RATIO;
00049         tc.maxomega /= SPEED_RATIO;
00050         tc.maxacc /= SPEED_RATIO;
00051         robot_trajectory_new(&tc, -180);
00052         robot_trajectory_add_point(0.5, 0);
00053         robot_trajectory_add_point(0.5, 0.5);
00054         robot_trajectory_add_point(0, 0.5);
00055         robot_trajectory_add_point(0, 0);
00056         fsm_signal(FSM(MOT), EV_NEW_TRAJECTORY);
00057         FCALL2(wait_move, go1);
00058         return RC_WAIT;
00059 }
00060 
00061 static int go1(struct robo_fsm *fsm, int ret) 
00062 {
00063         struct TrajectoryConstraints tc = trajectoryConstraintsDefault;
00064         tc.maxv /= SPEED_RATIO;
00065         tc.maxomega /= SPEED_RATIO;
00066         tc.maxacc /= SPEED_RATIO;
00067         DBG_STATE();
00068         robot_trajectory_new(&tc, 180);
00069         robot_trajectory_add_point(0, 0.5);
00070         robot_trajectory_add_point(0.5, 0.5);
00071         robot_trajectory_add_point(0.5, 0);
00072         robot_trajectory_add_point(0, 0);
00073         //robot_trajectory_add_point(1, 1);
00074         fsm_signal(FSM(MOT), EV_NEW_TRAJECTORY);
00075         FCALL2(wait_move, go2);
00076         return RC_WAIT;
00077 }
00078 
00079 static int test_move(struct robo_fsm *fsm, int ret) 
00080 {
00081         DBG_STATE();
00082         switch (fsm->event) {
00083                 case EV_INIT:
00084                         FSM_TIMEOUT(500);
00085                         return RC_WAIT;
00086                 case EV_TIMEOUT:
00087                         FNEXT(go1);
00088                         return RC_PROC;
00089                 default:
00090                         break;
00091         }
00092         return RC_WAIT;
00093 }
00094    
00095 int main() 
00096 {
00097         /* robot initialization */
00098         robot_init();
00099 
00100         //ORTEVerbositySetOptions("ALL,5");
00101 
00102         FSM(MAIN)->fnc_act = test_move;
00103         FSM(MAIN)->debug_events = 1;
00104         FSM(MOT)->fnc_act = fsm_move_init;
00105         FSM(MOT)->debug_events = 1;
00106 
00107         robot_start();
00108 
00109 //      int i;
00110 //      for (i=-20; i<20; i+=3) {
00111 //              double s = (double)i/100;
00112 //              printf("%g\n", s);
00113 //              send_speed(s, -s);
00114 //              sleep(1);
00115 //      }
00116         
00117 //      send_speed(0, 0);
00118     
00119         robot_wait();
00120         robot_destroy();
00121 
00122         return 0;
00123 }

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