Robot secondaire
Dependencies: RoboClaw mbed StepperMotor
Fork of RoboClaw by
main.cpp
- Committer:
- IceTeam
- Date:
- 2016-04-05
- Revision:
- 39:309f38d1e49c
- Parent:
- 37:da3a2c781672
- Child:
- 41:b5a2fbc20beb
File content as of revision 39:309f38d1e49c:
#include "Odometry/Odometry.h" #include "Map/Map.h" #define dt 10000 #define ATTENTE 0 #define GO 1 #define STOP 2 InterruptIn mybutton(USER_BUTTON); DigitalIn button(USER_BUTTON); DigitalOut led(LED1); Ticker ticker; //Serial pc(USBTX, USBRX); Serial logger (PA_9, PA_10); RoboClaw roboclaw(460800, PA_11, PA_12); Odometry odo(61.7, 61.8, ENTRAXE, 4096, roboclaw); int i = 0; void update_main(void); void init(void); void pressed(void); void unpressed(void); /** Debut du programme */ int main(void) { init(); /* Code AStar */ double angle_v = 2*PI/5; double distance_v = 200.0; std::vector<SimplePoint> path; Map map; //Construction des obstacles map.build(); float x=odo.getX(); float y=odo.getY(); float the = 0; map.AStar(x, y, 1600, 1000, 75); path = map.path; for(int i=0; i<path.size();i++) { the = (float) atan2((double) (path[i].y - odo.getY()), (double) (path[i].x - odo.getX())); odo.GotoXYT(path[i].x, path[i].y, the); } map.AStar(odo.getX(), odo.getY(), 0, 1000, 75); path = map.path; for(int i=0; i<path.size();i++) { the = (float) atan2((double) (path[i].y - odo.getY()), (double) (path[i].x - odo.getX())); odo.GotoXYT(path[i].x, path[i].y, the); } //odo.GotoThet(PI); odo.GotoThet(0); //odo.TestEntraxe(3); //odo.GotoThet(-PI/2); wait(2000); //odo.GotoXYT(2250,500,0); //odo.TestEntraxe(5); //odo.Forward(1000); /* Code JPO : roboclaw.ForwardM1(ADR, 0); roboclaw.ForwardM2(ADR, 0); int state = 0; while(1) { // while(logger.readable()) //{ char c = logger.getc(); if(c=='z') { if (state != 1) { state = 1; logger.printf("Avant (Z) \r\n"); roboclaw.SpeedAccelM1(ADR, accel_angle, vitesse_angle); roboclaw.SpeedAccelM2(ADR, accel_angle, vitesse_angle); } } else if(c == 's') { if (state != 2) { state = 2; logger.printf("Stop (S) \r\n"); roboclaw.ForwardM1(ADR, 0); roboclaw.ForwardM2(ADR, 0); } } else if(c == 'd') { if (state != 3) { state = 3; logger.printf("Droite (D) \r\n"); roboclaw.SpeedAccelM1(ADR, accel_angle, vitesse_angle); roboclaw.SpeedAccelM2(ADR, accel_angle, -vitesse_angle); } } else if(c == 'q') { if (state != 4) { state = 4; logger.printf("Gauche (Q)\r\n"); roboclaw.SpeedAccelM1(ADR, accel_angle, -vitesse_angle); roboclaw.SpeedAccelM2(ADR, accel_angle, vitesse_angle); } } else if(c == 'x') { if (state != 5) { state = 5; roboclaw.SpeedAccelM1M2(ADR, accel_angle, -vitesse_angle, accel_angle, -vitesse_angle); } } else if (c == '\0') { ; } else { if (state != 0) { roboclaw.SpeedAccelM1M2(ADR, accel_angle, 0, accel_angle, 0); state = 0; } } // } // roboclaw.ForwardM1(ADR, 0); // roboclaw.ForwardM2(ADR, 0); }*/ } void init(void) { roboclaw.ForwardM1(ADR, 0); roboclaw.ForwardM2(ADR, 0); logger.baud(9600); logger.printf("Hello from main !\n\r"); wait_ms(500); odo.setPos(0, 1000, 0); while(button); wait(1); mybutton.fall(&pressed); mybutton.rise(&unpressed); ticker.attach_us(&update_main,dt); // 100 Hz logger.printf("End init\n\r"); } void update_main(void) { odo.update_odo(); //pc.printf("X : %3.2f\tY : %3.2f\tTheta : %3.2f\n\r", odo.getX(), odo.getY(), odo.getTheta()*180/PI); //if(pc.readable()) if(pc.getc()=='l') led = !led; } void pressed(void) { if(i==0) { roboclaw.ForwardM1(ADR, 0); roboclaw.ForwardM2(ADR, 0); //pc.printf("X : %3.2f\tY : %3.2f\tTheta : %3.2f\n\r", odo.getX(), odo.getY(), odo.getTheta()*180/PI); i++; } } void unpressed(void) { if(i==1) { i--; } }