目次
risを使って光センサーによりライントレースを行う。
自分達でコースを作成し、出来るだけ早くゴールすることを目的とする。
コースは以下の通りである。
自分は今回A→P→Q→R→Bのコースを担当した
今回使ったロボットは以下である
ロボットの中心がラインの中心になるよう光センサーは少し左に設置した
ラインを判別しやすいよう光センサーはできるだけ地面に近づけました。
最初に以下の定義をした。
#define Black 42 //これ以下は黒 #define White 51 //これ以上は白 #define turn_right OnFwd(OUT_A); OnRev(OUT_C); Wait(turn_time); //右へ旋回 #define turn_rightP OnFwd(OUT_A); Off(OUT_C); Wait(turn_time);//右折 #define turn_left OnFwd(OUT_C); OnRev(OUT_A); Wait(turn_time); //左へ旋回 #define turn_leftP OnFwd(OUT_C); Off(OUT_A); Wait(turn_time);//左折 #define go_forward(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//直進 #define STEP 1
タスクメインを簡単にするために以下のサブルーチンを利用した。
sub line_trace() { ClearTimer(0); while(FastTimer(0) <=50){ if (SENSOR_2 < Black) { //黒 turn_right; } else if (SENSOR_2 < Black ) { //黒よりの灰色 turn_rightP; } else if (SENSOR_2 > White) { //白よりの灰色 turn_leftP; ClearTimer(0); } else if (SENSOR_2 >= White) { //白 turn_left; ClearTimer(0); } else { //それ以外 OnFwd(OUT_AC); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); PlaySound(SOUND_UP); Wait(110); } sub line_left() { while (FastTimer(0) < 140 ) { turn_leftP; } ClearTimer(0); } sub line_left_H() { while (FastTimer(0) < 230) { turn_left; } ClearTimer(0); } task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); go_forward(130); line_trace(); line_left(); line_trace(); line_left(); line_trace(); line_left(); line_trace(); line_left_H(); go_forward(130); line_trace(); }
FastTimerを使い、一定時間右旋回か右折が続いたら交差点と判断するようにした。 sub line_trace()
{ ClearTimer(0); while(FastTimer(0) <=50){ if (SENSOR_2 < Black) { //黒 turn_right; } else if (SENSOR_2 < Black ) { //黒よりの灰色 turn_rightP; } else if (SENSOR_2 > White) { //白よりの灰色 turn_leftP; ClearTimer(0); } else if (SENSOR_2 >= White) { //白 turn_left; ClearTimer(0); } else { //それ以外 OnFwd(OUT_AC); ClearTimer(0); } Wait(STEP); }
僕自身の感想だが、前回より格段に難易度が上がっている気がする。今回も100%ゴールできたわけではなかったので次の最後の課題を頑張りたい