nhk2019
Dependencies: mbed kondoSerialServo
Diff: main.cpp
- Revision:
- 4:e66bd933bafa
- Parent:
- 3:0366c1adc510
--- a/main.cpp Fri May 03 01:45:39 2019 +0000 +++ b/main.cpp Fri May 24 02:25:41 2019 +0000 @@ -31,6 +31,11 @@ int flatCurve2; float slopeLack1; float slopeLack2; +int ropeCurve1; +int ropeCurve2; +int ropeClab1; +int ropeClab2; +int clabCount; //----------------------------- const float PI = 3.1415926; @@ -65,10 +70,15 @@ void initRed(){//左側 initLack1 = 7600; initLack2 = 3500; - flatCurve1 = 5; + flatCurve1 = 0; flatCurve2 = 15; - slopeLack1 = 9700; - slopeLack2 = 4000; + slopeLack1 = 9700;//9700 + slopeLack2 = 3800; + ropeCurve1 = -20; + ropeCurve2 = -50; + ropeClab1 = 70; + ropeClab2 = 1; + clabCount = 2; } void initBlue(){//右側 @@ -77,7 +87,12 @@ flatCurve1 = -7; flatCurve2 = -17; slopeLack1 = 9700; - slopeLack2 = 11000; + slopeLack2 = 11100; + ropeCurve1 = 15; + ropeCurve2 = 50; + ropeClab1 = -40; + ropeClab2 = 0; + clabCount = 2; } //-------------------------------------- @@ -126,20 +141,20 @@ void toPulse(){ //右前足 currentPulse[0][0] = int(fmap(currentAngle[0][0],-135,135,11500,3500)); - currentPulse[0][1] = int(fmap(currentAngle[0][1],-135,135,11500,3500)+200); - currentPulse[0][2] = int(fmap(currentAngle[0][2],0,270,3500,11500)); + currentPulse[0][1] = int(fmap(currentAngle[0][1],-135,135,11500,3500)+100);//+200 + currentPulse[0][2] = int(fmap(currentAngle[0][2],0,270,3500,11500));//0 //左前足 currentPulse[1][0] = int(fmap(currentAngle[1][0],-135,135,3500,11500)-100); - currentPulse[1][1] = int(fmap(currentAngle[1][1],-135,135,11500,3500)-200); - currentPulse[1][2] = int(fmap(currentAngle[1][2],0,270,3500,11500)-350); + currentPulse[1][1] = int(fmap(currentAngle[1][1],-135,135,11500,3500)-100);//-200 + currentPulse[1][2] = int(fmap(currentAngle[1][2],0,270,3500,11500)-400);//-350 //右後足 - currentPulse[2][0] = int(fmap(currentAngle[2][0],-135,135,11500,3500)); - currentPulse[2][1] = int(fmap(currentAngle[2][1],-135,135,11500,3500)); - currentPulse[2][2] = int(fmap(currentAngle[2][2],0,270,3500,11500)); + currentPulse[2][0] = int(fmap(currentAngle[2][0],-135,135,11500,3500)+500); + currentPulse[2][1] = int(fmap(currentAngle[2][1],-135,135,11500,3500));//0 + currentPulse[2][2] = int(fmap(currentAngle[2][2],0,270,3500,11500)-100);//0 //左後足 currentPulse[3][0] = int(fmap(currentAngle[3][0],-135,135,3500,11500)+100); - currentPulse[3][1] = int(fmap(currentAngle[3][1],-135,135,11500,3500)); - currentPulse[3][2] = int(fmap(currentAngle[3][2],0,270,3500,11500)); + currentPulse[3][1] = int(fmap(currentAngle[3][1],-135,135,11500,3500));//0 + currentPulse[3][2] = int(fmap(currentAngle[3][2],0,270,3500,11500)-100);//0 for(int i=0;i<3;i++){ for(int j=0;j<4;j++){ @@ -152,18 +167,18 @@ void siteUpdate(){ if(ropeSign == true){ - if(touch.read() == 0){ - ropeCount++; - }else{ - ropeCount--; - } - if(ropeCount >= 40){ - ropeFlag = true; - ropeCount = 0; - }else if(ropeCount <= 0){ - ropeFlag = false; - ropeCount = 0; - } + if(touch.read() == 0){ + ropeCount++; + }else{ + ropeCount--; + } + if(ropeCount >= 25){ + ropeFlag = true; + ropeCount = 0; + }else if(ropeCount <= 0){ + ropeFlag = false; + ropeCount = 0; + } } for(int i=0;i<4;i++){ for(int j=0;j<3;j++){ @@ -219,17 +234,14 @@ setSite(3, pos[0], pos[2], pos[4]); allMotionWait(); } -//トロット歩容 -void forwardTrot(unsigned int count, float *pos, float *speed, float turn){ - float stepRY = pos[5]; - float stepLY = pos[5]; +void Turn(unsigned int count,float *pos, float *speed,bool direction){ moveSpeed = speed[0]; - if(turn > 0){ - stepRY += turn; - stepLY -= turn; - }else if(turn < 0){ - stepRY += turn; - stepLY -= turn; + float stepRY = 0; + float stepLY = 0; + if(direction == 0){ + stepRY = pos[5]; + }else{ + stepLY = pos[5]; } while(count-- > 0){ //0,3 @@ -249,10 +261,105 @@ allMotionWait(); setSite(1, pos[0], pos[1] + stepLY, pos[3]); setSite(2, pos[0], pos[2] + stepRY, pos[4]); - allMotionWait(); + allMotionWait(); } } -void rightMove(unsigned int count, float *pos, float *speed, float turn){ +//トロット歩容 +void forwardTrot(unsigned int count, float *pos, float *speed, float turn, bool alta = 1){ + float stepRY = pos[5]; + float stepLY = pos[5]; + moveSpeed = speed[0]; + if(turn > 0){ + stepRY += turn; + stepLY -= turn; + }else if(turn < 0){ + stepRY += turn; + stepLY -= turn; + } + while(count-- > 0){ + if(alta == 1){ + //0,3 + setSite(0, pos[0], pos[1] + stepRY, pos[3]-pos[6]); + setSite(1, pos[0], pos[1], pos[3]); + setSite(2, pos[0], pos[2], pos[4]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]-pos[7]); + allMotionWait(); + setSite(0, pos[0], pos[1] + stepRY, pos[3]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]); + allMotionWait(); + //1,2 + setSite(0, pos[0], pos[1], pos[3]); + setSite(1, pos[0], pos[1] + stepLY, pos[3]-pos[6]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]-pos[7]); + setSite(3, pos[0], pos[2], pos[4]); + allMotionWait(); + setSite(1, pos[0], pos[1] + stepLY, pos[3]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]); + allMotionWait(); + }else{ + //1,2 + setSite(0, pos[0], pos[1], pos[3]); + setSite(1, pos[0], pos[1] + stepLY, pos[3]-pos[6]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]-pos[7]); + setSite(3, pos[0], pos[2], pos[4]); + allMotionWait(); + setSite(1, pos[0], pos[1] + stepLY, pos[3]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]); + allMotionWait(); + //0,3 + setSite(0, pos[0], pos[1] + stepRY, pos[3]-pos[6]); + setSite(1, pos[0], pos[1], pos[3]); + setSite(2, pos[0], pos[2], pos[4]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]-pos[7]); + allMotionWait(); + setSite(0, pos[0], pos[1] + stepRY, pos[3]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]); + allMotionWait(); + } + } +} +bool forwardTrot2(float *pos, float *speed, float turn){ + float stepRY = pos[5]; + float stepLY = pos[5]; + bool alta = 0; + moveSpeed = speed[0]; + if(turn > 0){ + stepRY += turn; + stepLY -= turn; + }else if(turn < 0){ + stepRY += turn; + stepLY -= turn; + } + while(1){ + if(alta == 0){ + //0,3 + setSite(0, pos[0], pos[1] + stepRY, pos[3]-pos[6]); + setSite(1, pos[0], pos[1], pos[3]); + setSite(2, pos[0], pos[2], pos[4]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]-pos[7]); + allMotionWait(); + setSite(0, pos[0], pos[1] + stepRY, pos[3]); + setSite(3, pos[0], pos[2] + stepLY, pos[4]); + allMotionWait(); + }else{ + //1,2 + setSite(0, pos[0], pos[1], pos[3]); + setSite(1, pos[0], pos[1] + stepLY, pos[3]-pos[6]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]-pos[7]); + setSite(3, pos[0], pos[2], pos[4]); + allMotionWait(); + setSite(1, pos[0], pos[1] + stepLY, pos[3]); + setSite(2, pos[0], pos[2] + stepRY, pos[4]); + allMotionWait(); + } + if(ropeFlag == true){ + return alta; + } + alta = !alta; + } +} + +void clabWalk(unsigned int count, float *pos, float *speed, float turn){ moveSpeed = speed[0]; while(count-- > 0){ //0,3 @@ -382,79 +489,98 @@ } -void ropeOver(){ - float levelPosTest[8] = {200,40,-110,150,170,110,35,80}; - float levelSpeTest[2] = {7,8}; +bool ropeOver(){ + float levelPosTest[8] = {200,30,-160,160,170,145,60,70}; + float levelSpeTest[2] = {7.5,8}; + ropeFlag = false; ropeSign = true; - while(ropeFlag == false){ - forwardTrot(1,levelPosTest,levelSpeTest,0); - } + bool alta; + alta = forwardTrot2(levelPosTest,levelSpeTest,0); + ropeTouch.pulsewidth_us(2400); ropeSign = false; moveSpeed = 6; - setSite(0, 200, 60, 180); - setSite(1, 200, 160, 180); - setSite(2, 200, -10, 180); - setSite(3, 200, -110, 180); + int f1; + int f2; + int b1; + int b2; + if(alta == true){ + f1 = 0; + f2 = 1; + b1 = 3; + b2 = 2; + }else{ + f1 = 1; + f2 = 0; + b1 = 2; + b2 = 3; + } + + setSite(f1, 200, 60, 180); + setSite(f2, 200, 160, 180); + + setSite(b2, 200, -10, 180); + setSite(b1, 200, -110, 180); allMotionWait(); - setSite(0, 200, 0, 30); - setSite(1, 200, 160, 180); - setSite(2, 200, -10, 180); - setSite(3, 200, -110, 30); - allMotionWait(); - - setSite(0, 250, 160, 30); - setSite(1, 200, 60, 180); - setSite(2, 200, -110, 180); - setSite(3, 200, -10, 180); - allMotionWait(); - - setSite(0, 250, 100, 180); - - setSite(0, 250, 100, 200); - setSite(1, 200, 0, 30); - setSite(2, 200, -110, 30); - setSite(3, 200, -10, 200); + setSite(f1, 200, 0, 30); + setSite(f2, 200, 160, 180); + setSite(b2, 200, -10, 180); + setSite(b1, 200, -110, 30); allMotionWait(); - setSite(0, 200, 60, 180); - setSite(1, 200, 220, 30); - setSite(2, 200, -10, 180); - setSite(3, 200, -110, 180); + setSite(f1, 250, 160, 30); + setSite(f2, 200, 60, 180); + setSite(b2, 200, -110, 180); + setSite(b1, 200, -10, 180); + allMotionWait(); + + setSite(f1, 250, 100, 180); + + setSite(f1, 250, 100, 200); + setSite(f2, 200, 0, 30); + setSite(b2, 200, -110, 30); + setSite(b1, 200, -10, 200); allMotionWait(); - setSite(1, 200, 300, 180); + setSite(f1, 200, 60, 180); + setSite(f2, 200, 220, 30); + setSite(b2, 200, -10, 180); + setSite(b1, 200, -110, 180); + allMotionWait(); + + setSite(f2, 200, 300, 180); allMotionWait(); - - forwardTrot(1,levelPosTest,levelSpeTest,0); - moveSpeed = 6.5; - setSite(0, 200, -20, 240); - setSite(1, 200, 80, 240); - setSite(2, 200, -190, 260); - setSite(3, 200, -190, 260); + + forwardTrot(1,levelPosTest,levelSpeTest,0,alta); + moveSpeed = 9.0; + setSite(f1, 200, -20, 240); + setSite(f2, 200, 80, 240); + setSite(b2, 200, -190, 260); + setSite(b1, 200, -190, 260); allMotionWait(); - setSite(3, 200, -300, 30); + setSite(b1, 200, -300, 30); allMotionWait(); - setSite(3, 200, 0, 30); + setSite(b1, 200, 0, 30); allMotionWait(); - setSite(3, 200, 0, 260); + setSite(b1, 200, 0, 260); allMotionWait(); - setSite(0, 200, -40, 230); - setSite(1, 200, 60, 230); - setSite(2, 200, -180, 260); - setSite(3, 200, -100, 260); + setSite(f1, 230, -40, 230); + setSite(f2, 200, 60, 230); + setSite(b2, 200, -180, 260); + setSite(b1, 200, -100, 260); allMotionWait(); - setSite(2, 200, -300, 30); + setSite(b2, 200, -300, 30); allMotionWait(); - setSite(2, 200, 0, 30); + setSite(b2, 200, 0, 30); allMotionWait(); - setSite(2, 200, 0, 260); + setSite(b2, 200, 0, 260); allMotionWait(); ropeFlag = false; + return alta; } //初期姿勢 void initPos(){ @@ -537,8 +663,8 @@ update.attach(&siteUpdate,0.02);//20msごとに座標値更新 //wait(20.0); setSite(0, 200, 30, 160); - setSite(1, 200, 160, 160); - setSite(2, 200, -30, 170); + setSite(1, 200, 175, 160); + setSite(2, 200, -15, 170); setSite(3, 200, -160, 170); allMotionWait(); //while(1){}; @@ -565,49 +691,74 @@ float levelPosTest[8] = {200,30,-160,160,170,145,60,70}; float levelSpeTest[2] = {9.0,10}; if(retry.read() == false){ - //段差前 - forwardTrot(10,levelPosTest,levelSpeTest,flatCurve1); - forwardTrot(2,levelPosTest,levelSpeTest,flatCurve2); - //段差 - stepOver(); - forwardTrot(3,levelPosTest,levelSpeTest,0); - moveSpeed = 6; - setSite(0, 200, 30, 160); - setSite(1, 200, 160, 160); - setSite(2, 200, -30, 170); - setSite(3, 200, -160, 170); - allMotionWait(); - while(1){ - if(retry.read() == true){ - break; + //段差前 + forwardTrot(10,levelPosTest,levelSpeTest,flatCurve1); + forwardTrot(2,levelPosTest,levelSpeTest,flatCurve2); + //段差乗り越え + stepOver(); + forwardTrot(3,levelPosTest,levelSpeTest,0); + moveSpeed = 6; + //リトライ待機 + setSite(0, 200, 30, 160); + setSite(1, 200, 175, 160); + setSite(2, 200, -15, 170); + setSite(3, 200, -160, 170); + allMotionWait(); + while(1){ + if(retry.read() == true){ + break; + } } - } wait(0.5); - ropeTouch.pulsewidth_us(600); - forwardTrot(4,levelPosTest,levelSpeTest,-35); - //forwardTrot(2,levelPosTest,levelSpeTest,4); + //ロープ + ropeTouch.pulsewidth_us(700); + forwardTrot(2,levelPosTest,levelSpeTest,ropeClab2); + Turn(2,levelPosTest,levelSpeTest,1); ropeOver(); - float levelPosTest2[8] = {200,60,-140,160,170,80,70,80}; - rightMove(2,levelPosTest2,levelSpeTest,85); - forwardTrot(1,levelPosTest,levelSpeTest,10); - ropeFlag = false; + ropeTouch.pulsewidth_us(700); + float levelPosTest2[8] = {200,60,-140,160,170,0,60,70}; + float levelSpeTest2[2] = {8.0,10}; + clabWalk(clabCount,levelPosTest2,levelSpeTest2,ropeClab1); + Turn(1,levelPosTest,levelSpeTest,ropeClab2); ropeOver(); - forwardTrot(7,levelPosTest,levelSpeTest,0); + forwardTrot(1,levelPosTest,levelSpeTest,0); + //坂 + while(true){ + if(sw.read() == false){ + break; + } } - else{ - //forwardTrot(2,levelPosTest,levelSpeTest,17); - ropeTouch.pulsewidth_us(600); - forwardTrot(4,levelPosTest,levelSpeTest,-35); - //forwardTrot(2,levelPosTest,levelSpeTest,4); + wait(1.0); + setSite(0, 200, 30, 150); + setSite(1, 200, 170, 150); + setSite(2, 200, -30, 180);//-70 + setSite(3, 200, -30, 180);//-70 + allMotionWait(); + update.detach(); + wait(0.1); + servo[0].move(5,slopeLack2);//持ち上げ機構初期位置へ + wait(0.1); + servo[0].speed(4,40); + wait(0.005); + servo[0].move(4,slopeLack1); + wait(0.1); + + + }else{ + ropeTouch.pulsewidth_us(700); + forwardTrot(2,levelPosTest,levelSpeTest,0); + Turn(2,levelPosTest,levelSpeTest,ropeClab2); ropeOver(); - float levelPosTest2[8] = {200,60,-140,160,170,80,70,80}; - rightMove(2,levelPosTest2,levelSpeTest,85); - forwardTrot(1,levelPosTest,levelSpeTest,10); - ropeFlag = false; + ropeTouch.pulsewidth_us(700); + float levelPosTest2[8] = {200,60,-140,160,170,0,60,70}; + float levelSpeTest2[2] = {8.0,10}; + clabWalk(clabCount,levelPosTest2,levelSpeTest2,ropeClab1); + Turn(1,levelPosTest,levelSpeTest,ropeClab2); ropeOver(); - forwardTrot(7,levelPosTest,levelSpeTest,0); + forwardTrot(1,levelPosTest,levelSpeTest,0); } + //---------------------------------------------------------- wait(10); } @@ -674,13 +825,14 @@ allMotionWait(); - float slopePosTest[8] = {210,170,-20,150,130,-130,110,50}; + float slopePosTest[8] = {210,170,-20,140,130,-130,110,60}; float slopeSpeTest[8] = {7,7}; float lackUpPos[8] = {170,150,-150,390,390,0,0,0}; float lackUpSpe[2] = {4.3,4}; - backTrot(4,slopePosTest,slopeSpeTest,25); - backTrot(6,slopePosTest,slopeSpeTest,2); + //backTrot(10,slopePosTest,slopeSpeTest,0); + backTrot(4,slopePosTest,slopeSpeTest,15); + backTrot(6,slopePosTest,slopeSpeTest,0); standUp(lackUpPos,lackUpSpe); lackUp(slopeLack1,slopeLack2);