2016a/Member 目次
今回の課題はライントレースをするロボットを作ること。
黒い線に沿って動くロボットを作成する。
なるべく速く正確に動くロボットになるように工夫して、交差点では1秒間停止すること。
・B地点からC地点へ(二人目)
◦B地点→R右折→Q直進→Q直進→P右折→S右折→C地点
左右二つのモーターを用いて本体の前後運動、回転運動、旋回運動を行う。
本体の前方につけた光センサーを用いてライントレースを行う。
以下はサブルーチンを作る上での基本的な定義である。
#define TURN_TIME 5 #define BLACK 42 #define WHITE 50 #define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C); Wait(TURN_TIME);//右旋回 #define RIGHT_L OnFwd(OUT_A); Off(OUT_C); Wait(TURN_TIME);//右回転 #define LEFT_H OnFwd(OUT_C); OnRev(OUT_A); Wait(TURN_TIME);//左旋回 #define LEFT_L OnFwd(OUT_C); Off(OUT_A); Wait(TURN_TIME);//左回転 #define GO_FORWARD(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC); #define STEP 1
黒い線上をたどるプログラムになっており、交差点で一時停止し、音が鳴る。
交差点の判断にはタイマーで、黒が0.35秒以上続いたときに判断するようにしてある。
線上をたどるうえで、線の右側をたどるようになっている。黒の時は右に、白の時は左に回転する。
sub LINE() { ClearTimer(0); while(FastTimer(0) < 35) { if (SENSOR_2 < BLACK) { RIGHT_L; } else if (SENSOR_2 < BLACK+2){ RIGHT_H; } else if (SENSOR_2 > WHITE-2) { LEFT_L; ClearTimer(0); } else if (SENSOR_2 >= WHITE) { LEFT_H; ClearTimer(0); } else { GO_FORWARD(50); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); PlaySound(SOUND_UP); Wait(100); }
以下二つのサブルーチンは、交差点で傾いた機体を正しい向きに直すことと、交差点を通過するためのものである。
sub CROSS_RIGHT() { while(FastTimer(0) < 100) { RIGHT_L; } ClearTimer(0); }
sub CROSS_LEFT() { while(FastTimer(0) < 160) { LEFT_L; } ClearTimer(0); }
下のサブルーチンは半円のような急な曲がり角を曲がるためのプログラムである。
sub WHOLE() { while(FastTimer(0) < 36) { if(SENSOR_2 < BLACK+2){ RIGHT_L; } else if (SENSOR_2 > WHITE-2){ LEFT_L; ClearTimer(0); } else if (SENSOR_2 >= WHITE) { LEFT_H; ClearTimer(0); } else { GO_FORWARD(50); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); }
task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); GO_FORWARD(120); LINE(); CROSS_RIGHT(); LINE(); WHOLE(); LINE(); GO_FORWARD(50); LINE(); GO_FORWARD(50); repeat(2);{ LINE(); CROSS_RIGHT(); } LINE(); GO_FORWARD(50); }
今回はゴールに辿りつけなかった。作業スピードが遅くプログラムを修正する時間を取れなかった。なので次回以降では作業スピードをあげ、調整する時間をとれるように心がけたい。
今回の課題で新たに出てきたサブルーチンに初めのうちは戸惑ったが、理解してしまえばとても便利なプログラムだと思う。サブルーチンを用いることでtask main()の中身がより簡潔になり今までと比べてコンパクトなプログラムになったと思う。少しずつではあるがプログラムにおいて出来ることが増えてきているので、次回以降の課題でも出来ることを増やしていけたらいいと思う。