NagaokaRoboticsClub_mbedTeam / Mbed 2 deprecated 2021_NHK_A

Dependencies:   mbed QEI led beep softPWM Servo_softpwm IR2302 lpf

Committer:
THtakahiro702286
Date:
Tue Oct 26 06:39:41 2021 +0000
Revision:
27:818783bc9a89
Parent:
26:7cb2c322153a
Child:
28:a77d8d164630
first success

Who changed what in which revision?

UserRevisionLine numberNew contents of line
THtakahiro702286 27:818783bc9a89 1 //2021/10/23 紐掴むだけ
THtakahiro702286 14:7e5b21c812fd 2
THtakahiro702286 0:6f4b2005b633 3 #include "mbed.h"
umekou 12:915a390e3fc4 4
THtakahiro702286 0:6f4b2005b633 5 #include "jy901.h"
Washio 11:b041e6cea0ef 6 #include "Servo.h"
Washio 11:b041e6cea0ef 7 #include "QEI.h"
umekou 13:9ad33de1c942 8 #include "IR2302.h"
umekou 12:915a390e3fc4 9
Washio 11:b041e6cea0ef 10 #include "pin_config.h"
Washio 11:b041e6cea0ef 11 #include "control_parameter.h"
umekou 12:915a390e3fc4 12
THtakahiro702286 0:6f4b2005b633 13 #include "lpf.h"
THtakahiro702286 0:6f4b2005b633 14 #include "beep.h"
THtakahiro702286 15:d8db04a67df9 15
THtakahiro702286 15:d8db04a67df9 16 Serial pc(USBTX,USBRX,115200);
THtakahiro702286 18:20dee7c7a628 17
THtakahiro702286 18:20dee7c7a628 18 //Beep buzzer(BEEP);
THtakahiro702286 0:6f4b2005b633 19 JY901 jy(SDA, SCL);
THtakahiro702286 18:20dee7c7a628 20 //DigitalOut stop(STOP);
THtakahiro702286 18:20dee7c7a628 21
THtakahiro702286 0:6f4b2005b633 22 QEI encoder(QEI1 ,QEI2 ,NC ,100 ,QEI::X4_ENCODING);
THtakahiro702286 18:20dee7c7a628 23
THtakahiro702286 0:6f4b2005b633 24 lpf yAcc(LPF_C_TIME, LPF_A_TIME);
THtakahiro702286 0:6f4b2005b633 25 lpf zAcc(LPF_C_TIME, LPF_A_TIME);
THtakahiro702286 21:b7734064c7dc 26 lpf mSp(MOT_C_TIME, MOT_A_TIME);
umekou 7:74b1ad3a2450 27 Servo servo[3] = {SERVO1, SERVO2, SERVO3};
umekou 13:9ad33de1c942 28 IR2302 ir2302(MD_A,MD_B);//梅沢追加 IR2302
THtakahiro702286 24:952a01c8baee 29 Timer setWait,nextWait,jumpWait;
THtakahiro702286 26:7cb2c322153a 30 AnalogIn ph[3] = {PHOTO1,PHOTO2,PHOTO3};
THtakahiro702286 26:7cb2c322153a 31 DigitalOut light[3] = {ROPE1,ROPE2,ROPE3};
THtakahiro702286 18:20dee7c7a628 32
THtakahiro702286 27:818783bc9a89 33 DigitalIn b(USER_BUTTON);
THtakahiro702286 27:818783bc9a89 34
THtakahiro702286 0:6f4b2005b633 35 int main()
THtakahiro702286 0:6f4b2005b633 36 {
THtakahiro702286 27:818783bc9a89 37 int i=0,j=0,k=1,l=0;//0,0,1,0
THtakahiro702286 18:20dee7c7a628 38 double acc[3]; //加速度
THtakahiro702286 18:20dee7c7a628 39 double abac[3]={0};//初期座標軸での加速度
THtakahiro702286 18:20dee7c7a628 40 double angle[3];
THtakahiro702286 0:6f4b2005b633 41 float lpfY,lpfZ; //ローパス後の加速度
THtakahiro702286 21:b7734064c7dc 42 float lpfM; //モータのローパス
THtakahiro702286 0:6f4b2005b633 43 jy.calibrateAll(50);
umekou 12:915a390e3fc4 44
THtakahiro702286 0:6f4b2005b633 45 int nowPalse;
THtakahiro702286 0:6f4b2005b633 46
THtakahiro702286 26:7cb2c322153a 47 float phI[3] = {0};//フォトインタラプタ
THtakahiro702286 0:6f4b2005b633 48 bool rope = 0;
THtakahiro702286 20:c51583296f7e 49
THtakahiro702286 27:818783bc9a89 50 bool firstFlag = 1;//1
THtakahiro702286 24:952a01c8baee 51 bool secondFlag= 0;//0
THtakahiro702286 24:952a01c8baee 52 bool thirdFlag = 0;//0
THtakahiro702286 20:c51583296f7e 53 bool swingFlag = 1;//1
THtakahiro702286 14:7e5b21c812fd 54 bool flyFlag = 0;//0
THtakahiro702286 14:7e5b21c812fd 55 bool catchFlag = 0;//0
THtakahiro702286 14:7e5b21c812fd 56 int8_t way = 1;//1or-1
THtakahiro702286 14:7e5b21c812fd 57 bool resetFlag = 0;//0
THtakahiro702286 0:6f4b2005b633 58 float fiveYAcc[5]={0};
THtakahiro702286 0:6f4b2005b633 59
THtakahiro702286 0:6f4b2005b633 60 float servoAngle[3];
THtakahiro702286 27:818783bc9a89 61 float motor=0;
THtakahiro702286 0:6f4b2005b633 62
THtakahiro702286 21:b7734064c7dc 63 for(int i=0;i < 3; i++)servo[i].calibrate(0.00095, 90);
THtakahiro702286 27:818783bc9a89 64 servoAngle[0] = 0.4;
THtakahiro702286 27:818783bc9a89 65 servoAngle[1] = 0.4;
THtakahiro702286 27:818783bc9a89 66 servoAngle[2] = 0.85;
THtakahiro702286 27:818783bc9a89 67 for(i=0;i<3;i++) servo[i].write(servoAngle[i]);
THtakahiro702286 26:7cb2c322153a 68 for(i=0; i<3; i++) light[i] = true;
THtakahiro702286 26:7cb2c322153a 69
THtakahiro702286 16:bdc10f57c11a 70
THtakahiro702286 21:b7734064c7dc 71 wait(5);
THtakahiro702286 16:bdc10f57c11a 72
THtakahiro702286 0:6f4b2005b633 73 while(1)
THtakahiro702286 0:6f4b2005b633 74 {
THtakahiro702286 0:6f4b2005b633 75 //センシング
THtakahiro702286 24:952a01c8baee 76 /*
THtakahiro702286 0:6f4b2005b633 77 //jy901
THtakahiro702286 0:6f4b2005b633 78 acc[1] = jy.getYaxisAcceleration()*10;
THtakahiro702286 0:6f4b2005b633 79 acc[2] = jy.getZaxisAcceleration()*10;
THtakahiro702286 0:6f4b2005b633 80 angle[0] = jy.getXaxisAngle();
THtakahiro702286 0:6f4b2005b633 81 angle[1] = jy.getYaxisAngle();
THtakahiro702286 0:6f4b2005b633 82 angle[2] = jy.getZaxisAngle();
THtakahiro702286 0:6f4b2005b633 83 for(i=0; i<3; i++)
THtakahiro702286 0:6f4b2005b633 84 {
THtakahiro702286 0:6f4b2005b633 85 if(acc[i] > 1567)acc[i] -= 3134;
THtakahiro702286 0:6f4b2005b633 86 }
THtakahiro702286 15:d8db04a67df9 87 abac[1] = acc[1]*cos(angle[0]/180.0*PI) - acc[2] * sin(angle[0]/180.0*PI);
THtakahiro702286 15:d8db04a67df9 88 abac[2] = acc[2]*cos(angle[0]/180.0*PI) + acc[1] * sin(angle[0]/180.0*PI);
THtakahiro702286 18:20dee7c7a628 89
THtakahiro702286 0:6f4b2005b633 90 //ローパスフィルタ
THtakahiro702286 0:6f4b2005b633 91 lpfY = yAcc.path_value(abac[1]);
THtakahiro702286 0:6f4b2005b633 92 lpfZ = zAcc.path_value(abac[2]);
THtakahiro702286 18:20dee7c7a628 93
THtakahiro702286 0:6f4b2005b633 94 //swingで使うやつ
THtakahiro702286 0:6f4b2005b633 95 fiveYAcc[j%5]= lpfY;
THtakahiro702286 0:6f4b2005b633 96 j++;
THtakahiro702286 24:952a01c8baee 97 */
THtakahiro702286 0:6f4b2005b633 98 //ロータリーエンコーダ
THtakahiro702286 0:6f4b2005b633 99 nowPalse = encoder.getPulses();
THtakahiro702286 0:6f4b2005b633 100
THtakahiro702286 0:6f4b2005b633 101 //紐センサ
THtakahiro702286 26:7cb2c322153a 102 for(i=0; i<3; i++) phI[i]=ph[i];
THtakahiro702286 0:6f4b2005b633 103
THtakahiro702286 0:6f4b2005b633 104 //処理部
THtakahiro702286 18:20dee7c7a628 105
THtakahiro702286 24:952a01c8baee 106 //加速1段目
THtakahiro702286 24:952a01c8baee 107 if(firstFlag)
THtakahiro702286 0:6f4b2005b633 108 {
THtakahiro702286 24:952a01c8baee 109 motor = FIRST_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 21:b7734064c7dc 110 motor = mSp.path_value(motor);
THtakahiro702286 20:c51583296f7e 111 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 0:6f4b2005b633 112 {
THtakahiro702286 0:6f4b2005b633 113 way *= -1;
THtakahiro702286 24:952a01c8baee 114 nextWait.start();
THtakahiro702286 0:6f4b2005b633 115 setWait.start();
THtakahiro702286 0:6f4b2005b633 116 swingFlag = 0;
THtakahiro702286 25:8bbfa2fa59be 117 if(nextWait > SECOND_LINE) //一定時間経過したらsecondに移行
THtakahiro702286 21:b7734064c7dc 118 {
THtakahiro702286 24:952a01c8baee 119 firstFlag = 0;
THtakahiro702286 24:952a01c8baee 120 secondFlag = 1;
THtakahiro702286 21:b7734064c7dc 121 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 122 nextWait.stop();
THtakahiro702286 24:952a01c8baee 123 nextWait.reset();
THtakahiro702286 21:b7734064c7dc 124 }
THtakahiro702286 0:6f4b2005b633 125 }
THtakahiro702286 24:952a01c8baee 126 if(setWait > FIRST_WAIT)
THtakahiro702286 0:6f4b2005b633 127 {
THtakahiro702286 0:6f4b2005b633 128 setWait.stop();
THtakahiro702286 0:6f4b2005b633 129 setWait.reset();
THtakahiro702286 0:6f4b2005b633 130 swingFlag = 1;
THtakahiro702286 0:6f4b2005b633 131 }
THtakahiro702286 0:6f4b2005b633 132 }
THtakahiro702286 24:952a01c8baee 133
THtakahiro702286 24:952a01c8baee 134 //加速2段目
THtakahiro702286 24:952a01c8baee 135 if(secondFlag)
THtakahiro702286 0:6f4b2005b633 136 {
THtakahiro702286 24:952a01c8baee 137 motor = SECOND_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 24:952a01c8baee 138 nextWait.start();
THtakahiro702286 24:952a01c8baee 139 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 0:6f4b2005b633 140 {
THtakahiro702286 0:6f4b2005b633 141 way *= -1;
THtakahiro702286 24:952a01c8baee 142 setWait.start();
THtakahiro702286 0:6f4b2005b633 143 swingFlag = 0;
THtakahiro702286 25:8bbfa2fa59be 144 if(nextWait > THIRD_LINE) //一定時間経過したらthirdに移行
THtakahiro702286 24:952a01c8baee 145 {
THtakahiro702286 24:952a01c8baee 146 secondFlag = 0;
THtakahiro702286 24:952a01c8baee 147 thirdFlag = 1;
THtakahiro702286 24:952a01c8baee 148 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 149 nextWait.stop();
THtakahiro702286 24:952a01c8baee 150 nextWait.reset();
THtakahiro702286 24:952a01c8baee 151 }
THtakahiro702286 0:6f4b2005b633 152 }
THtakahiro702286 24:952a01c8baee 153 if(setWait > SECOND_WAIT)
THtakahiro702286 24:952a01c8baee 154 {
THtakahiro702286 24:952a01c8baee 155 setWait.stop();
THtakahiro702286 24:952a01c8baee 156 setWait.reset();
THtakahiro702286 24:952a01c8baee 157 swingFlag = 1;
THtakahiro702286 24:952a01c8baee 158 }
THtakahiro702286 0:6f4b2005b633 159 }
THtakahiro702286 21:b7734064c7dc 160
THtakahiro702286 24:952a01c8baee 161 //加速3段目
THtakahiro702286 24:952a01c8baee 162 if(thirdFlag)
THtakahiro702286 0:6f4b2005b633 163 {
THtakahiro702286 24:952a01c8baee 164 jumpWait.start();
THtakahiro702286 24:952a01c8baee 165 motor = THIRD_POWER * way * swingFlag; //振り子を振る、wayで反転を制御
THtakahiro702286 24:952a01c8baee 166 if(nowPalse * way > FURIKO_STOP_LINE) //エンコーダーの値が一定以上なら(少し間をおいて)反転
THtakahiro702286 24:952a01c8baee 167 {
THtakahiro702286 24:952a01c8baee 168 way *= -1;
THtakahiro702286 24:952a01c8baee 169 nextWait.start();
THtakahiro702286 24:952a01c8baee 170 setWait.start();
THtakahiro702286 24:952a01c8baee 171 swingFlag = 0;
THtakahiro702286 24:952a01c8baee 172 }
THtakahiro702286 24:952a01c8baee 173 if(setWait > THIRD_WAIT)
THtakahiro702286 24:952a01c8baee 174 {
THtakahiro702286 24:952a01c8baee 175 setWait.stop();
THtakahiro702286 24:952a01c8baee 176 setWait.reset();
THtakahiro702286 24:952a01c8baee 177 swingFlag = 1;
THtakahiro702286 24:952a01c8baee 178 }
THtakahiro702286 27:818783bc9a89 179 if((jumpWait > JUMP_TIME) && (nowPalse < JUMP_LINE) && (nowPalse > JUMP_LINE-10) && (way == -1)) //一定時間たったら前に飛ぶ
THtakahiro702286 24:952a01c8baee 180 {
THtakahiro702286 26:7cb2c322153a 181 flyFlag = 1;
THtakahiro702286 26:7cb2c322153a 182 thirdFlag = 0;
THtakahiro702286 24:952a01c8baee 183 }
THtakahiro702286 0:6f4b2005b633 184 }
THtakahiro702286 27:818783bc9a89 185
THtakahiro702286 27:818783bc9a89 186
THtakahiro702286 0:6f4b2005b633 187 //ジャンプ
THtakahiro702286 0:6f4b2005b633 188 if(flyFlag)
THtakahiro702286 0:6f4b2005b633 189 {
THtakahiro702286 27:818783bc9a89 190 // if(lpfZ < RELEASE_LINE)
THtakahiro702286 0:6f4b2005b633 191 {
THtakahiro702286 27:818783bc9a89 192 servoAngle[(k+1)%3] = 0.0;//サーボ離す
THtakahiro702286 27:818783bc9a89 193 servoAngle[k%3] = 0.85;
THtakahiro702286 27:818783bc9a89 194 k+=2;
THtakahiro702286 27:818783bc9a89 195 l++;
THtakahiro702286 0:6f4b2005b633 196 flyFlag = 0;
THtakahiro702286 27:818783bc9a89 197 catchFlag=1;
THtakahiro702286 27:818783bc9a89 198 }
THtakahiro702286 27:818783bc9a89 199 motor=0;
THtakahiro702286 27:818783bc9a89 200
THtakahiro702286 0:6f4b2005b633 201 }
THtakahiro702286 27:818783bc9a89 202
THtakahiro702286 27:818783bc9a89 203
THtakahiro702286 0:6f4b2005b633 204 //キャッチ
THtakahiro702286 0:6f4b2005b633 205 if(catchFlag)
THtakahiro702286 0:6f4b2005b633 206 {
THtakahiro702286 27:818783bc9a89 207 if(nowPalse < NEXT_PALSE * l)
THtakahiro702286 27:818783bc9a89 208 {
THtakahiro702286 27:818783bc9a89 209 // motor=0.95;
THtakahiro702286 27:818783bc9a89 210 }
THtakahiro702286 27:818783bc9a89 211 else
THtakahiro702286 27:818783bc9a89 212 {
THtakahiro702286 27:818783bc9a89 213 // motor=0;
THtakahiro702286 27:818783bc9a89 214 }
THtakahiro702286 27:818783bc9a89 215 if(phI[k%3] < ROPE_ACRROS[k%3])
THtakahiro702286 27:818783bc9a89 216 {
THtakahiro702286 27:818783bc9a89 217 catchFlag=0;
THtakahiro702286 27:818783bc9a89 218 motor = 0;
THtakahiro702286 27:818783bc9a89 219 }
THtakahiro702286 27:818783bc9a89 220
THtakahiro702286 0:6f4b2005b633 221 }
THtakahiro702286 27:818783bc9a89 222 /*
THtakahiro702286 0:6f4b2005b633 223 //掴んだ後
THtakahiro702286 0:6f4b2005b633 224 if(resetFlag)
THtakahiro702286 0:6f4b2005b633 225 {
THtakahiro702286 0:6f4b2005b633 226 resetFlag = 0;
THtakahiro702286 24:952a01c8baee 227 secondFlag = 1;
THtakahiro702286 0:6f4b2005b633 228 }
THtakahiro702286 21:b7734064c7dc 229 */
THtakahiro702286 14:7e5b21c812fd 230 //実験用記述-----------
THtakahiro702286 27:818783bc9a89 231 /*
THtakahiro702286 22:efa233983e1f 232 if(flyFlag)
THtakahiro702286 22:efa233983e1f 233 {
THtakahiro702286 22:efa233983e1f 234 // if(lpfZ < RELEASELINE)
THtakahiro702286 22:efa233983e1f 235 {
THtakahiro702286 22:efa233983e1f 236 for(i=0; i < 3; i++) servoAngle[i] = -1.0;//サーボ離す
THtakahiro702286 22:efa233983e1f 237 // k++;
THtakahiro702286 22:efa233983e1f 238 flyFlag = 0;
THtakahiro702286 22:efa233983e1f 239 }
THtakahiro702286 22:efa233983e1f 240 motor=0;
THtakahiro702286 22:efa233983e1f 241 }
THtakahiro702286 27:818783bc9a89 242 */
THtakahiro702286 27:818783bc9a89 243 /*
THtakahiro702286 27:818783bc9a89 244 for(i=0; i<3; i++)
THtakahiro702286 27:818783bc9a89 245 {
THtakahiro702286 27:818783bc9a89 246 if(phI[i] < ROPE_ACRROS[i]) servoAngle[i] = -0.8;
THtakahiro702286 27:818783bc9a89 247
THtakahiro702286 27:818783bc9a89 248 }
THtakahiro702286 27:818783bc9a89 249 */
THtakahiro702286 27:818783bc9a89 250 /*
THtakahiro702286 27:818783bc9a89 251 if(phI[k%3] < ROPE_ACRROS[k%3])
THtakahiro702286 27:818783bc9a89 252 {
THtakahiro702286 27:818783bc9a89 253 servoAngle[k%3] = 0.85;
THtakahiro702286 27:818783bc9a89 254 servoAngle[(k+1)%3] = -0.5;
THtakahiro702286 27:818783bc9a89 255 k+=2;
THtakahiro702286 27:818783bc9a89 256 }
THtakahiro702286 27:818783bc9a89 257 */
THtakahiro702286 27:818783bc9a89 258 // if(!b) motor=0.3;
THtakahiro702286 27:818783bc9a89 259 // else motor=0;
THtakahiro702286 22:efa233983e1f 260
THtakahiro702286 14:7e5b21c812fd 261 //-------------------
umekou 12:915a390e3fc4 262
THtakahiro702286 0:6f4b2005b633 263 //駆動系
umekou 12:915a390e3fc4 264
THtakahiro702286 0:6f4b2005b633 265 //サーボ
THtakahiro702286 0:6f4b2005b633 266 for(i=0;i<3;i++) servo[i].write(servoAngle[i]);
THtakahiro702286 0:6f4b2005b633 267
THtakahiro702286 0:6f4b2005b633 268 //モーター
THtakahiro702286 20:c51583296f7e 269 ir2302.SetMotorSpeed(motor);
THtakahiro702286 18:20dee7c7a628 270
THtakahiro702286 15:d8db04a67df9 271 //表示系
THtakahiro702286 18:20dee7c7a628 272 // pc.printf("%.2f,%.2f,%.2f",angle[0],angle[1],angle[2]);
THtakahiro702286 24:952a01c8baee 273 // pc.printf("%.2f,%.2f,%.2f,",servoAngle[0],servoAngle[1],servoAngle[2]);
THtakahiro702286 24:952a01c8baee 274 // pc.printf("%.4f,",motor);
THtakahiro702286 18:20dee7c7a628 275 // pc.printf("%.2f,%.2f,",abac[1],abac[2]);
THtakahiro702286 22:efa233983e1f 276 // pc.printf("%.2f,%.2f,",lpfY,lpfZ);
THtakahiro702286 19:b9f53bc0fdf2 277 // pc.printf("%d,",nowPalse);
THtakahiro702286 27:818783bc9a89 278 // pc.printf("%d,",catchFlag);
THtakahiro702286 21:b7734064c7dc 279 // pc.printf("%.2f,",lpfM);
THtakahiro702286 27:818783bc9a89 280 // pc.printf("%.3f,%.3f,%.3f,",phI[0],phI[1],phI[2]);
THtakahiro702286 27:818783bc9a89 281 // pc.printf("\r\n");
THtakahiro702286 18:20dee7c7a628 282
THtakahiro702286 0:6f4b2005b633 283 }
THtakahiro702286 0:6f4b2005b633 284 }
umekou 12:915a390e3fc4 285
umekou 12:915a390e3fc4 286