2015_robocon_bteam / Mbed 2 deprecated 2015robot_main

Dependencies:   PID QEI mbed

Fork of 2015robot_main by Naoto Deguchi

Committer:
unicore32
Date:
Thu Oct 08 09:04:48 2015 +0000
Revision:
68:2b2b88ecdcce
Parent:
66:14df82661dfa
Child:
69:bf094811b4a9
8bit???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DeguNaoto 21:79b94cb922f0 1 #ifndef AUTOMODE_H
DeguNaoto 21:79b94cb922f0 2 #define AUTOMODE_H
DeguNaoto 21:79b94cb922f0 3
DeguNaoto 21:79b94cb922f0 4 /***PID Controller***/
DeguNaoto 66:14df82661dfa 5 //PID velocity_controller(36.0,5274.0 ,0.0,RATE);
DeguNaoto 66:14df82661dfa 6 //PID direction_controller(36.0,3.0,0.0,RATE);
DeguNaoto 66:14df82661dfa 7 PID velocity_controller(9.0,5274.0 ,0.0,RATE);
DeguNaoto 34:f9ef622f4376 8 PID direction_controller(36.0,3.0,0.0,RATE);
DeguNaoto 21:79b94cb922f0 9
DeguNaoto 57:3fbd487e055e 10 #ifdef IM920
DeguNaoto 52:d9e1629da852 11 /***IM920 correspondence***/
DeguNaoto 52:d9e1629da852 12 void autoIM920() {
DeguNaoto 52:d9e1629da852 13 if(b==7){ /*mode change*/
DeguNaoto 52:d9e1629da852 14 if(edge7){
DeguNaoto 52:d9e1629da852 15 edge7=0;
DeguNaoto 52:d9e1629da852 16 autoflag=0;
DeguNaoto 52:d9e1629da852 17 Indicator4=0;
DeguNaoto 52:d9e1629da852 18 IndicatorAuto=1;
DeguNaoto 52:d9e1629da852 19 }
DeguNaoto 52:d9e1629da852 20 }
DeguNaoto 52:d9e1629da852 21 else if(b==6){ /*start*/
DeguNaoto 64:a98fe602c26d 22 flagf=1;
DeguNaoto 52:d9e1629da852 23 targ_velocity=speed;
DeguNaoto 66:14df82661dfa 24 sendData(7,defoR);
DeguNaoto 52:d9e1629da852 25 stateR = defoR;
DeguNaoto 52:d9e1629da852 26 stateL = defoL;
DeguNaoto 61:e018207ae860 27 step = 0;
DeguNaoto 61:e018207ae860 28 CMode = 0;
DeguNaoto 52:d9e1629da852 29 }
DeguNaoto 61:e018207ae860 30 else if(b==8){ /*middle start*/
DeguNaoto 64:a98fe602c26d 31 flagf=1;
DeguNaoto 61:e018207ae860 32 targ_velocity=speed;
unicore32 68:2b2b88ecdcce 33 sendData(7,57);
DeguNaoto 65:cebdfc0184d7 34 stateR = 17;
DeguNaoto 65:cebdfc0184d7 35 stateL = 17;
DeguNaoto 61:e018207ae860 36 step = 4;
DeguNaoto 61:e018207ae860 37 CMode = 6;
DeguNaoto 61:e018207ae860 38 }
DeguNaoto 52:d9e1629da852 39 else if(b==5){ /*reset*/
unicore32 68:2b2b88ecdcce 40 sendData(7,255);
DeguNaoto 52:d9e1629da852 41 }
DeguNaoto 52:d9e1629da852 42 else if(b==9){ /*stop*/
DeguNaoto 29:03bb1ddbe456 43 Motor_swing=0;
DeguNaoto 22:3996c3f41922 44 sita=PI/4.0,x=0.0,y=0.0;
DeguNaoto 22:3996c3f41922 45 targ_velocity=0.0;
DeguNaoto 22:3996c3f41922 46 targ_sita=PI/4.0;
DeguNaoto 22:3996c3f41922 47 velocity_controller.reset();
DeguNaoto 22:3996c3f41922 48 direction_controller.reset();
DeguNaoto 52:d9e1629da852 49 }
DeguNaoto 52:d9e1629da852 50 else if(b==1){ /*L down*/
DeguNaoto 52:d9e1629da852 51 if(edge1){
DeguNaoto 52:d9e1629da852 52 edge1=0;
DeguNaoto 52:d9e1629da852 53 if(stateL!=1) stateL--;
DeguNaoto 57:3fbd487e055e 54 sendData(4,stateL);
DeguNaoto 52:d9e1629da852 55 }
DeguNaoto 52:d9e1629da852 56 }
DeguNaoto 52:d9e1629da852 57 else if(b==2){ /*L up*/
DeguNaoto 52:d9e1629da852 58 if(edge2){
DeguNaoto 52:d9e1629da852 59 edge2=0;
DeguNaoto 52:d9e1629da852 60 if(stateL!=28) stateL++;
DeguNaoto 57:3fbd487e055e 61 sendData(4,stateL);
DeguNaoto 22:3996c3f41922 62 }
DeguNaoto 52:d9e1629da852 63 }
DeguNaoto 52:d9e1629da852 64 else if(b==3){ /*R down*/
DeguNaoto 52:d9e1629da852 65 if(edge3){
DeguNaoto 52:d9e1629da852 66 edge3=0;
DeguNaoto 52:d9e1629da852 67 if(stateR!=1) stateR--;
DeguNaoto 57:3fbd487e055e 68 sendData(5,stateR);
DeguNaoto 52:d9e1629da852 69 }
DeguNaoto 52:d9e1629da852 70 }
DeguNaoto 52:d9e1629da852 71 else if(b==4){ /*R up*/
DeguNaoto 52:d9e1629da852 72 if(edge4){
DeguNaoto 52:d9e1629da852 73 edge4=0;
DeguNaoto 52:d9e1629da852 74 if(stateR!=28) stateR++;
DeguNaoto 57:3fbd487e055e 75 sendData(5,stateR);
DeguNaoto 52:d9e1629da852 76 }
DeguNaoto 52:d9e1629da852 77 }
DeguNaoto 52:d9e1629da852 78 if(b!=7) edge7=1;
DeguNaoto 52:d9e1629da852 79 if(b!=1) edge1=1;
DeguNaoto 52:d9e1629da852 80 if(b!=2) edge2=1;
DeguNaoto 52:d9e1629da852 81 if(b!=3) edge3=1;
DeguNaoto 52:d9e1629da852 82 if(b!=4) edge4=1;
DeguNaoto 22:3996c3f41922 83 }
DeguNaoto 57:3fbd487e055e 84 #else
DeguNaoto 57:3fbd487e055e 85 void autoPS3(){
DeguNaoto 57:3fbd487e055e 86 if(circle){ /*mode change*/
DeguNaoto 57:3fbd487e055e 87 if(edge_circle){
DeguNaoto 57:3fbd487e055e 88 edge_circle=0;
DeguNaoto 57:3fbd487e055e 89 autoflag=0;
DeguNaoto 57:3fbd487e055e 90 Indicator4=0;
DeguNaoto 57:3fbd487e055e 91 IndicatorAuto=1;
DeguNaoto 57:3fbd487e055e 92 }
DeguNaoto 57:3fbd487e055e 93 }
DeguNaoto 57:3fbd487e055e 94 else if(up){ /*start*/
DeguNaoto 64:a98fe602c26d 95 flagf=1;
DeguNaoto 57:3fbd487e055e 96 targ_velocity=speed;
DeguNaoto 66:14df82661dfa 97 sendData(7,defoR);
DeguNaoto 57:3fbd487e055e 98 stateR = defoR;
DeguNaoto 57:3fbd487e055e 99 stateL = defoL;
DeguNaoto 61:e018207ae860 100 step = 0;
DeguNaoto 61:e018207ae860 101 CStep = 1;
DeguNaoto 61:e018207ae860 102 }
DeguNaoto 61:e018207ae860 103 else if(right){ /*middle start*/
DeguNaoto 64:a98fe602c26d 104 flagf = 1;
DeguNaoto 61:e018207ae860 105 targ_velocity=speed;
unicore32 68:2b2b88ecdcce 106 sendData(7,57);
DeguNaoto 65:cebdfc0184d7 107 stateR = 17;
DeguNaoto 65:cebdfc0184d7 108 stateL = 17;
DeguNaoto 61:e018207ae860 109 step = 4;
DeguNaoto 61:e018207ae860 110 CStep = 6;
DeguNaoto 57:3fbd487e055e 111 }
DeguNaoto 57:3fbd487e055e 112 else if(square){ /*reset*/
unicore32 68:2b2b88ecdcce 113 sendData(7,255);
DeguNaoto 57:3fbd487e055e 114 }
DeguNaoto 57:3fbd487e055e 115 else if(triangle){ /*set defo*/
DeguNaoto 66:14df82661dfa 116 sendData(7,defoR);
DeguNaoto 57:3fbd487e055e 117 }
DeguNaoto 57:3fbd487e055e 118 else if(cross){ /*stop*/
DeguNaoto 57:3fbd487e055e 119 Motor_swing=0;
DeguNaoto 64:a98fe602c26d 120 // sita=PI/4.0,x=0.0,y=0.0;
DeguNaoto 57:3fbd487e055e 121 targ_velocity=0.0;
DeguNaoto 57:3fbd487e055e 122 targ_sita=PI/4.0;
DeguNaoto 57:3fbd487e055e 123 velocity_controller.reset();
DeguNaoto 57:3fbd487e055e 124 direction_controller.reset();
DeguNaoto 57:3fbd487e055e 125 }
DeguNaoto 57:3fbd487e055e 126 else if(l1){ /*L up*/
DeguNaoto 57:3fbd487e055e 127 if(edge_l1){
DeguNaoto 57:3fbd487e055e 128 edge_l1=0;
DeguNaoto 61:e018207ae860 129 if(stateL!=1) stateL--;
DeguNaoto 57:3fbd487e055e 130 sendData(4,stateL);
DeguNaoto 57:3fbd487e055e 131 }
DeguNaoto 57:3fbd487e055e 132 }
DeguNaoto 57:3fbd487e055e 133 else if(l2){ /*L down*/
DeguNaoto 57:3fbd487e055e 134 if(edge_l2){
DeguNaoto 57:3fbd487e055e 135 edge_l2=0;
DeguNaoto 57:3fbd487e055e 136 if(stateL!=28) stateL++;
DeguNaoto 57:3fbd487e055e 137 sendData(4,stateL);
DeguNaoto 57:3fbd487e055e 138 }
DeguNaoto 57:3fbd487e055e 139 }
DeguNaoto 57:3fbd487e055e 140 else if(r1){ /*R up*/
DeguNaoto 57:3fbd487e055e 141 if(edge_r1){
DeguNaoto 57:3fbd487e055e 142 edge_r1=0;
DeguNaoto 61:e018207ae860 143 if(stateR!=1) stateR--;
DeguNaoto 57:3fbd487e055e 144 sendData(5,stateR);
DeguNaoto 57:3fbd487e055e 145 }
DeguNaoto 57:3fbd487e055e 146 }
DeguNaoto 57:3fbd487e055e 147 else if(r2){ /*R down*/
DeguNaoto 57:3fbd487e055e 148 if(edge_r2){
DeguNaoto 57:3fbd487e055e 149 edge_r2=0;
DeguNaoto 57:3fbd487e055e 150 if(stateR!=28) stateR++;
DeguNaoto 57:3fbd487e055e 151 sendData(5,stateR);
DeguNaoto 57:3fbd487e055e 152 }
DeguNaoto 57:3fbd487e055e 153 }
DeguNaoto 57:3fbd487e055e 154 }
DeguNaoto 57:3fbd487e055e 155 #endif
DeguNaoto 21:79b94cb922f0 156 /***The function is PID controller initialize.***/
DeguNaoto 21:79b94cb922f0 157 inline void initializeControllers()
DeguNaoto 21:79b94cb922f0 158 {
DeguNaoto 66:14df82661dfa 159 // velocity_controller.setInputLimits(-200000.0, 200000.0); //x1
DeguNaoto 66:14df82661dfa 160 velocity_controller.setInputLimits(-20000.0, 20000.0); //x1
DeguNaoto 21:79b94cb922f0 161 direction_controller.setInputLimits(-10.0, 10.0); //x2
DeguNaoto 21:79b94cb922f0 162
DeguNaoto 21:79b94cb922f0 163 //Pwm output from MOVE_OUTPUT_LIMIT_BOTTOM to MOVE_OUTPUT_LIMIT_TOP
DeguNaoto 21:79b94cb922f0 164 velocity_controller.setOutputLimits(-1.0, 1.0);
DeguNaoto 21:79b94cb922f0 165 direction_controller.setOutputLimits(-1.0, 1.0);
DeguNaoto 31:74e77ef0831c 166
DeguNaoto 21:79b94cb922f0 167 //set bias. 初期値
DeguNaoto 21:79b94cb922f0 168 velocity_controller.setBias(0.0);
DeguNaoto 21:79b94cb922f0 169 direction_controller.setBias(0.0);
DeguNaoto 21:79b94cb922f0 170
DeguNaoto 21:79b94cb922f0 171 //set mode.
DeguNaoto 21:79b94cb922f0 172 velocity_controller.setMode(AUTO_MODE);
DeguNaoto 21:79b94cb922f0 173 direction_controller.setMode(AUTO_MODE);
DeguNaoto 21:79b94cb922f0 174 }
DeguNaoto 21:79b94cb922f0 175
DeguNaoto 21:79b94cb922f0 176 /***The function is following move speed.***/
DeguNaoto 21:79b94cb922f0 177 inline void velocity_following()
DeguNaoto 21:79b94cb922f0 178 {
DeguNaoto 21:79b94cb922f0 179 velocity_controller.setSetPoint((float)targ_velocity);
DeguNaoto 21:79b94cb922f0 180 velocity_controller.setProcessValue((float)velocity);
DeguNaoto 21:79b94cb922f0 181 x1 = (double)velocity_controller.compute();
DeguNaoto 21:79b94cb922f0 182 }
DeguNaoto 21:79b94cb922f0 183
DeguNaoto 21:79b94cb922f0 184 inline void sita_following()
DeguNaoto 21:79b94cb922f0 185 {
DeguNaoto 21:79b94cb922f0 186 direction_controller.setSetPoint((float)targ_sita);
DeguNaoto 21:79b94cb922f0 187 direction_controller.setProcessValue((float)sita);
DeguNaoto 55:db1797ac6cb1 188 //direction_controller.setSetPoint(0.0); /*目標値とのずれをなくす*/
DeguNaoto 21:79b94cb922f0 189 //direction_controller.setProcessValue(-y);
DeguNaoto 21:79b94cb922f0 190 x2 = (double)direction_controller.compute();
DeguNaoto 21:79b94cb922f0 191 }
DeguNaoto 21:79b94cb922f0 192
DeguNaoto 21:79b94cb922f0 193 inline void move_following()
DeguNaoto 21:79b94cb922f0 194 {
DeguNaoto 21:79b94cb922f0 195 velocity_following();
DeguNaoto 21:79b94cb922f0 196 sita_following();
DeguNaoto 64:a98fe602c26d 197
DeguNaoto 64:a98fe602c26d 198 if(flagf==0){
DeguNaoto 64:a98fe602c26d 199 Vr = ( x1 + x2 ) / 2.0;
DeguNaoto 64:a98fe602c26d 200 Vl = ( x1 - x2 ) / 2.0;
DeguNaoto 63:dad3f4e5e99c 201 }
DeguNaoto 64:a98fe602c26d 202 else if(flagf==1){
DeguNaoto 64:a98fe602c26d 203 if(x2>0){
DeguNaoto 64:a98fe602c26d 204 Vr = x1;
DeguNaoto 64:a98fe602c26d 205 Vl = x1 - x2;
DeguNaoto 64:a98fe602c26d 206 }
DeguNaoto 64:a98fe602c26d 207 else{
DeguNaoto 64:a98fe602c26d 208 Vr = x1 + x2;
DeguNaoto 64:a98fe602c26d 209 Vl = x1;
DeguNaoto 64:a98fe602c26d 210 }
DeguNaoto 63:dad3f4e5e99c 211 }
DeguNaoto 63:dad3f4e5e99c 212
DeguNaoto 64:a98fe602c26d 213 if( abs(Vr) < 0.2 ) Vr = 0.0;
DeguNaoto 64:a98fe602c26d 214 if( abs(Vl) < 0.2 ) Vl = 0.0;
DeguNaoto 21:79b94cb922f0 215 Move_r( ( float ) Vr );
DeguNaoto 21:79b94cb922f0 216 Move_l( ( float ) Vl );
DeguNaoto 21:79b94cb922f0 217 }
DeguNaoto 21:79b94cb922f0 218
DeguNaoto 21:79b94cb922f0 219 #endif /*autoMode.h*/