nhk2019
Dependencies: mbed kondoSerialServo
main.cpp
- Committer:
- kenken0721
- Date:
- 2019-05-24
- Revision:
- 4:e66bd933bafa
- Parent:
- 3:0366c1adc510
File content as of revision 4:e66bd933bafa:
#include "mbed.h" #include "SerialServo.h" //Serial pc(USBTX,USBRX);//デバック用シリアル Ticker update;//現在地座標の更新割り込み SerialServo servo[4] = {SerialServo(PC_4,PC_5),//serial1 SerialServo(PA_2,PA_3),//serial5 //SerialServo(PC_10,PC_11),//serial5 SerialServo(PB_10,PB_11),//serial3 SerialServo(PC_12,PD_2)};//serial4 PwmOut ropeTouch(PA_13);//タッチセンサ位置切り替え DigitalIn sw(PC_1);//平地と坂の切り替え DigitalIn start(PA_0);//gerege受け取り時の合図 DigitalIn touch(PA_1);//糸探知用タッチセンサ DigitalIn retry(PC_13); DigitalIn color(PC_0);//赤、青モード切替 //---非接触合図(超音波センサー)--- DigitalOut trig(PA_4); InterruptIn echo(PB_0); Timer timer; //DigitalOut Led(PA_5);//スタート合図 //----------------------------- float initLack1; float initLack2; int flatCurve1; int flatCurve2; float slopeLack1; float slopeLack2; int ropeCurve1; int ropeCurve2; int ropeClab1; int ropeClab2; int clabCount; //----------------------------- const float PI = 3.1415926; bool modeFlag = true; bool ropeFlag = false; bool ropeSign = false; int ropeCount = 0; //---各足の長さ---- const float L1 = 76; const float L2 = 168; const float L3 = 252; //移動速度 float moveSpeed = 1; //現在の座標 float currentSite[4][3]; //次の座標 float nextSite[4][3]; //値更新用スピード float tempSpeed[4][3]; //現在の角度 float currentAngle[4][3]; //現在の周波数 int currentPulse[4][3]; float fmap(float x, float in_min, float in_max, float out_min, float out_max){ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } //----------色に合わせて初期化------------- void initRed(){//左側 initLack1 = 7600; initLack2 = 3500; flatCurve1 = 0; flatCurve2 = 15; slopeLack1 = 9700;//9700 slopeLack2 = 3800; ropeCurve1 = -20; ropeCurve2 = -50; ropeClab1 = 70; ropeClab2 = 1; clabCount = 2; } void initBlue(){//右側 initLack1 = 7600; initLack2 = 11500; flatCurve1 = -7; flatCurve2 = -17; slopeLack1 = 9700; slopeLack2 = 11100; ropeCurve1 = 15; ropeCurve2 = 50; ropeClab1 = -40; ropeClab2 = 0; clabCount = 2; } //-------------------------------------- //----------超音波センサー用関数------------ float Distance = 0; void pulseRise(){ timer.start(); } void pulseFall(){ timer.stop(); Distance = timer.read_us(); timer.reset(); } //-------------------------------------- //座標指定 void setSite(int leg, float x, float y, float z){ float length[3] = {0.0,0.0,0.0}; length[0] = x - currentSite[leg][0]; length[1] = y - currentSite[leg][1]; length[2] = z - currentSite[leg][2]; float L = sqrt(pow(length[0],2)+pow(length[1],2)+pow(length[2],2)); tempSpeed[leg][0] = (length[0]/L)*moveSpeed; tempSpeed[leg][1] = (length[1]/L)*moveSpeed; tempSpeed[leg][2] = (length[2]/L)*moveSpeed; nextSite[leg][0] = x; nextSite[leg][1] = y; nextSite[leg][2] = z; } void toAngle(int leg){ float x = currentSite[leg][0]; float y = currentSite[leg][1]; float z = currentSite[leg][2]; float L = sqrt((x*x)+(y*y)); float w = L - L1; float v = sqrt((w*w)+(z*z)); float alpha = atan2(z,w) - acos(((v*v)+(L2*L2)-(L3*L3))/(2*L2*v)); float beta = PI - acos(((L2*L2) + (L3*L3) - (v*v))/(2*L2*L3)); float gamma = atan2(y, x); currentAngle[leg][0] = gamma = (gamma / PI * 180); currentAngle[leg][1] = alpha = (alpha / PI * 180); currentAngle[leg][2] = beta = (beta / PI * 180); } 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)+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)-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)+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));//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++){ servo[j].move(i+1,int(currentPulse[j][i])); wait_us(100); } wait_us(400); } } void siteUpdate(){ if(ropeSign == true){ 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++){ float siteLength = abs(currentSite[i][j] - nextSite[i][j]); if( siteLength >= abs(tempSpeed[i][j])) currentSite[i][j] += tempSpeed[i][j]; else currentSite[i][j] = nextSite[i][j]; } toAngle(i); } toPulse(); } void motionWait(int leg){ bool flag = false; while(flag == false){ wait_us(1); if(currentSite[leg][0] == nextSite[leg][0]){ if(currentSite[leg][1] == nextSite[leg][1]){ if(currentSite[leg][2] == nextSite[leg][2]){ flag = true; } } } } } //すべての足が動き終わるまで待機 void allMotionWait(){ for(int i=0;i<4;i++){ motionWait(i); } } //------------------歩行モーション------------------------------------ //静歩行 //座位 void standDown(float *pos,float *speed){ moveSpeed = speed[0]; setSite(0, pos[0], pos[1], pos[3]); setSite(1, pos[0], pos[1], pos[3]); setSite(2, pos[0], pos[2], pos[4]); setSite(3, pos[0], pos[2], pos[4]); allMotionWait(); } //直立姿勢 void standUp(float *pos,float *speed){ moveSpeed = speed[0]; setSite(0, pos[0], pos[1], pos[3]); setSite(1, pos[0], pos[1], pos[3]); setSite(2, pos[0], pos[2], pos[4]); setSite(3, pos[0], pos[2], pos[4]); allMotionWait(); } void Turn(unsigned int count,float *pos, float *speed,bool direction){ moveSpeed = speed[0]; float stepRY = 0; float stepLY = 0; if(direction == 0){ stepRY = pos[5]; }else{ stepLY = pos[5]; } while(count-- > 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(); //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(); } } //トロット歩容 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 setSite(0, pos[0]+turn, pos[1] + pos[5], pos[3]-pos[6]); setSite(1, pos[0], pos[1], pos[3]); setSite(2, pos[0], pos[2], pos[4]); setSite(3, pos[0]-turn, pos[2] + pos[5], pos[4]-pos[7]); allMotionWait(); setSite(0, pos[0]+turn, pos[1] + pos[5], pos[3]); setSite(3, pos[0]-turn, pos[2] + pos[5], pos[4]); allMotionWait(); //1,2 setSite(0, pos[0], pos[1], pos[3]); setSite(1, pos[0]-turn, pos[1] + pos[5], pos[3]-pos[6]); setSite(2, pos[0]+turn, pos[2] + pos[5], pos[4]-pos[7]); setSite(3, pos[0], pos[2], pos[4]); allMotionWait(); setSite(1, pos[0]-turn, pos[1] + pos[5], pos[3]); setSite(2, pos[0]+turn, pos[2] + pos[5], pos[4]); allMotionWait(); } } void backTrot(unsigned int count,float *pos,float *speed, float turn){ float stepRY = pos[5]; float stepLY = pos[5]; if(turn > 0){ stepRY += turn; stepLY -= turn; }else if(turn < 0){ stepRY += turn; stepLY -= turn; } moveSpeed = speed[0]; while(count-- > 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(); //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(); } } void stepOver(){ moveSpeed = 8;//-30 setSite(0, 200, 20, 250); setSite(1, 200, 155, 250); setSite(2, 200, -25, 250); setSite(3, 200, -160, 250); allMotionWait(); setSite(0, 200, -20, 30); allMotionWait(); setSite(0, 200, 200, 30); allMotionWait(); setSite(0, 200, 200, 140); allMotionWait(); setSite(1, 200, 30, 30); allMotionWait(); setSite(1, 200, 270, 30); allMotionWait(); setSite(1, 200, 270, 140); allMotionWait(); float stepPosTest[8] = {200,10,-150,110,250,70,60,80}; float stepSpeTest[2] = {7,5}; forwardTrot(2,stepPosTest,stepSpeTest,0); moveSpeed = 8; setSite(2, 200, -200, 30); allMotionWait(); setSite(2, 200, 40, 30); allMotionWait(); setSite(2, 200, 40, 140); allMotionWait(); setSite(0, 200, 105, 30); allMotionWait(); setSite(0, 200, 280, 30); allMotionWait(); setSite(0, 200, 280, 240); allMotionWait(); moveSpeed = 7; setSite(0, 200, 180, 230);//80 setSite(1, 200, -20, 140); setSite(2, 200, -70, 140);//-80 setSite(3, 200, -240, 240); allMotionWait(); moveSpeed = 8; setSite(3, 200, -250, 30); allMotionWait(); setSite(3, 200, -150, 30); allMotionWait(); setSite(3, 200, -150, 140);//-150 allMotionWait(); setSite(1, 200, -10, 30); allMotionWait(); setSite(1, 200, 250, 30); allMotionWait(); setSite(1, 200, 250, 240);//150 allMotionWait(); float stepPosTest2[8] = {200,30,-150,250,140,100,60,120}; float stepSpeTest2[2] = {7,6}; forwardTrot(1,stepPosTest2,stepSpeTest2,0); float stepPosTest3[8] = {200,30,-120,200,180,100,60,140}; float stepSpeTest3[2] = {7,6}; forwardTrot(1,stepPosTest3,stepSpeTest3,0); } bool ropeOver(){ float levelPosTest[8] = {200,30,-160,160,170,145,60,70}; float levelSpeTest[2] = {7.5,8}; ropeFlag = false; ropeSign = true; bool alta; alta = forwardTrot2(levelPosTest,levelSpeTest,0); ropeTouch.pulsewidth_us(2400); ropeSign = false; moveSpeed = 6; 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(f1, 200, 0, 30); setSite(f2, 200, 160, 180); setSite(b2, 200, -10, 180); setSite(b1, 200, -110, 30); allMotionWait(); 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(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,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(b1, 200, -300, 30); allMotionWait(); setSite(b1, 200, 0, 30); allMotionWait(); setSite(b1, 200, 0, 260); allMotionWait(); setSite(f1, 230, -40, 230); setSite(f2, 200, 60, 230); setSite(b2, 200, -180, 260); setSite(b1, 200, -100, 260); allMotionWait(); setSite(b2, 200, -300, 30); allMotionWait(); setSite(b2, 200, 0, 30); allMotionWait(); setSite(b2, 200, 0, 260); allMotionWait(); ropeFlag = false; return alta; } //初期姿勢 void initPos(){ moveSpeed = 1; float pos[3] = {150,0,100}; for(int i=0;i<4;i++){ for(int j=0;j<3;j++){ currentSite[i][j] = pos[j]; nextSite[i][j] = pos[j]; } } } //7680,10100 //5800,9600 void lackUp(float initPos1,float initPos2){ //1->10170,2->7500 update.detach(); float pos1 = initPos1; float pos2 = initPos2; float sum1 = float((10170.0 - float(initPos1))/1000.0); float sum2 = float((7500.0 - float(initPos2))/1000.0); for(int i=0;i<1000;i++){ pos1 = pos1 + sum1; pos2 = pos2 + sum2; servo[0].move(4,int(pos1)); servo[0].move(5,int(pos2)); wait(0.0008); } } //--------------------------------------------------------------- int main() { //Led = 0; ropeTouch.pulsewidth_us(2400); for(int i=0;i<4;i++){ servo[i].init(); } //------赤、青モード決定------------- color.mode(PullUp); int colorCount = 0; for(int i=0;i<100;i++){ if(color.read() == true){ colorCount++; }else{ colorCount--; } if(colorCount >= 0) initRed(); else initBlue(); } //-------------------------------- //------平地と坂のモード決定---------- sw.mode(PullUp); int modeCount = 0; while(1){ if(sw.read() == true){ modeCount++; }else{ modeCount--; } if(modeCount >= 100){ modeFlag = true; break; }else if(modeCount <= -100){ modeFlag = false; break; } } //-------------------------------- //---------平地モード--------------- if(modeFlag == true){ retry.mode(PullUp); servo[0].move(4,initLack1);//持ち上げ機構初期位置へ wait(0.1); servo[0].move(5,initLack2);//持ち上げ機構初期位置へ initPos();//スタート姿勢 update.attach(&siteUpdate,0.02);//20msごとに座標値更新 //wait(20.0); setSite(0, 200, 30, 160); setSite(1, 200, 175, 160); setSite(2, 200, -15, 170); setSite(3, 200, -160, 170); allMotionWait(); //while(1){}; wait(5.0); //----------ゲルゲ受け取り待機------------- bool flag = false; int count = 0; while(flag == false){ if(int(start.read()) == false){ count++; }else{ count--; } if(count >= 5000){ flag = true; }else if(count <= 0){ flag = false; count = 0; } } wait(0.2); //Led = 1; //-------スタート-------------------- 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, 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(700); forwardTrot(2,levelPosTest,levelSpeTest,ropeClab2); Turn(2,levelPosTest,levelSpeTest,1); ropeOver(); 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(1,levelPosTest,levelSpeTest,0); //坂 while(true){ if(sw.read() == false){ break; } } 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(); 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(1,levelPosTest,levelSpeTest,0); } //---------------------------------------------------------- wait(10); } //---------坂モード----------------- else{ servo[0].move(4,initLack1);//持ち上げ機構初期位置へ wait(0.1); servo[0].move(5,slopeLack2);//持ち上げ機構初期位置へ initPos();//スタート姿勢 update.attach(&siteUpdate,0.02);//20msごとに座標値更新 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(); //----------非接触合図待機----------------- trig = 0; echo.rise(&pulseRise); echo.fall(&pulseFall); bool flag = false; int count = 0; timer.reset(); while(flag == false){ trig = 0; wait_us(1); trig = 1; wait_us(11); trig = 0; wait_us(1); wait(0.01); if(Distance <= 250) count++; if(count >= 30) flag = true; } echo.rise(NULL); echo.fall(NULL); //Led = 1; servo[0].speed(4,40); wait(0.005); servo[0].move(4,slopeLack1); wait(0.1); //while(1){} update.attach(&siteUpdate,0.02);//20msごとに座標値更新 //-----スタート------------------- moveSpeed = 8; setSite(2, 200, 0, 50); allMotionWait(); setSite(2, 200, -200, 50); allMotionWait(); setSite(2, 200, -200, 160); allMotionWait(); setSite(3, 200, 0, 50); allMotionWait(); setSite(3, 200, -120, 50); allMotionWait(); setSite(3, 200, -90, 160); allMotionWait(); 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(10,slopePosTest,slopeSpeTest,0); backTrot(4,slopePosTest,slopeSpeTest,15); backTrot(6,slopePosTest,slopeSpeTest,0); standUp(lackUpPos,lackUpSpe); lackUp(slopeLack1,slopeLack2); } }