2015_robocon_bteam / Mbed 2 deprecated 2015robot_main_zenkoku

Dependencies:   PID QEI mbed

Committer:
DeguNaoto
Date:
Sun Nov 08 04:26:26 2015 +0000
Revision:
24:6d2573d6f2b6
Parent:
23:26f9483439fe
Child:
25:e72246ed7ec7
Child:
26:760f1bce8214
20151108 ???????main_ps3.cpp????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DeguNaoto 0:b613dc16f27d 1 #ifndef AUTOMODE_H
DeguNaoto 0:b613dc16f27d 2 #define AUTOMODE_H
DeguNaoto 0:b613dc16f27d 3
DeguNaoto 0:b613dc16f27d 4 /***PID Controller***/
DeguNaoto 0:b613dc16f27d 5 //PID velocity_controller(36.0,5274.0 ,0.0,RATE);
DeguNaoto 0:b613dc16f27d 6 //PID direction_controller(36.0,3.0,0.0,RATE);
DeguNaoto 0:b613dc16f27d 7 PID velocity_controller(9.0,5274.0,0.0,RATE);
DeguNaoto 0:b613dc16f27d 8 PID direction_controller(36.0,3.0,0.0,RATE);
DeguNaoto 0:b613dc16f27d 9
DeguNaoto 0:b613dc16f27d 10 Timeout OpStart;
DeguNaoto 0:b613dc16f27d 11
DeguNaoto 0:b613dc16f27d 12 void OpponentsStart(){
DeguNaoto 0:b613dc16f27d 13 spcount = 0.0;
DeguNaoto 0:b613dc16f27d 14 step = 15;
DeguNaoto 0:b613dc16f27d 15 CStep = 15;
DeguNaoto 0:b613dc16f27d 16 flaga = 1;
DeguNaoto 0:b613dc16f27d 17 flagf = 1;
DeguNaoto 0:b613dc16f27d 18 }
DeguNaoto 0:b613dc16f27d 19
DeguNaoto 0:b613dc16f27d 20 /***IM920 correspondence***/
DeguNaoto 0:b613dc16f27d 21 void autoIM920() {
DeguNaoto 0:b613dc16f27d 22 if(b==7){ /*mode change*/
DeguNaoto 0:b613dc16f27d 23 if(edge7) {
DeguNaoto 3:8d8c25c556ae 24 Com.detach();
DeguNaoto 0:b613dc16f27d 25 edge7=0;
DeguNaoto 0:b613dc16f27d 26 autoflag=0;
DeguNaoto 0:b613dc16f27d 27 Indicator4=0;
DeguNaoto 0:b613dc16f27d 28 IndicatorAuto=1;
DeguNaoto 6:ca3a74a93ae2 29 direction_controller.setTunings(12.0,9.0,0.0);
DeguNaoto 0:b613dc16f27d 30 flaga=0;
DeguNaoto 0:b613dc16f27d 31 Move_l(0.0);
DeguNaoto 0:b613dc16f27d 32 Move_r(0.0);
DeguNaoto 17:726b6f53a457 33 wait(0.1);
DeguNaoto 24:6d2573d6f2b6 34 mCom.attach(&mCall,RATE);
DeguNaoto 0:b613dc16f27d 35 }
DeguNaoto 0:b613dc16f27d 36 }
DeguNaoto 0:b613dc16f27d 37 else if((b==6)&&(!flaga)){ /*start*/
DeguNaoto 0:b613dc16f27d 38 if(edge6){
DeguNaoto 0:b613dc16f27d 39 edge6=0;
DeguNaoto 0:b613dc16f27d 40 resetState();
DeguNaoto 0:b613dc16f27d 41 flagf=1;
DeguNaoto 0:b613dc16f27d 42 spcount=0.0;
DeguNaoto 2:738b28f6a04b 43 direction_controller.setBias(0.0);
DeguNaoto 0:b613dc16f27d 44 // targ_velocity=speed;
DeguNaoto 0:b613dc16f27d 45 #ifdef BLUE
DeguNaoto 17:726b6f53a457 46 sendData(5,69); //right
DeguNaoto 0:b613dc16f27d 47 wait(0.05);
DeguNaoto 0:b613dc16f27d 48 sendData(4,69); //left
DeguNaoto 17:726b6f53a457 49 wait(0.05);
DeguNaoto 17:726b6f53a457 50 sendData(6,59); //middle
DeguNaoto 0:b613dc16f27d 51 stateR = 69;
DeguNaoto 0:b613dc16f27d 52 stateL = 69;
DeguNaoto 0:b613dc16f27d 53 #else
DeguNaoto 0:b613dc16f27d 54 sendData(5,69); //right
DeguNaoto 0:b613dc16f27d 55 wait(0.05);
DeguNaoto 0:b613dc16f27d 56 sendData(4,69); //left
DeguNaoto 17:726b6f53a457 57 wait(0.05);
DeguNaoto 17:726b6f53a457 58 sendData(6,59); //middle
DeguNaoto 0:b613dc16f27d 59 stateR = 69;
DeguNaoto 0:b613dc16f27d 60 stateL = 69;
DeguNaoto 0:b613dc16f27d 61 #endif
DeguNaoto 0:b613dc16f27d 62 step = 0;
DeguNaoto 0:b613dc16f27d 63 CStep = 1;
DeguNaoto 0:b613dc16f27d 64 flaga = 1;
DeguNaoto 0:b613dc16f27d 65 }
DeguNaoto 0:b613dc16f27d 66 }
DeguNaoto 21:bdf8ac5c200c 67 /*if(a2){
DeguNaoto 0:b613dc16f27d 68 skip = 1;
DeguNaoto 0:b613dc16f27d 69 }
DeguNaoto 0:b613dc16f27d 70 else if(!a2){
DeguNaoto 0:b613dc16f27d 71 skip = 0;
DeguNaoto 21:bdf8ac5c200c 72 }*/
DeguNaoto 21:bdf8ac5c200c 73 skip=0;
DeguNaoto 0:b613dc16f27d 74 if(b!=1) edge1=1;
DeguNaoto 0:b613dc16f27d 75 if(b!=2) edge2=1;
DeguNaoto 0:b613dc16f27d 76 if(b!=3) edge3=1;
DeguNaoto 0:b613dc16f27d 77 if(b!=4) edge4=1;
DeguNaoto 0:b613dc16f27d 78 if(b!=5) edge5=1;
DeguNaoto 0:b613dc16f27d 79 if(b!=6) edge6=1;
DeguNaoto 0:b613dc16f27d 80 if(b!=7) edge7=1;
DeguNaoto 0:b613dc16f27d 81 if(b!=8) edge8=1;
DeguNaoto 0:b613dc16f27d 82 if(b!=9) edge9=1;
DeguNaoto 0:b613dc16f27d 83 }
DeguNaoto 0:b613dc16f27d 84 /***The function is PID controller initialize.***/
DeguNaoto 0:b613dc16f27d 85 inline void initializeControllers()
DeguNaoto 0:b613dc16f27d 86 {
DeguNaoto 0:b613dc16f27d 87 velocity_controller.setInputLimits(-20000.0, 20000.0); //x1
DeguNaoto 6:ca3a74a93ae2 88 // velocity_controller.setInputLimits(-1500.0, 1500.0); //x1
DeguNaoto 2:738b28f6a04b 89 direction_controller.setInputLimits(-PI, PI); //x2
DeguNaoto 0:b613dc16f27d 90
DeguNaoto 0:b613dc16f27d 91 //Pwm output from MOVE_OUTPUT_LIMIT_BOTTOM to MOVE_OUTPUT_LIMIT_TOP
DeguNaoto 0:b613dc16f27d 92 velocity_controller.setOutputLimits(0.0, 1.0);
DeguNaoto 0:b613dc16f27d 93 direction_controller.setOutputLimits(-1.0, 1.0);
DeguNaoto 0:b613dc16f27d 94
DeguNaoto 0:b613dc16f27d 95 //set bias. 初期値
DeguNaoto 0:b613dc16f27d 96 velocity_controller.setBias(0.0);
DeguNaoto 0:b613dc16f27d 97 direction_controller.setBias(0.0);
DeguNaoto 0:b613dc16f27d 98
DeguNaoto 0:b613dc16f27d 99 //set mode.
DeguNaoto 0:b613dc16f27d 100 velocity_controller.setMode(AUTO_MODE);
DeguNaoto 0:b613dc16f27d 101 direction_controller.setMode(AUTO_MODE);
DeguNaoto 0:b613dc16f27d 102 }
DeguNaoto 0:b613dc16f27d 103
DeguNaoto 0:b613dc16f27d 104 /***The function is following move speed.***/
DeguNaoto 0:b613dc16f27d 105 inline void velocity_following()
DeguNaoto 0:b613dc16f27d 106 {
DeguNaoto 0:b613dc16f27d 107 velocity_controller.setSetPoint((float)targ_velocity);
DeguNaoto 0:b613dc16f27d 108 velocity_controller.setProcessValue((float)velocity);
DeguNaoto 0:b613dc16f27d 109 x1 = (double)velocity_controller.compute();
DeguNaoto 0:b613dc16f27d 110 }
DeguNaoto 0:b613dc16f27d 111
DeguNaoto 0:b613dc16f27d 112 inline void sita_following()
DeguNaoto 0:b613dc16f27d 113 {
DeguNaoto 0:b613dc16f27d 114 direction_controller.setSetPoint((float)targ_sita);
DeguNaoto 0:b613dc16f27d 115 direction_controller.setProcessValue((float)sita);
DeguNaoto 0:b613dc16f27d 116 x2 = (double)direction_controller.compute();
DeguNaoto 0:b613dc16f27d 117 }
DeguNaoto 0:b613dc16f27d 118
DeguNaoto 0:b613dc16f27d 119 inline void move_following()
DeguNaoto 0:b613dc16f27d 120 {
DeguNaoto 0:b613dc16f27d 121 velocity_following();
DeguNaoto 0:b613dc16f27d 122 sita_following();
DeguNaoto 0:b613dc16f27d 123
DeguNaoto 0:b613dc16f27d 124 if(flagf==0){
DeguNaoto 2:738b28f6a04b 125 // Vr = ( 2.0*(-x1) + x2 ) / 3.0;
DeguNaoto 2:738b28f6a04b 126 // Vl = ( 2.0*(-x1) - x2 ) / 3.0;
DeguNaoto 3:8d8c25c556ae 127 /*if(x2>0.0){
DeguNaoto 2:738b28f6a04b 128 Vr = -x1;
DeguNaoto 2:738b28f6a04b 129 Vl = -x1 - x2;
DeguNaoto 2:738b28f6a04b 130 }
DeguNaoto 2:738b28f6a04b 131 else{
DeguNaoto 2:738b28f6a04b 132 Vr = -x1 + x2;
DeguNaoto 2:738b28f6a04b 133 Vl = -x1;
DeguNaoto 3:8d8c25c556ae 134 }*/
DeguNaoto 3:8d8c25c556ae 135 if(x2>0.0){
DeguNaoto 3:8d8c25c556ae 136 Vr = -x1 + x2;
DeguNaoto 3:8d8c25c556ae 137 Vl = -x1;
DeguNaoto 3:8d8c25c556ae 138 }
DeguNaoto 3:8d8c25c556ae 139 else{
DeguNaoto 3:8d8c25c556ae 140 Vr = -x1;
DeguNaoto 3:8d8c25c556ae 141 Vl = -x1 - x2;
DeguNaoto 2:738b28f6a04b 142 }
DeguNaoto 0:b613dc16f27d 143 }
DeguNaoto 0:b613dc16f27d 144 else if(flagf==1){
DeguNaoto 2:738b28f6a04b 145 if(x2>0.0){
DeguNaoto 0:b613dc16f27d 146 Vr = x1;
DeguNaoto 0:b613dc16f27d 147 Vl = x1 - x2;
DeguNaoto 0:b613dc16f27d 148 }
DeguNaoto 0:b613dc16f27d 149 else{
DeguNaoto 0:b613dc16f27d 150 Vr = x1 + x2;
DeguNaoto 0:b613dc16f27d 151 Vl = x1;
DeguNaoto 0:b613dc16f27d 152 }
DeguNaoto 0:b613dc16f27d 153 }
DeguNaoto 0:b613dc16f27d 154 Move_r( ( float ) Vr );
DeguNaoto 0:b613dc16f27d 155 Move_l( ( float ) Vl );
DeguNaoto 0:b613dc16f27d 156 }
DeguNaoto 0:b613dc16f27d 157
DeguNaoto 0:b613dc16f27d 158 #endif /*autoMode.h*/