Robot's source code
Dependencies: mbed
main.cpp
- Committer:
- Near32
- Date:
- 2015-04-30
- Revision:
- 95:33520ead3b94
- Parent:
- 92:b403f2724252
File content as of revision 95:33520ead3b94:
#include "mbed.h" #define PLAN_A //#define OUT_USB #include "defines.h" #include "QEI.h" #include "Map.h" #include "AX12.h" #ifdef PLAN_A #include "Odometry.h" #include "Asserv.h" #else #include "Odometry2.h" #include "planB.h" #endif #include "Motor.h" /*----------------------------------------------------------------------------------------------*/ /*Serial*/ //Serial logger(OUT_TX, OUT_RX); // tx, rx Serial logger(USBTX,USBRX); //logger.baud((int)115200); /*----------------------------------------------------------------------------------------------*/ /* --- Initialisation de la liste des obstable --- */ int Obstacle::lastId = 0; int main() { logger.printf("Initialisation...\r\n"); AX12 test(AX12_TX,AX12_RX,5,250000); test.setMode(0); PwmOut pw1(PWM_MOT1); DigitalOut dir1(DIR_MOT1); PwmOut pw2(PWM_MOT2); DigitalOut dir2(DIR_MOT2); Motor motorL(PWM_MOT1,DIR_MOT1); Motor motorR(PWM_MOT2,DIR_MOT2); Timer t; //AX12 test(PA_9,NC,0x03,250000); AnalogIn ain0(PA_0); AnalogIn ain1(PA_1); AnalogIn ain2(PA_4); AnalogIn ain3(PB_0); AnalogIn ain4(PC_1); /*----------------------------------------------------------------------------------------------*/ /*Odometry*/ #ifdef PLAN_A QEI qei_right(PB_3,PA_10,NC,1024*4,QEI::X4_ENCODING); QEI qei_left(PB_4,PB_5,NC,1024*4,QEI::X4_ENCODING); Odometry odometry(&qei_left,&qei_right,63/2.,63/2.,255); odometry.setTheta(0); odometry.setX(0); odometry.setY(0); #else QEI qei_left(ODO_G_A,ODO_G_B,NC,1024*4,QEI::X4_ENCODING); QEI qei_right(ODO_D_A,ODO_D_B,NC,1024*4,QEI::X4_ENCODING); Odometry2 odometry(&qei_left,&qei_right,63/2.,63/2.,255); odometry.setTheta(PI/2); odometry.setX(0); odometry.setY(0); #endif DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); bool testOdo = false; #ifdef PLAN_A Asserv<float> instanceAsserv(&odometry); //instanceAsserv.setGoal((float)0.0,(float)0.0,(float)0); instanceAsserv.setGoal((float)0.0f,(float)0.0f,(float)0.0f); logger.printf("GOAL SET... RUNNING!\r\n"); char state = 0; t.start(); t.reset(); while(!testOdo) { float dt = t.read(); t.reset(); t.start(); odometry.update(dt); instanceAsserv.update(dt); float phi_r = (float)instanceAsserv.getPhiR(); float phi_l = (float)instanceAsserv.getPhiL(); float phi_max = (float)instanceAsserv.getPhiMax(); logger.printf("STATE = %d \r\n", state); motorR.setSpeed( (phi_r > (float)0? (float)+0.08f : (float)-0.08f) +(phi_r/phi_max)); motorL.setSpeed( (phi_l > (float)0? (float)+0.08f : (float)-0.08f) +(phi_l/phi_max)); #define test #ifdef test if(state == 0 && instanceAsserv.isArrivedRho()) { state = 1; logger.printf("Arrive en 0,0 !!!!!\r\n"); motorR.setSpeed( (float)0); motorL.setSpeed( (float)0); wait(5); instanceAsserv.setGoal((float)300.0f,(float)0.0f,(float)0.0f); } else if(state == 1 && instanceAsserv.isArrivedRho()) { state = 2; logger.printf("Arrive en 200,0 !!!!!\r\n"); motorR.setSpeed( (float)0); motorL.setSpeed( (float)0); wait(5); instanceAsserv.setGoal((float)200.0f,(float)200.0f,(float)0.0f); } else if(state == 2 && instanceAsserv.isArrivedRho()) { state = 3; logger.printf("Arrive en 200,200 !!!!!\r\n"); motorR.setSpeed( (float)0); motorL.setSpeed( (float)0); wait(5); instanceAsserv.setGoal((float)0.0f,(float)200.0f,(float)0.0f); } else if(state == 3 && instanceAsserv.isArrivedRho()) { state = 0; logger.printf("Arrive en 0,200 !!!!!\r\n"); motorR.setSpeed( (float)0); motorL.setSpeed( (float)0); wait(5); instanceAsserv.setGoal((float)0.0f,(float)0.0f,(float)0.0f); } #endif } #else aserv_planB asserv(odometry,motorL,motorR); asserv.setGoal(45,45,0); t.start(); t.reset(); while(!testOdo) { //Parametrage des coef par bluetooth /*while(logger.readable()) { char c = logger.getc(); if(c=='a') asserv.Kd += 0.001; else if(c=='z') asserv.Kd -= 0.001; logger.printf("%f\n\r",asserv.Kd); }*/ //Asservissement : float dt = t.read(); t.reset(); odometry.update(dt); asserv.update(dt); wait_ms(10); } #endif }