nhk2019
Dependencies: mbed kondoSerialServo
main.cpp@2:6140746e19b1, 2019-05-01 (annotated)
- Committer:
- kenken0721
- Date:
- Wed May 01 03:47:34 2019 +0000
- Revision:
- 2:6140746e19b1
- Parent:
- 1:5fb6895ad8e6
- Child:
- 3:0366c1adc510
nhk2019;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenken0721 | 0:ffe56c419abd | 1 | #include "mbed.h" |
kenken0721 | 0:ffe56c419abd | 2 | #include "SerialServo.h" |
kenken0721 | 0:ffe56c419abd | 3 | |
kenken0721 | 1:5fb6895ad8e6 | 4 | //Serial pc(USBTX,USBRX);//デバック用シリアル |
kenken0721 | 0:ffe56c419abd | 5 | Ticker update;//現在地座標の更新割り込み |
kenken0721 | 0:ffe56c419abd | 6 | |
kenken0721 | 1:5fb6895ad8e6 | 7 | SerialServo servo[4] = {SerialServo(PC_4,PC_5),//serial1 |
kenken0721 | 1:5fb6895ad8e6 | 8 | SerialServo(PA_2,PA_3),//serial5 |
kenken0721 | 1:5fb6895ad8e6 | 9 | //SerialServo(PC_10,PC_11),//serial5 |
kenken0721 | 1:5fb6895ad8e6 | 10 | SerialServo(PB_10,PB_11),//serial3 |
kenken0721 | 1:5fb6895ad8e6 | 11 | SerialServo(PC_12,PD_2)};//serial4 |
kenken0721 | 0:ffe56c419abd | 12 | |
kenken0721 | 0:ffe56c419abd | 13 | |
kenken0721 | 2:6140746e19b1 | 14 | PwmOut ropeTouch(PA_13);//タッチセンサ位置切り替え |
kenken0721 | 2:6140746e19b1 | 15 | DigitalIn sw(PC_1);//平地と坂の切り替え |
kenken0721 | 2:6140746e19b1 | 16 | DigitalIn start(PA_0);//gerege受け取り時の合図 |
kenken0721 | 2:6140746e19b1 | 17 | DigitalIn touch(PA_1);//糸探知用タッチセンサ |
kenken0721 | 2:6140746e19b1 | 18 | DigitalIn retry(PC_13); |
kenken0721 | 2:6140746e19b1 | 19 | DigitalIn color(PC_0);//赤、青モード切替 |
kenken0721 | 2:6140746e19b1 | 20 | |
kenken0721 | 2:6140746e19b1 | 21 | //---非接触合図(超音波センサー)--- |
kenken0721 | 2:6140746e19b1 | 22 | DigitalOut trig(PA_4); |
kenken0721 | 2:6140746e19b1 | 23 | InterruptIn echo(PB_0); |
kenken0721 | 2:6140746e19b1 | 24 | Timer timer; |
kenken0721 | 2:6140746e19b1 | 25 | DigitalOut Led(PA_5);//スタート合図 |
kenken0721 | 2:6140746e19b1 | 26 | |
kenken0721 | 1:5fb6895ad8e6 | 27 | const float PI = 3.1415926; |
kenken0721 | 2:6140746e19b1 | 28 | bool modeFlag = true; |
kenken0721 | 2:6140746e19b1 | 29 | bool ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 30 | bool ropeSign = false; |
kenken0721 | 2:6140746e19b1 | 31 | int ropeCount = 0; |
kenken0721 | 0:ffe56c419abd | 32 | |
kenken0721 | 0:ffe56c419abd | 33 | //---各足の長さ---- |
kenken0721 | 0:ffe56c419abd | 34 | const float L1 = 76; |
kenken0721 | 1:5fb6895ad8e6 | 35 | const float L2 = 168; |
kenken0721 | 1:5fb6895ad8e6 | 36 | const float L3 = 252; |
kenken0721 | 0:ffe56c419abd | 37 | |
kenken0721 | 2:6140746e19b1 | 38 | //移動速度 |
kenken0721 | 1:5fb6895ad8e6 | 39 | float moveSpeed = 1; |
kenken0721 | 0:ffe56c419abd | 40 | //現在の座標 |
kenken0721 | 0:ffe56c419abd | 41 | float currentSite[4][3]; |
kenken0721 | 0:ffe56c419abd | 42 | //次の座標 |
kenken0721 | 0:ffe56c419abd | 43 | float nextSite[4][3]; |
kenken0721 | 0:ffe56c419abd | 44 | //値更新用スピード |
kenken0721 | 0:ffe56c419abd | 45 | float tempSpeed[4][3]; |
kenken0721 | 0:ffe56c419abd | 46 | //現在の角度 |
kenken0721 | 0:ffe56c419abd | 47 | float currentAngle[4][3]; |
kenken0721 | 0:ffe56c419abd | 48 | //現在の周波数 |
kenken0721 | 0:ffe56c419abd | 49 | int currentPulse[4][3]; |
kenken0721 | 0:ffe56c419abd | 50 | |
kenken0721 | 0:ffe56c419abd | 51 | float fmap(float x, float in_min, float in_max, float out_min, float out_max){ |
kenken0721 | 0:ffe56c419abd | 52 | return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; |
kenken0721 | 0:ffe56c419abd | 53 | } |
kenken0721 | 0:ffe56c419abd | 54 | |
kenken0721 | 2:6140746e19b1 | 55 | //----------超音波センサー用関数------------ |
kenken0721 | 2:6140746e19b1 | 56 | float Distance = 0; |
kenken0721 | 2:6140746e19b1 | 57 | void pulseRise(){ |
kenken0721 | 2:6140746e19b1 | 58 | timer.start(); |
kenken0721 | 2:6140746e19b1 | 59 | } |
kenken0721 | 2:6140746e19b1 | 60 | void pulseFall(){ |
kenken0721 | 2:6140746e19b1 | 61 | timer.stop(); |
kenken0721 | 2:6140746e19b1 | 62 | Distance = timer.read_us(); |
kenken0721 | 2:6140746e19b1 | 63 | timer.reset(); |
kenken0721 | 2:6140746e19b1 | 64 | } |
kenken0721 | 2:6140746e19b1 | 65 | //-------------------------------------- |
kenken0721 | 0:ffe56c419abd | 66 | //座標指定 |
kenken0721 | 1:5fb6895ad8e6 | 67 | void setSite(int leg, float x, float y, float z){ |
kenken0721 | 0:ffe56c419abd | 68 | float length[3] = {0.0,0.0,0.0}; |
kenken0721 | 0:ffe56c419abd | 69 | length[0] = x - currentSite[leg][0]; |
kenken0721 | 0:ffe56c419abd | 70 | length[1] = y - currentSite[leg][1]; |
kenken0721 | 0:ffe56c419abd | 71 | length[2] = z - currentSite[leg][2]; |
kenken0721 | 0:ffe56c419abd | 72 | float L = sqrt(pow(length[0],2)+pow(length[1],2)+pow(length[2],2)); |
kenken0721 | 0:ffe56c419abd | 73 | tempSpeed[leg][0] = (length[0]/L)*moveSpeed; |
kenken0721 | 0:ffe56c419abd | 74 | tempSpeed[leg][1] = (length[1]/L)*moveSpeed; |
kenken0721 | 0:ffe56c419abd | 75 | tempSpeed[leg][2] = (length[2]/L)*moveSpeed; |
kenken0721 | 0:ffe56c419abd | 76 | nextSite[leg][0] = x; |
kenken0721 | 0:ffe56c419abd | 77 | nextSite[leg][1] = y; |
kenken0721 | 0:ffe56c419abd | 78 | nextSite[leg][2] = z; |
kenken0721 | 0:ffe56c419abd | 79 | } |
kenken0721 | 0:ffe56c419abd | 80 | |
kenken0721 | 0:ffe56c419abd | 81 | void toAngle(int leg){ |
kenken0721 | 0:ffe56c419abd | 82 | float x = currentSite[leg][0]; |
kenken0721 | 0:ffe56c419abd | 83 | float y = currentSite[leg][1]; |
kenken0721 | 0:ffe56c419abd | 84 | float z = currentSite[leg][2]; |
kenken0721 | 0:ffe56c419abd | 85 | float L = sqrt((x*x)+(y*y)); |
kenken0721 | 0:ffe56c419abd | 86 | float w = L - L1; |
kenken0721 | 0:ffe56c419abd | 87 | float v = sqrt((w*w)+(z*z)); |
kenken0721 | 0:ffe56c419abd | 88 | float alpha = atan2(z,w) - acos(((v*v)+(L2*L2)-(L3*L3))/(2*L2*v)); |
kenken0721 | 0:ffe56c419abd | 89 | float beta = PI - acos(((L2*L2) + (L3*L3) - (v*v))/(2*L2*L3)); |
kenken0721 | 0:ffe56c419abd | 90 | float gamma = atan2(y, x); |
kenken0721 | 0:ffe56c419abd | 91 | currentAngle[leg][0] = gamma = (gamma / PI * 180); |
kenken0721 | 0:ffe56c419abd | 92 | currentAngle[leg][1] = alpha = (alpha / PI * 180); |
kenken0721 | 0:ffe56c419abd | 93 | currentAngle[leg][2] = beta = (beta / PI * 180); |
kenken0721 | 0:ffe56c419abd | 94 | } |
kenken0721 | 0:ffe56c419abd | 95 | |
kenken0721 | 1:5fb6895ad8e6 | 96 | |
kenken0721 | 1:5fb6895ad8e6 | 97 | void toPulse(){ |
kenken0721 | 1:5fb6895ad8e6 | 98 | //右前足 |
kenken0721 | 2:6140746e19b1 | 99 | currentPulse[0][0] = int(fmap(currentAngle[0][0],-135,135,11500,3500)); |
kenken0721 | 2:6140746e19b1 | 100 | currentPulse[0][1] = int(fmap(currentAngle[0][1],-135,135,11500,3500)+200); |
kenken0721 | 1:5fb6895ad8e6 | 101 | currentPulse[0][2] = int(fmap(currentAngle[0][2],0,270,3500,11500)); |
kenken0721 | 1:5fb6895ad8e6 | 102 | //左前足 |
kenken0721 | 2:6140746e19b1 | 103 | currentPulse[1][0] = int(fmap(currentAngle[1][0],-135,135,3500,11500)-100); |
kenken0721 | 1:5fb6895ad8e6 | 104 | currentPulse[1][1] = int(fmap(currentAngle[1][1],-135,135,11500,3500)-200); |
kenken0721 | 2:6140746e19b1 | 105 | currentPulse[1][2] = int(fmap(currentAngle[1][2],0,270,3500,11500)-350); |
kenken0721 | 1:5fb6895ad8e6 | 106 | //右後足 |
kenken0721 | 2:6140746e19b1 | 107 | currentPulse[2][0] = int(fmap(currentAngle[2][0],-135,135,11500,3500)); |
kenken0721 | 2:6140746e19b1 | 108 | currentPulse[2][1] = int(fmap(currentAngle[2][1],-135,135,11500,3500)); |
kenken0721 | 1:5fb6895ad8e6 | 109 | currentPulse[2][2] = int(fmap(currentAngle[2][2],0,270,3500,11500)); |
kenken0721 | 1:5fb6895ad8e6 | 110 | //左後足 |
kenken0721 | 2:6140746e19b1 | 111 | currentPulse[3][0] = int(fmap(currentAngle[3][0],-135,135,3500,11500)+100); |
kenken0721 | 1:5fb6895ad8e6 | 112 | currentPulse[3][1] = int(fmap(currentAngle[3][1],-135,135,11500,3500)); |
kenken0721 | 2:6140746e19b1 | 113 | currentPulse[3][2] = int(fmap(currentAngle[3][2],0,270,3500,11500)); |
kenken0721 | 1:5fb6895ad8e6 | 114 | |
kenken0721 | 1:5fb6895ad8e6 | 115 | for(int i=0;i<3;i++){ |
kenken0721 | 1:5fb6895ad8e6 | 116 | for(int j=0;j<4;j++){ |
kenken0721 | 1:5fb6895ad8e6 | 117 | servo[j].move(i+1,int(currentPulse[j][i])); |
kenken0721 | 1:5fb6895ad8e6 | 118 | wait_us(100); |
kenken0721 | 0:ffe56c419abd | 119 | } |
kenken0721 | 1:5fb6895ad8e6 | 120 | wait_us(400); |
kenken0721 | 0:ffe56c419abd | 121 | } |
kenken0721 | 0:ffe56c419abd | 122 | } |
kenken0721 | 0:ffe56c419abd | 123 | |
kenken0721 | 0:ffe56c419abd | 124 | void siteUpdate(){ |
kenken0721 | 2:6140746e19b1 | 125 | if(ropeSign == true){ |
kenken0721 | 2:6140746e19b1 | 126 | if(touch.read() == 0){ |
kenken0721 | 2:6140746e19b1 | 127 | ropeCount++; |
kenken0721 | 2:6140746e19b1 | 128 | }else{ |
kenken0721 | 2:6140746e19b1 | 129 | ropeCount--; |
kenken0721 | 2:6140746e19b1 | 130 | } |
kenken0721 | 2:6140746e19b1 | 131 | if(ropeCount >= 40){ |
kenken0721 | 2:6140746e19b1 | 132 | ropeFlag = true; |
kenken0721 | 2:6140746e19b1 | 133 | ropeCount = 0; |
kenken0721 | 2:6140746e19b1 | 134 | }else if(ropeCount <= 0){ |
kenken0721 | 2:6140746e19b1 | 135 | ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 136 | ropeCount = 0; |
kenken0721 | 2:6140746e19b1 | 137 | } |
kenken0721 | 2:6140746e19b1 | 138 | } |
kenken0721 | 0:ffe56c419abd | 139 | for(int i=0;i<4;i++){ |
kenken0721 | 0:ffe56c419abd | 140 | for(int j=0;j<3;j++){ |
kenken0721 | 0:ffe56c419abd | 141 | float siteLength = abs(currentSite[i][j] - nextSite[i][j]); |
kenken0721 | 0:ffe56c419abd | 142 | if( siteLength >= abs(tempSpeed[i][j])) |
kenken0721 | 0:ffe56c419abd | 143 | currentSite[i][j] += tempSpeed[i][j]; |
kenken0721 | 0:ffe56c419abd | 144 | else |
kenken0721 | 0:ffe56c419abd | 145 | currentSite[i][j] = nextSite[i][j]; |
kenken0721 | 0:ffe56c419abd | 146 | } |
kenken0721 | 0:ffe56c419abd | 147 | toAngle(i); |
kenken0721 | 0:ffe56c419abd | 148 | } |
kenken0721 | 1:5fb6895ad8e6 | 149 | toPulse(); |
kenken0721 | 0:ffe56c419abd | 150 | } |
kenken0721 | 0:ffe56c419abd | 151 | |
kenken0721 | 0:ffe56c419abd | 152 | void motionWait(int leg){ |
kenken0721 | 0:ffe56c419abd | 153 | bool flag = false; |
kenken0721 | 0:ffe56c419abd | 154 | while(flag == false){ |
kenken0721 | 1:5fb6895ad8e6 | 155 | wait_us(1); |
kenken0721 | 0:ffe56c419abd | 156 | if(currentSite[leg][0] == nextSite[leg][0]){ |
kenken0721 | 0:ffe56c419abd | 157 | if(currentSite[leg][1] == nextSite[leg][1]){ |
kenken0721 | 0:ffe56c419abd | 158 | if(currentSite[leg][2] == nextSite[leg][2]){ |
kenken0721 | 0:ffe56c419abd | 159 | flag = true; |
kenken0721 | 0:ffe56c419abd | 160 | } |
kenken0721 | 0:ffe56c419abd | 161 | } |
kenken0721 | 0:ffe56c419abd | 162 | } |
kenken0721 | 0:ffe56c419abd | 163 | } |
kenken0721 | 0:ffe56c419abd | 164 | } |
kenken0721 | 0:ffe56c419abd | 165 | |
kenken0721 | 0:ffe56c419abd | 166 | //すべての足が動き終わるまで待機 |
kenken0721 | 0:ffe56c419abd | 167 | void allMotionWait(){ |
kenken0721 | 0:ffe56c419abd | 168 | for(int i=0;i<4;i++){ |
kenken0721 | 0:ffe56c419abd | 169 | motionWait(i); |
kenken0721 | 0:ffe56c419abd | 170 | } |
kenken0721 | 0:ffe56c419abd | 171 | } |
kenken0721 | 1:5fb6895ad8e6 | 172 | //------------------歩行モーション------------------------------------ |
kenken0721 | 0:ffe56c419abd | 173 | //静歩行 |
kenken0721 | 2:6140746e19b1 | 174 | |
kenken0721 | 1:5fb6895ad8e6 | 175 | //座位 |
kenken0721 | 1:5fb6895ad8e6 | 176 | void standDown(float *pos,float *speed){ |
kenken0721 | 1:5fb6895ad8e6 | 177 | moveSpeed = speed[0]; |
kenken0721 | 1:5fb6895ad8e6 | 178 | setSite(0, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 179 | setSite(1, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 180 | setSite(2, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 181 | setSite(3, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 182 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 183 | } |
kenken0721 | 1:5fb6895ad8e6 | 184 | //直立姿勢 |
kenken0721 | 1:5fb6895ad8e6 | 185 | void standUp(float *pos,float *speed){ |
kenken0721 | 1:5fb6895ad8e6 | 186 | moveSpeed = speed[0]; |
kenken0721 | 1:5fb6895ad8e6 | 187 | setSite(0, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 188 | setSite(1, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 189 | setSite(2, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 190 | setSite(3, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 191 | allMotionWait(); |
kenken0721 | 0:ffe56c419abd | 192 | } |
kenken0721 | 0:ffe56c419abd | 193 | //トロット歩容 |
kenken0721 | 1:5fb6895ad8e6 | 194 | void forwardTrot(unsigned int count, float *pos, float *speed, float turn){ |
kenken0721 | 1:5fb6895ad8e6 | 195 | float stepRY = pos[5]; |
kenken0721 | 1:5fb6895ad8e6 | 196 | float stepLY = pos[5]; |
kenken0721 | 1:5fb6895ad8e6 | 197 | moveSpeed = speed[0]; |
kenken0721 | 1:5fb6895ad8e6 | 198 | if(turn > 0){ |
kenken0721 | 1:5fb6895ad8e6 | 199 | stepRY += turn; |
kenken0721 | 1:5fb6895ad8e6 | 200 | stepLY -= turn; |
kenken0721 | 1:5fb6895ad8e6 | 201 | }else if(turn < 0){ |
kenken0721 | 1:5fb6895ad8e6 | 202 | stepRY += turn; |
kenken0721 | 1:5fb6895ad8e6 | 203 | stepLY -= turn; |
kenken0721 | 0:ffe56c419abd | 204 | } |
kenken0721 | 0:ffe56c419abd | 205 | while(count-- > 0){ |
kenken0721 | 1:5fb6895ad8e6 | 206 | //0,3 |
kenken0721 | 1:5fb6895ad8e6 | 207 | setSite(0, pos[0], pos[1] + stepRY, pos[3]-pos[6]); |
kenken0721 | 1:5fb6895ad8e6 | 208 | setSite(1, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 209 | setSite(2, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 210 | setSite(3, pos[0], pos[2] + stepLY, pos[4]-pos[7]); |
kenken0721 | 1:5fb6895ad8e6 | 211 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 212 | setSite(0, pos[0], pos[1] + stepRY, pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 213 | setSite(3, pos[0], pos[2] + stepLY, pos[4]); |
kenken0721 | 0:ffe56c419abd | 214 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 215 | //1,2 |
kenken0721 | 1:5fb6895ad8e6 | 216 | setSite(0, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 217 | setSite(1, pos[0], pos[1] + stepLY, pos[3]-pos[6]); |
kenken0721 | 1:5fb6895ad8e6 | 218 | setSite(2, pos[0], pos[2] + stepRY, pos[4]-pos[7]); |
kenken0721 | 1:5fb6895ad8e6 | 219 | setSite(3, pos[0], pos[2], pos[4]); |
kenken0721 | 0:ffe56c419abd | 220 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 221 | setSite(1, pos[0], pos[1] + stepLY, pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 222 | setSite(2, pos[0], pos[2] + stepRY, pos[4]); |
kenken0721 | 0:ffe56c419abd | 223 | allMotionWait(); |
kenken0721 | 0:ffe56c419abd | 224 | } |
kenken0721 | 0:ffe56c419abd | 225 | } |
kenken0721 | 2:6140746e19b1 | 226 | void rightMove(unsigned int count, float *pos, float *speed, float turn){ |
kenken0721 | 2:6140746e19b1 | 227 | moveSpeed = speed[0]; |
kenken0721 | 2:6140746e19b1 | 228 | while(count-- > 0){ |
kenken0721 | 2:6140746e19b1 | 229 | //0,3 |
kenken0721 | 2:6140746e19b1 | 230 | setSite(0, pos[0]+turn, pos[1] + pos[5], pos[3]-pos[6]); |
kenken0721 | 2:6140746e19b1 | 231 | setSite(1, pos[0], pos[1], pos[3]); |
kenken0721 | 2:6140746e19b1 | 232 | setSite(2, pos[0], pos[2], pos[4]); |
kenken0721 | 2:6140746e19b1 | 233 | setSite(3, pos[0]-turn, pos[2] + pos[5], pos[4]-pos[7]); |
kenken0721 | 2:6140746e19b1 | 234 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 235 | setSite(0, pos[0]+turn, pos[1] + pos[5], pos[3]); |
kenken0721 | 2:6140746e19b1 | 236 | setSite(3, pos[0]-turn, pos[2] + pos[5], pos[4]); |
kenken0721 | 2:6140746e19b1 | 237 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 238 | //1,2 |
kenken0721 | 2:6140746e19b1 | 239 | setSite(0, pos[0], pos[1], pos[3]); |
kenken0721 | 2:6140746e19b1 | 240 | setSite(1, pos[0]-turn, pos[1] + pos[5], pos[3]-pos[6]); |
kenken0721 | 2:6140746e19b1 | 241 | setSite(2, pos[0]+turn, pos[2] + pos[5], pos[4]-pos[7]); |
kenken0721 | 2:6140746e19b1 | 242 | setSite(3, pos[0], pos[2], pos[4]); |
kenken0721 | 2:6140746e19b1 | 243 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 244 | setSite(1, pos[0]-turn, pos[1] + pos[5], pos[3]); |
kenken0721 | 2:6140746e19b1 | 245 | setSite(2, pos[0]+turn, pos[2] + pos[5], pos[4]); |
kenken0721 | 2:6140746e19b1 | 246 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 247 | } |
kenken0721 | 2:6140746e19b1 | 248 | } |
kenken0721 | 0:ffe56c419abd | 249 | |
kenken0721 | 2:6140746e19b1 | 250 | void backTrot(unsigned int count,float *pos,float *speed, float turn){ |
kenken0721 | 1:5fb6895ad8e6 | 251 | float stepRY = pos[5]; |
kenken0721 | 1:5fb6895ad8e6 | 252 | float stepLY = pos[5]; |
kenken0721 | 1:5fb6895ad8e6 | 253 | if(turn > 0){ |
kenken0721 | 1:5fb6895ad8e6 | 254 | stepRY += turn; |
kenken0721 | 1:5fb6895ad8e6 | 255 | stepLY -= turn; |
kenken0721 | 1:5fb6895ad8e6 | 256 | }else if(turn < 0){ |
kenken0721 | 1:5fb6895ad8e6 | 257 | stepRY += turn; |
kenken0721 | 1:5fb6895ad8e6 | 258 | stepLY -= turn; |
kenken0721 | 0:ffe56c419abd | 259 | } |
kenken0721 | 1:5fb6895ad8e6 | 260 | moveSpeed = speed[0]; |
kenken0721 | 1:5fb6895ad8e6 | 261 | while(count-- > 0){ |
kenken0721 | 1:5fb6895ad8e6 | 262 | //0,3 |
kenken0721 | 1:5fb6895ad8e6 | 263 | setSite(0, pos[0], pos[1] + stepRY, pos[3]-pos[6]); |
kenken0721 | 1:5fb6895ad8e6 | 264 | setSite(1, pos[0], pos[1], pos[3]); |
kenken0721 | 2:6140746e19b1 | 265 | setSite(2, pos[0], pos[2], pos[4]); |
kenken0721 | 2:6140746e19b1 | 266 | setSite(3, pos[0], pos[2] + stepLY, pos[4]-pos[7]); |
kenken0721 | 1:5fb6895ad8e6 | 267 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 268 | setSite(0, pos[0], pos[1] + stepRY, pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 269 | setSite(3, pos[0], pos[2] + stepLY, pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 270 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 271 | //1,2 |
kenken0721 | 1:5fb6895ad8e6 | 272 | setSite(0, pos[0], pos[1], pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 273 | setSite(1, pos[0], pos[1] + stepLY, pos[3]-pos[6]); |
kenken0721 | 1:5fb6895ad8e6 | 274 | setSite(2, pos[0], pos[2] + stepRY, pos[4]-pos[7]); |
kenken0721 | 2:6140746e19b1 | 275 | setSite(3, pos[0], pos[2], pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 276 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 277 | setSite(1, pos[0], pos[1] + stepLY, pos[3]); |
kenken0721 | 1:5fb6895ad8e6 | 278 | setSite(2, pos[0], pos[2] + stepRY, pos[4]); |
kenken0721 | 1:5fb6895ad8e6 | 279 | allMotionWait(); |
kenken0721 | 1:5fb6895ad8e6 | 280 | } |
kenken0721 | 0:ffe56c419abd | 281 | } |
kenken0721 | 2:6140746e19b1 | 282 | void stepOver(){ |
kenken0721 | 2:6140746e19b1 | 283 | moveSpeed = 8;//-30 |
kenken0721 | 2:6140746e19b1 | 284 | setSite(0, 200, 20, 250); |
kenken0721 | 2:6140746e19b1 | 285 | setSite(1, 200, 155, 250); |
kenken0721 | 2:6140746e19b1 | 286 | setSite(2, 200, -25, 250); |
kenken0721 | 2:6140746e19b1 | 287 | setSite(3, 200, -160, 250); |
kenken0721 | 2:6140746e19b1 | 288 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 289 | |
kenken0721 | 2:6140746e19b1 | 290 | setSite(0, 200, -20, 30); |
kenken0721 | 2:6140746e19b1 | 291 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 292 | setSite(0, 200, 200, 30); |
kenken0721 | 2:6140746e19b1 | 293 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 294 | setSite(0, 200, 200, 140); |
kenken0721 | 2:6140746e19b1 | 295 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 296 | |
kenken0721 | 2:6140746e19b1 | 297 | setSite(1, 200, 30, 30); |
kenken0721 | 2:6140746e19b1 | 298 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 299 | setSite(1, 200, 270, 30); |
kenken0721 | 2:6140746e19b1 | 300 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 301 | setSite(1, 200, 270, 140); |
kenken0721 | 2:6140746e19b1 | 302 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 303 | |
kenken0721 | 2:6140746e19b1 | 304 | float stepPosTest[8] = {200,10,-150,110,250,70,60,80}; |
kenken0721 | 2:6140746e19b1 | 305 | float stepSpeTest[2] = {7,5}; |
kenken0721 | 2:6140746e19b1 | 306 | forwardTrot(2,stepPosTest,stepSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 307 | |
kenken0721 | 2:6140746e19b1 | 308 | moveSpeed = 8; |
kenken0721 | 2:6140746e19b1 | 309 | setSite(2, 200, -200, 30); |
kenken0721 | 2:6140746e19b1 | 310 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 311 | setSite(2, 200, 40, 30); |
kenken0721 | 2:6140746e19b1 | 312 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 313 | setSite(2, 200, 40, 140); |
kenken0721 | 2:6140746e19b1 | 314 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 315 | |
kenken0721 | 2:6140746e19b1 | 316 | setSite(0, 200, 105, 30); |
kenken0721 | 2:6140746e19b1 | 317 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 318 | setSite(0, 200, 280, 30); |
kenken0721 | 2:6140746e19b1 | 319 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 320 | setSite(0, 200, 280, 240); |
kenken0721 | 2:6140746e19b1 | 321 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 322 | |
kenken0721 | 2:6140746e19b1 | 323 | moveSpeed = 7; |
kenken0721 | 2:6140746e19b1 | 324 | setSite(0, 200, 180, 230);//80 |
kenken0721 | 2:6140746e19b1 | 325 | setSite(1, 200, -20, 140); |
kenken0721 | 2:6140746e19b1 | 326 | setSite(2, 200, -70, 140);//-80 |
kenken0721 | 2:6140746e19b1 | 327 | setSite(3, 200, -240, 240); |
kenken0721 | 2:6140746e19b1 | 328 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 329 | |
kenken0721 | 2:6140746e19b1 | 330 | moveSpeed = 8; |
kenken0721 | 2:6140746e19b1 | 331 | setSite(3, 200, -250, 30); |
kenken0721 | 2:6140746e19b1 | 332 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 333 | setSite(3, 200, -150, 30); |
kenken0721 | 2:6140746e19b1 | 334 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 335 | setSite(3, 200, -150, 140);//-150 |
kenken0721 | 2:6140746e19b1 | 336 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 337 | |
kenken0721 | 2:6140746e19b1 | 338 | setSite(1, 200, -10, 30); |
kenken0721 | 2:6140746e19b1 | 339 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 340 | setSite(1, 200, 250, 30); |
kenken0721 | 2:6140746e19b1 | 341 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 342 | setSite(1, 200, 250, 240);//150 |
kenken0721 | 2:6140746e19b1 | 343 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 344 | |
kenken0721 | 2:6140746e19b1 | 345 | float stepPosTest2[8] = {200,30,-150,250,140,100,60,120}; |
kenken0721 | 2:6140746e19b1 | 346 | float stepSpeTest2[2] = {7,6}; |
kenken0721 | 2:6140746e19b1 | 347 | forwardTrot(1,stepPosTest2,stepSpeTest2,0); |
kenken0721 | 2:6140746e19b1 | 348 | |
kenken0721 | 2:6140746e19b1 | 349 | float stepPosTest3[8] = {200,30,-120,200,180,100,60,140}; |
kenken0721 | 2:6140746e19b1 | 350 | float stepSpeTest3[2] = {7,6}; |
kenken0721 | 2:6140746e19b1 | 351 | forwardTrot(1,stepPosTest3,stepSpeTest3,0); |
kenken0721 | 2:6140746e19b1 | 352 | |
kenken0721 | 2:6140746e19b1 | 353 | |
kenken0721 | 2:6140746e19b1 | 354 | } |
kenken0721 | 2:6140746e19b1 | 355 | |
kenken0721 | 2:6140746e19b1 | 356 | void ropeOver(){ |
kenken0721 | 2:6140746e19b1 | 357 | float levelPosTest[8] = {200,40,-110,150,170,110,35,80}; |
kenken0721 | 2:6140746e19b1 | 358 | float levelSpeTest[2] = {7,8}; |
kenken0721 | 2:6140746e19b1 | 359 | ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 360 | ropeSign = true; |
kenken0721 | 2:6140746e19b1 | 361 | while(ropeFlag == false){ |
kenken0721 | 2:6140746e19b1 | 362 | forwardTrot(1,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 363 | } |
kenken0721 | 2:6140746e19b1 | 364 | ropeSign = false; |
kenken0721 | 2:6140746e19b1 | 365 | moveSpeed = 6; |
kenken0721 | 2:6140746e19b1 | 366 | setSite(0, 200, 60, 180); |
kenken0721 | 2:6140746e19b1 | 367 | setSite(1, 200, 160, 180); |
kenken0721 | 2:6140746e19b1 | 368 | setSite(2, 200, -10, 180); |
kenken0721 | 2:6140746e19b1 | 369 | setSite(3, 200, -110, 180); |
kenken0721 | 2:6140746e19b1 | 370 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 371 | |
kenken0721 | 2:6140746e19b1 | 372 | setSite(0, 200, 0, 30); |
kenken0721 | 2:6140746e19b1 | 373 | setSite(1, 200, 160, 180); |
kenken0721 | 2:6140746e19b1 | 374 | setSite(2, 200, -10, 180); |
kenken0721 | 2:6140746e19b1 | 375 | setSite(3, 200, -110, 30); |
kenken0721 | 2:6140746e19b1 | 376 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 377 | |
kenken0721 | 2:6140746e19b1 | 378 | setSite(0, 250, 160, 30); |
kenken0721 | 2:6140746e19b1 | 379 | setSite(1, 200, 60, 180); |
kenken0721 | 2:6140746e19b1 | 380 | setSite(2, 200, -110, 180); |
kenken0721 | 2:6140746e19b1 | 381 | setSite(3, 200, -10, 180); |
kenken0721 | 2:6140746e19b1 | 382 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 383 | |
kenken0721 | 2:6140746e19b1 | 384 | setSite(0, 250, 100, 180); |
kenken0721 | 2:6140746e19b1 | 385 | |
kenken0721 | 2:6140746e19b1 | 386 | setSite(0, 250, 100, 200); |
kenken0721 | 2:6140746e19b1 | 387 | setSite(1, 200, 0, 30); |
kenken0721 | 2:6140746e19b1 | 388 | setSite(2, 200, -110, 30); |
kenken0721 | 2:6140746e19b1 | 389 | setSite(3, 200, -10, 200); |
kenken0721 | 2:6140746e19b1 | 390 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 391 | |
kenken0721 | 2:6140746e19b1 | 392 | setSite(0, 200, 60, 180); |
kenken0721 | 2:6140746e19b1 | 393 | setSite(1, 200, 220, 30); |
kenken0721 | 2:6140746e19b1 | 394 | setSite(2, 200, -10, 180); |
kenken0721 | 2:6140746e19b1 | 395 | setSite(3, 200, -110, 180); |
kenken0721 | 2:6140746e19b1 | 396 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 397 | |
kenken0721 | 2:6140746e19b1 | 398 | setSite(1, 200, 300, 180); |
kenken0721 | 2:6140746e19b1 | 399 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 400 | |
kenken0721 | 2:6140746e19b1 | 401 | forwardTrot(1,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 402 | moveSpeed = 6.5; |
kenken0721 | 2:6140746e19b1 | 403 | setSite(0, 200, -20, 240); |
kenken0721 | 2:6140746e19b1 | 404 | setSite(1, 200, 80, 240); |
kenken0721 | 2:6140746e19b1 | 405 | setSite(2, 200, -190, 260); |
kenken0721 | 2:6140746e19b1 | 406 | setSite(3, 200, -190, 260); |
kenken0721 | 2:6140746e19b1 | 407 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 408 | |
kenken0721 | 2:6140746e19b1 | 409 | setSite(3, 200, -300, 30); |
kenken0721 | 2:6140746e19b1 | 410 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 411 | setSite(3, 200, 0, 30); |
kenken0721 | 2:6140746e19b1 | 412 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 413 | setSite(3, 200, 0, 260); |
kenken0721 | 2:6140746e19b1 | 414 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 415 | |
kenken0721 | 2:6140746e19b1 | 416 | setSite(0, 200, -40, 230); |
kenken0721 | 2:6140746e19b1 | 417 | setSite(1, 200, 60, 230); |
kenken0721 | 2:6140746e19b1 | 418 | setSite(2, 200, -180, 260); |
kenken0721 | 2:6140746e19b1 | 419 | setSite(3, 200, -100, 260); |
kenken0721 | 2:6140746e19b1 | 420 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 421 | |
kenken0721 | 2:6140746e19b1 | 422 | setSite(2, 200, -300, 30); |
kenken0721 | 2:6140746e19b1 | 423 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 424 | setSite(2, 200, 0, 30); |
kenken0721 | 2:6140746e19b1 | 425 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 426 | setSite(2, 200, 0, 260); |
kenken0721 | 2:6140746e19b1 | 427 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 428 | ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 429 | } |
kenken0721 | 1:5fb6895ad8e6 | 430 | //初期姿勢 |
kenken0721 | 1:5fb6895ad8e6 | 431 | void initPos(){ |
kenken0721 | 1:5fb6895ad8e6 | 432 | moveSpeed = 1; |
kenken0721 | 1:5fb6895ad8e6 | 433 | float pos[3] = {150,0,100}; |
kenken0721 | 0:ffe56c419abd | 434 | for(int i=0;i<4;i++){ |
kenken0721 | 1:5fb6895ad8e6 | 435 | for(int j=0;j<3;j++){ |
kenken0721 | 1:5fb6895ad8e6 | 436 | currentSite[i][j] = pos[j]; |
kenken0721 | 1:5fb6895ad8e6 | 437 | nextSite[i][j] = pos[j]; |
kenken0721 | 1:5fb6895ad8e6 | 438 | } |
kenken0721 | 0:ffe56c419abd | 439 | } |
kenken0721 | 0:ffe56c419abd | 440 | } |
kenken0721 | 2:6140746e19b1 | 441 | //7680,10100 |
kenken0721 | 2:6140746e19b1 | 442 | //5800,9600 |
kenken0721 | 2:6140746e19b1 | 443 | void lackUp(){ |
kenken0721 | 2:6140746e19b1 | 444 | update.detach(); |
kenken0721 | 2:6140746e19b1 | 445 | float pos1 = 9500.0; |
kenken0721 | 2:6140746e19b1 | 446 | float pos2 = 6000.0; |
kenken0721 | 2:6140746e19b1 | 447 | float sum1 = 0.5;//0.666;//(5500 - 4834)/1000; |
kenken0721 | 2:6140746e19b1 | 448 | float sum2 = 3.5;//(8500- 4034)/1000; |
kenken0721 | 2:6140746e19b1 | 449 | for(int i=0;i<1000;i++){ |
kenken0721 | 2:6140746e19b1 | 450 | pos1 = pos1 + sum1; |
kenken0721 | 2:6140746e19b1 | 451 | pos2 = pos2 + sum2; |
kenken0721 | 2:6140746e19b1 | 452 | servo[0].move(4,int(pos1)); |
kenken0721 | 2:6140746e19b1 | 453 | servo[0].move(5,int(pos2)); |
kenken0721 | 2:6140746e19b1 | 454 | wait(0.0008); |
kenken0721 | 2:6140746e19b1 | 455 | } |
kenken0721 | 2:6140746e19b1 | 456 | } |
kenken0721 | 2:6140746e19b1 | 457 | |
kenken0721 | 1:5fb6895ad8e6 | 458 | //--------------------------------------------------------------- |
kenken0721 | 0:ffe56c419abd | 459 | |
kenken0721 | 0:ffe56c419abd | 460 | int main() { |
kenken0721 | 2:6140746e19b1 | 461 | Led = 0; |
kenken0721 | 2:6140746e19b1 | 462 | ropeTouch.pulsewidth_us(2400); |
kenken0721 | 0:ffe56c419abd | 463 | for(int i=0;i<4;i++){ |
kenken0721 | 1:5fb6895ad8e6 | 464 | servo[i].init(); |
kenken0721 | 0:ffe56c419abd | 465 | } |
kenken0721 | 2:6140746e19b1 | 466 | //------平地と坂のモード決定---------- |
kenken0721 | 2:6140746e19b1 | 467 | sw.mode(PullUp); |
kenken0721 | 2:6140746e19b1 | 468 | int modeCount = 0; |
kenken0721 | 2:6140746e19b1 | 469 | while(1){ |
kenken0721 | 2:6140746e19b1 | 470 | if(sw.read() == true){ |
kenken0721 | 2:6140746e19b1 | 471 | modeCount++; |
kenken0721 | 2:6140746e19b1 | 472 | }else{ |
kenken0721 | 2:6140746e19b1 | 473 | modeCount--; |
kenken0721 | 2:6140746e19b1 | 474 | } |
kenken0721 | 2:6140746e19b1 | 475 | if(modeCount >= 100){ |
kenken0721 | 2:6140746e19b1 | 476 | modeFlag = true; |
kenken0721 | 2:6140746e19b1 | 477 | break; |
kenken0721 | 2:6140746e19b1 | 478 | }else if(modeCount <= -100){ |
kenken0721 | 2:6140746e19b1 | 479 | modeFlag = false; |
kenken0721 | 2:6140746e19b1 | 480 | break; |
kenken0721 | 2:6140746e19b1 | 481 | } |
kenken0721 | 2:6140746e19b1 | 482 | } |
kenken0721 | 2:6140746e19b1 | 483 | //-------------------------------- |
kenken0721 | 1:5fb6895ad8e6 | 484 | |
kenken0721 | 2:6140746e19b1 | 485 | //---------平地モード--------------- |
kenken0721 | 2:6140746e19b1 | 486 | if(modeFlag == true){ |
kenken0721 | 2:6140746e19b1 | 487 | retry.mode(PullUp); |
kenken0721 | 2:6140746e19b1 | 488 | servo[0].move(4,7600);//持ち上げ機構初期位置へ |
kenken0721 | 2:6140746e19b1 | 489 | wait(0.1); |
kenken0721 | 2:6140746e19b1 | 490 | servo[0].move(5,5100);//持ち上げ機構初期位置へ |
kenken0721 | 2:6140746e19b1 | 491 | initPos();//スタート姿勢 |
kenken0721 | 2:6140746e19b1 | 492 | update.attach(&siteUpdate,0.02);//20msごとに座標値更新 |
kenken0721 | 2:6140746e19b1 | 493 | //wait(20.0); |
kenken0721 | 2:6140746e19b1 | 494 | setSite(0, 200, 30, 160); |
kenken0721 | 2:6140746e19b1 | 495 | setSite(1, 200, 160, 160); |
kenken0721 | 2:6140746e19b1 | 496 | setSite(2, 200, -30, 170); |
kenken0721 | 2:6140746e19b1 | 497 | setSite(3, 200, -160, 170); |
kenken0721 | 1:5fb6895ad8e6 | 498 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 499 | //while(1){}; |
kenken0721 | 2:6140746e19b1 | 500 | wait(1.0); |
kenken0721 | 2:6140746e19b1 | 501 | //----------ゲルゲ受け取り待機------------- |
kenken0721 | 2:6140746e19b1 | 502 | bool flag = false; |
kenken0721 | 2:6140746e19b1 | 503 | int count = 0; |
kenken0721 | 2:6140746e19b1 | 504 | while(flag == false){ |
kenken0721 | 2:6140746e19b1 | 505 | if(start.read() == 0){ |
kenken0721 | 2:6140746e19b1 | 506 | count++; |
kenken0721 | 2:6140746e19b1 | 507 | }else{ |
kenken0721 | 2:6140746e19b1 | 508 | count--; |
kenken0721 | 2:6140746e19b1 | 509 | } |
kenken0721 | 2:6140746e19b1 | 510 | if(count >= 5000){ |
kenken0721 | 2:6140746e19b1 | 511 | flag = true; |
kenken0721 | 2:6140746e19b1 | 512 | }else if(count <= 0){ |
kenken0721 | 2:6140746e19b1 | 513 | flag = false; |
kenken0721 | 2:6140746e19b1 | 514 | count = 0; |
kenken0721 | 2:6140746e19b1 | 515 | } |
kenken0721 | 2:6140746e19b1 | 516 | } |
kenken0721 | 2:6140746e19b1 | 517 | wait(0.2); |
kenken0721 | 2:6140746e19b1 | 518 | Led = 1; |
kenken0721 | 2:6140746e19b1 | 519 | //-------スタート-------------------- |
kenken0721 | 2:6140746e19b1 | 520 | float levelPosTest[8] = {200,30,-160,160,170,145,60,70}; |
kenken0721 | 2:6140746e19b1 | 521 | float levelSpeTest[2] = {8.0,10}; |
kenken0721 | 2:6140746e19b1 | 522 | if(retry.read() == false){ |
kenken0721 | 2:6140746e19b1 | 523 | //段差前 |
kenken0721 | 2:6140746e19b1 | 524 | forwardTrot(9,levelPosTest,levelSpeTest,-1); |
kenken0721 | 2:6140746e19b1 | 525 | forwardTrot(2,levelPosTest,levelSpeTest,18); |
kenken0721 | 2:6140746e19b1 | 526 | stepOver(); |
kenken0721 | 2:6140746e19b1 | 527 | forwardTrot(3,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 528 | moveSpeed = 6; |
kenken0721 | 2:6140746e19b1 | 529 | setSite(0, 200, 30, 160); |
kenken0721 | 2:6140746e19b1 | 530 | setSite(1, 200, 160, 160); |
kenken0721 | 2:6140746e19b1 | 531 | setSite(2, 200, -30, 170); |
kenken0721 | 2:6140746e19b1 | 532 | setSite(3, 200, -160, 170); |
kenken0721 | 1:5fb6895ad8e6 | 533 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 534 | while(1){ |
kenken0721 | 2:6140746e19b1 | 535 | if(retry.read() == true){ |
kenken0721 | 2:6140746e19b1 | 536 | break; |
kenken0721 | 2:6140746e19b1 | 537 | } |
kenken0721 | 2:6140746e19b1 | 538 | } |
kenken0721 | 2:6140746e19b1 | 539 | wait(0.5); |
kenken0721 | 2:6140746e19b1 | 540 | ropeTouch.pulsewidth_us(600); |
kenken0721 | 2:6140746e19b1 | 541 | forwardTrot(4,levelPosTest,levelSpeTest,-35); |
kenken0721 | 2:6140746e19b1 | 542 | //forwardTrot(2,levelPosTest,levelSpeTest,4); |
kenken0721 | 2:6140746e19b1 | 543 | ropeOver(); |
kenken0721 | 2:6140746e19b1 | 544 | float levelPosTest2[8] = {200,60,-140,160,170,80,70,80}; |
kenken0721 | 2:6140746e19b1 | 545 | rightMove(2,levelPosTest2,levelSpeTest,85); |
kenken0721 | 2:6140746e19b1 | 546 | forwardTrot(1,levelPosTest,levelSpeTest,10); |
kenken0721 | 2:6140746e19b1 | 547 | ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 548 | ropeOver(); |
kenken0721 | 2:6140746e19b1 | 549 | forwardTrot(7,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 550 | } |
kenken0721 | 2:6140746e19b1 | 551 | else{ |
kenken0721 | 2:6140746e19b1 | 552 | //forwardTrot(2,levelPosTest,levelSpeTest,17); |
kenken0721 | 2:6140746e19b1 | 553 | ropeTouch.pulsewidth_us(600); |
kenken0721 | 2:6140746e19b1 | 554 | forwardTrot(4,levelPosTest,levelSpeTest,-35); |
kenken0721 | 2:6140746e19b1 | 555 | //forwardTrot(2,levelPosTest,levelSpeTest,4); |
kenken0721 | 2:6140746e19b1 | 556 | ropeOver(); |
kenken0721 | 2:6140746e19b1 | 557 | float levelPosTest2[8] = {200,60,-140,160,170,80,70,80}; |
kenken0721 | 2:6140746e19b1 | 558 | rightMove(2,levelPosTest2,levelSpeTest,85); |
kenken0721 | 2:6140746e19b1 | 559 | forwardTrot(1,levelPosTest,levelSpeTest,10); |
kenken0721 | 2:6140746e19b1 | 560 | ropeFlag = false; |
kenken0721 | 2:6140746e19b1 | 561 | ropeOver(); |
kenken0721 | 2:6140746e19b1 | 562 | forwardTrot(7,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 563 | } |
kenken0721 | 2:6140746e19b1 | 564 | |
kenken0721 | 2:6140746e19b1 | 565 | /* |
kenken0721 | 2:6140746e19b1 | 566 | float levelPosTest[8] = {200,60,-110,150,170,80,70,80}; |
kenken0721 | 2:6140746e19b1 | 567 | float levelSpeTest[2] = {7,8}; |
kenken0721 | 2:6140746e19b1 | 568 | */ |
kenken0721 | 2:6140746e19b1 | 569 | /* |
kenken0721 | 2:6140746e19b1 | 570 | float levelPosTest[8] = {200,60,-160,160,170,140,50,60}; |
kenken0721 | 2:6140746e19b1 | 571 | float levelSpeTest[2] = {8.5,8}; |
kenken0721 | 2:6140746e19b1 | 572 | //forwardTrot(9,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 573 | |
kenken0721 | 2:6140746e19b1 | 574 | |
kenken0721 | 2:6140746e19b1 | 575 | forwardTrot(3,levelPosTest,levelSpeTest,15); |
kenken0721 | 2:6140746e19b1 | 576 | stepOver(); |
kenken0721 | 2:6140746e19b1 | 577 | forwardTrot(4,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 578 | */ |
kenken0721 | 2:6140746e19b1 | 579 | /* |
kenken0721 | 2:6140746e19b1 | 580 | float levelPosTest3[8] = {190,60,-110,160,170,100,60,80}; |
kenken0721 | 2:6140746e19b1 | 581 | float levelSpeTest3[2] = {7,8}; |
kenken0721 | 2:6140746e19b1 | 582 | forwardTrot(3,levelPosTest3,levelSpeTest3,7); |
kenken0721 | 2:6140746e19b1 | 583 | float levelPosTest4[8] = {180,60,-110,160,170,100,60,80}; |
kenken0721 | 2:6140746e19b1 | 584 | float levelSpeTest4[2] = {7,8}; |
kenken0721 | 2:6140746e19b1 | 585 | forwardTrot(5,levelPosTest4,levelSpeTest4,-40); |
kenken0721 | 2:6140746e19b1 | 586 | float levelPosTest5[8] = {180,60,-110,160,170,100,60,80}; |
kenken0721 | 2:6140746e19b1 | 587 | float levelSpeTest5[2] = {7,8}; |
kenken0721 | 2:6140746e19b1 | 588 | forwardTrot(5,levelPosTest5,levelSpeTest5,0); |
kenken0721 | 2:6140746e19b1 | 589 | */ |
kenken0721 | 2:6140746e19b1 | 590 | //---------------------------------------------------------- |
kenken0721 | 2:6140746e19b1 | 591 | wait(10); |
kenken0721 | 2:6140746e19b1 | 592 | } |
kenken0721 | 2:6140746e19b1 | 593 | //---------坂モード----------------- |
kenken0721 | 2:6140746e19b1 | 594 | else{ |
kenken0721 | 2:6140746e19b1 | 595 | servo[0].move(4,7600);//持ち上げ機構初期位置へ//5500 |
kenken0721 | 2:6140746e19b1 | 596 | //servo[0].move(4,9700);//持ち上げ機構初期位置へ//5500 |
kenken0721 | 2:6140746e19b1 | 597 | wait(0.1); |
kenken0721 | 2:6140746e19b1 | 598 | servo[0].move(5,5800);//持ち上げ機構初期位置へ//8500 |
kenken0721 | 2:6140746e19b1 | 599 | |
kenken0721 | 2:6140746e19b1 | 600 | initPos();//スタート姿勢 |
kenken0721 | 2:6140746e19b1 | 601 | update.attach(&siteUpdate,0.02);//20msごとに座標値更新 |
kenken0721 | 2:6140746e19b1 | 602 | //while(1){} |
kenken0721 | 2:6140746e19b1 | 603 | |
kenken0721 | 2:6140746e19b1 | 604 | wait(1.0); |
kenken0721 | 2:6140746e19b1 | 605 | setSite(0, 200, 30, 150); |
kenken0721 | 2:6140746e19b1 | 606 | setSite(1, 200, 170, 150); |
kenken0721 | 2:6140746e19b1 | 607 | setSite(2, 200, 0, 180);//-70 |
kenken0721 | 2:6140746e19b1 | 608 | setSite(3, 200, 0, 180);//-70 |
kenken0721 | 0:ffe56c419abd | 609 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 610 | /* |
kenken0721 | 2:6140746e19b1 | 611 | setSite(0, 200, 20, 190); |
kenken0721 | 2:6140746e19b1 | 612 | setSite(1, 200, 160, 190); |
kenken0721 | 2:6140746e19b1 | 613 | setSite(2, 200, -200, 190);//-70 |
kenken0721 | 2:6140746e19b1 | 614 | setSite(3, 200, -60, 190);//-70 |
kenken0721 | 1:5fb6895ad8e6 | 615 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 616 | */ |
kenken0721 | 2:6140746e19b1 | 617 | update.detach(); |
kenken0721 | 2:6140746e19b1 | 618 | //----------非接触合図待機----------------- |
kenken0721 | 2:6140746e19b1 | 619 | trig = 0; |
kenken0721 | 2:6140746e19b1 | 620 | echo.rise(&pulseRise); |
kenken0721 | 2:6140746e19b1 | 621 | echo.fall(&pulseFall); |
kenken0721 | 2:6140746e19b1 | 622 | bool flag = false; |
kenken0721 | 2:6140746e19b1 | 623 | int count = 0; |
kenken0721 | 2:6140746e19b1 | 624 | timer.reset(); |
kenken0721 | 2:6140746e19b1 | 625 | while(flag == false){ |
kenken0721 | 2:6140746e19b1 | 626 | trig = 0; |
kenken0721 | 2:6140746e19b1 | 627 | wait_us(1); |
kenken0721 | 2:6140746e19b1 | 628 | trig = 1; |
kenken0721 | 2:6140746e19b1 | 629 | wait_us(11); |
kenken0721 | 2:6140746e19b1 | 630 | trig = 0; |
kenken0721 | 2:6140746e19b1 | 631 | wait_us(1); |
kenken0721 | 2:6140746e19b1 | 632 | wait(0.01); |
kenken0721 | 2:6140746e19b1 | 633 | if(Distance <= 250) |
kenken0721 | 2:6140746e19b1 | 634 | count++; |
kenken0721 | 2:6140746e19b1 | 635 | if(count >= 30) |
kenken0721 | 2:6140746e19b1 | 636 | flag = true; |
kenken0721 | 2:6140746e19b1 | 637 | } |
kenken0721 | 2:6140746e19b1 | 638 | echo.rise(NULL); |
kenken0721 | 2:6140746e19b1 | 639 | echo.fall(NULL); |
kenken0721 | 2:6140746e19b1 | 640 | Led = 1; |
kenken0721 | 2:6140746e19b1 | 641 | servo[0].speed(4,40); |
kenken0721 | 2:6140746e19b1 | 642 | wait(0.005); |
kenken0721 | 2:6140746e19b1 | 643 | servo[0].move(4,9700);//持ち上げ機構初期位置へ//5500 |
kenken0721 | 2:6140746e19b1 | 644 | wait(0.1); |
kenken0721 | 2:6140746e19b1 | 645 | update.attach(&siteUpdate,0.02);//20msごとに座標値更新 |
kenken0721 | 2:6140746e19b1 | 646 | //-----スタート------------------- |
kenken0721 | 2:6140746e19b1 | 647 | //float levelPosTest[8] = {200,150,-60,150,170,-100,50,50}; |
kenken0721 | 2:6140746e19b1 | 648 | //float levelSpeTest[2] = {6,7}; |
kenken0721 | 2:6140746e19b1 | 649 | //forwardTrot(3,levelPosTest,levelSpeTest,0); |
kenken0721 | 2:6140746e19b1 | 650 | //loat levelPosTest2[8] = {200,150,-60,150,170,-100,50,120}; |
kenken0721 | 2:6140746e19b1 | 651 | //float levelSpeTest2[2] = {6,7}; |
kenken0721 | 2:6140746e19b1 | 652 | //forwardTrot(1,levelPosTest2,levelSpeTest2,0); |
kenken0721 | 2:6140746e19b1 | 653 | |
kenken0721 | 2:6140746e19b1 | 654 | //float slopePosTest2[8] = {200,160,-60,190,190,-140,80,80}; |
kenken0721 | 2:6140746e19b1 | 655 | //float slopeSpeTest2[8] = {6,4}; |
kenken0721 | 2:6140746e19b1 | 656 | //backTrot(2,slopePosTest2,slopeSpeTest2,0); |
kenken0721 | 2:6140746e19b1 | 657 | |
kenken0721 | 2:6140746e19b1 | 658 | moveSpeed = 8; |
kenken0721 | 2:6140746e19b1 | 659 | setSite(2, 200, 0, 50); |
kenken0721 | 2:6140746e19b1 | 660 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 661 | setSite(2, 200, -200, 50); |
kenken0721 | 2:6140746e19b1 | 662 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 663 | setSite(2, 200, -200, 160); |
kenken0721 | 2:6140746e19b1 | 664 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 665 | setSite(3, 200, 0, 50); |
kenken0721 | 2:6140746e19b1 | 666 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 667 | setSite(3, 200, -120, 50); |
kenken0721 | 2:6140746e19b1 | 668 | allMotionWait(); |
kenken0721 | 2:6140746e19b1 | 669 | setSite(3, 200, -90, 160); |
kenken0721 | 0:ffe56c419abd | 670 | allMotionWait(); |
kenken0721 | 0:ffe56c419abd | 671 | |
kenken0721 | 0:ffe56c419abd | 672 | |
kenken0721 | 2:6140746e19b1 | 673 | float slopePosTest[8] = {210,170,-20,150,130,-130,110,50}; |
kenken0721 | 2:6140746e19b1 | 674 | float slopeSpeTest[8] = {6,4}; |
kenken0721 | 0:ffe56c419abd | 675 | |
kenken0721 | 2:6140746e19b1 | 676 | float lackUpPos[8] = {170,150,-150,390,390,0,0,0}; |
kenken0721 | 2:6140746e19b1 | 677 | float lackUpSpe[2] = {4.3,4}; |
kenken0721 | 2:6140746e19b1 | 678 | backTrot(4,slopePosTest,slopeSpeTest,20); |
kenken0721 | 2:6140746e19b1 | 679 | backTrot(6,slopePosTest,slopeSpeTest,0); |
kenken0721 | 0:ffe56c419abd | 680 | |
kenken0721 | 2:6140746e19b1 | 681 | standUp(lackUpPos,lackUpSpe); |
kenken0721 | 2:6140746e19b1 | 682 | lackUp(); |
kenken0721 | 0:ffe56c419abd | 683 | } |
kenken0721 | 0:ffe56c419abd | 684 | } |