[[2013a/Member]] *空き缶運びレース[#ha7f4abf] *ロボットの紹介 [#q20e8f2b] 僕達が作ったロボットはシンプルに仕上げました。ロボットはよりコンパクトに設計し、余計なものをはぶいて缶を運ぶのも掴まないのでプログラムもコンパクトになりました。 *コースの攻略法 [#k9096768] +最初に右に曲がること [#fcaa914f] +交差点を上手くわたる +缶を指定の位置に置く +最後は右に曲がって終了http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2013a%2FMission1&openfile=robotics-2013a-mission1.jpg *プログラムの説明 [#ub6b4419] プラグラムの定義に関して #define BLACK 31 #define WHITE 62 #define SPEED_H 30 #define SPEED_L 25 #define OnRL(speedR,speedL)\ OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL); #define go OnRL(SPEED_H,SPEED_H); #define left1 OnRL(SPEED_L,-SPEED_L); #define left0 OnRL(SPEED_L,0); #define right0 OnRL(0,SPEED_L); #define right1 OnRL(-SPEED_L,SPEED_L); #define STEP 10 #define nMAX 15 #define short_break Off(OUT_BC);Wait(500); #define CROSS_TIME 350 #define cross_line OnRL(SPEED_L,SPEED_L);\ Wait(CROSS_TIME);short_break; task main() { SetSensorLight(S1); int nOnline=0; int n=0; int m=0; long t0=CurrentTick(); 最初に右に曲がる while(CurrentTick()-t0<=5000){ if (SENSOR_1<37) { right1;} else { if (SENSOR_1<42) { right0; } else if (SENSOR_1<50) { go;} else { left1;} } } ライントレースする while(true){ while(m<4){ while(nOnline<nMAX){ if (SENSOR_1<37) { right1; nOnline++;} else { if (SENSOR_1<42) { right0; } else if (SENSOR_1<50) { go;} else if (SENSOR_1<56) { left0; } else { left1;} nOnline=0;} Wait(STEP); }left1;cross_line;m++; nOnline=0; } 缶を置く時間の変数の定義 long t1=CurrentTick(); 缶を置くまでのライントレース while(CurrentTick()-t1<=12800){ if (SENSOR_1<37) { right1; } else { if (SENSOR_1<42) { right0; } else if (SENSOR_1<50) { go;} else if (SENSOR_1<56) { left0; } else { left1; } } } Off(OUT_BC); OnFwd(OUT_B,20);OnRev(OUT_C,20);Wait(2600); OnRev(OUT_BC,35);Wait(1000); OnFwd(OUT_B,20);OnRev(OUT_C,20);Wait(2600); while(true){ if (SENSOR_1<35) { right1;nOnline++; } else { if (SENSOR_1<42) { right0; } else if (SENSOR_1<50) { go;} else if (SENSOR_1<56) { left0; } else { left1;} Wait(STEP); } } } } *まとめ [#bc730b07]