今回私はE地点直進コースを選択したのでコースは以下のとおりである。
◦Aスタート
◦E直進
◦F(SOUND_UP)
◦Q一時停止(SOUND_DOWN)&左折
◦R直進(SOUND_UP)
◦S左折(SOUND_UP)
◦G(SOUND_UP)
◦H(SOUND_UP)
◦T一時停止(SOUND_DOWN)&直進
◦T一時停止(SOUND_DOWN)&直進
◦R一時停止(SOUND_DOWN)&左折
◦S直進(SOUND_UP)
◦P左折(SOUND_UP)
◦E一時停止(SOUND_DOWN)&左折
◦A停止(SOUND_DOWN)
主な構造は見本のものと同様だが、光センサーの位置をタイヤの軸上に近づけてプログラムでの調整しやすくした
黒の線の左側をなぞって走行する。 白紙の時は変数X=0にリセット、線と白紙の境目の時には何もしない、線上の時は変数Xに1足す。変数Xが99になった場合交差点と認識する。
sub left_1() { int x=0; while(x<100){ if(SENSOR_1>56){ OnFwd(OUT_C,35); OnRev(OUT_A,20); x=0; } else if(SENSOR_1>45){ OnFwd(OUT_C,30); OnFwd(OUT_A,1); x=0; } else if(SENSOR_1>39){ OnFwd(OUT_C,1); OnFwd(OUT_A,30); } else{ OnFwd(OUT_A,35); OnRev(OUT_C,20); x=x+1; } } }
黒の線の右側をなぞって走行する。 白紙の時は変数X=0にリセット、線と白紙の境目の時には何もしない、線上の時は変数Xに1足す。変数Xが99になった場合交差点と認識する。
sub right_1() { int x=0; while(x<100){ if(SENSOR_1>56){ OnFwd(OUT_A,35); OnRev(OUT_C,20); x=0; } else if(SENSOR_1>45){ OnFwd(OUT_A,30); OnFwd(OUT_C,1); x=0; } else if(SENSOR_1>39){ OnFwd(OUT_A,1); OnFwd(OUT_C,30); } else{ OnFwd(OUT_C,35); OnRev(OUT_A,20); x=x+1; } } }
交差点を認識する際に傾いた車体を時計回りに回すことで元に戻す
sub hukki_1() { Off(OUT_AC); OnRev(OUT_A,30); OnFwd(OUT_C,60); Wait(300); }
左なぞりから右なぞりに変えるとき線を飛び越えるため前に少し走行する
sub hukki_2() { Off(OUT_AC); OnFwd(OUT_AC,40); Wait(200); }
sounddownの際は停止をしなくてはならないので一連の動作をまとめた
sub sounddown() { PlaySound(SOUND_DOWN); Off(OUT_AC); Wait(1000); }
task main () { SetSensorLight(S1); left_1(); PlaySound(SOUND_UP); //F通過 Wait(500); left_1(); Wait(200); sounddown(); //Q一時停止&左折 left_1(); PlaySound(SOUND_UP); //R通過 hukki_1(); left_1(); PlaySound(SOUND_UP); //S左折 left_1(); PlaySound(SOUND_UP); //G通過 Wait(300); hukki_1(); right_1(); hukki_2(); left_1(); PlaySound(SOUND_UP); //H通過 Wait(300); left_1(); sounddown(); //T一時停止&直進 hukki_1(); left_1(); sounddown(); //T一時停止&直進 hukki_1(); left_1(); Wait(300); sounddown(); //R一時停止&左折 left_1(); PlaySound(SOUND_UP); //S通過 Wait(100); hukki_1(); left_1(); Wait(200); PlaySound(SOUND_UP); //P左折 left_1(); sounddown(); //E一時停止&左折 hukki_2(); right_1(); sounddown(); //A停止 }
線に濃淡があるため線をなぞる際に使用するif関数の数値や交差点を認識するためのwhileの数値の調整が難しかった。
微調整のサブルーチンhukki_1,hukki_2を使うことによってメインタスクをコンパクトにしながらもサブルーチンを5つで済ますことに成功した。また、交差点を急なカーブで誤認しないように右なぞりと左なぞりで分けた。