ボールを運びつつ、ライントレースをするロボットを作る。
#define Treshold 35 #define Speed_H 50 #define Speed_L 40 #define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL); #define go_forward OnRL(Speed_H, Speed_H); #define turn_left1 OnRL(Speed_L, -Speed_L); #define turn_left0 OnRL(Speed_L, 0); #define turn_right0 OnRL(0, Speed_L); #define turn_right1 OnRL(-Speed_L, Speed_L); #define Step 1 #define nMAX 800 #define short_break Off(OUT_BC); Wait(300); #define Cross_Time 300 #define cross_line OnRL(Speed_L,Speed_L);Wait(Cross_Time);short_break; task main () { SetSensorLight(S2); int nOnline=0; long t0=CurrentTick(); OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC); OnFwd(OUT_A,30);Wait(780);Off(OUT_A); OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC); while (true){ while (nOnline < nMAX) { if (SENSOR_2 < Threshold){ turn_right1; nOnline++; }else{ if (SENSOR_2 < Threshold-2){ turn_right0; }else if (SENSOR_2 < Threshold+3){ go_forward; }else if (SENSOR_2 < Threshold+7){ turn_left0; }else{ turn_left1; } nOnline=0; } } short_break; turn_left1; Wait(200); cross_line; nOnline=0; if(CurrentTick() - t0 >= 50000){OnFwd(OUT_A,-100);Wait(600); } }}
黒い線の上を走るという一見単純そうな行動だが、それをロボットにさせるのには多大な苦労が必要だった。
また、せっかく組んだプログラムも周りの環境の違いや部品と部品の間の微妙な遊びで全く意図せぬ動きをしてしまうのが憎らしかった。