上図のコースを
B → P右折 → Q右折 → P左折 → Q左折 → Q直進 → P直進 → A
のように走行する
特に工夫等はなし。光センサーを取り付けただけ
#define SPEED 30 #define go_forward OnFwd(OUT_BC,SPEED); #define turn_left OnFwd(OUT_B,SPEED);Off(OUT_C); #define turn_right OnFwd(OUT_C,SPEED);Off(OUT_B); #define turn_left2 OnFwd(OUT_B,SPEED);OnRev(OUT_C,SPEED); #define turn_right2 OnFwd(OUT_C,SPEED);OnRev(OUT_B,SPEED); #define STEP 50 //ライントレースの回数 #define TMAX 150 //旋回する最大の時間 task main() { SetSensorLight(S1); long t = CurrentTick(); int n=0; //交差点を通過する回数 while(true){ while(CurrentTick()-t<TMAX){ if(SENSOR_1<30){ turn_left2; }else if(SENSOR_1<35){ turn_left; t = CurrentTick(); }else if(SENSOR_1<40){ go_forward; t = CurrentTick(); }else if(SENSOR_1<45){ turn_right; t = CurrentTick(); }else{ turn_right2; t = CurrentTick(); } } if(n<2){ Off(OUT_BC); Wait(1000); turn_right; //交差点を右折 until(SENSOR_1>50); n++; t = CurrentTick(); }else if(n<7){ Off(OUT_BC); Wait(1000); turn_left; //交差点を左折 直角や急カーブも含む Wait(600); n++; t = CurrentTick(); }else{ Off(OUT_BC); Wait(1000); turn_right; //交差点を直進 Wait(600); t = CurrentTick(); } } Wait(STEP); }
単純なライントレースではなく、回数などを利用するために様々なプログラムを利用したため、完全に理解しているとは言い難い状態になってしまった。
動作の確実性にも欠けるため、どうすれば成功しやすいかをもう少し追求する必要がある。