[[2016a/Member]] *目次 [#n117433f] #contents *課題 [#f9799d26] ~僕は3つあるコースのうち、C地点からA地点までの道のりを選び ~その道のりに沿って移動できるようにする。 ~ただし、なるべく速く正確に動くロボットになるように工夫して、交差点では1秒間停止すること。 *ロボット本体の解説 [#k6fceb59] ~ロボットは前回の顔を書くロボット作成の時の反省を活かし ~センサーを単に説明書通りに取り付けるだけでなく ~センサーをちょうどロボット本体の中心になるよう作り直し ~動きやすくするために前輪を取り外し動かすのは後輪だけにした。 *交差点の判断方法 [#o62518db] ~タイマーを使い一定時間黒を認識し左旋回または左折をし続ける時交差点と判断し、その後1秒停止し判断したことを分かりやすくするため音が鳴るようにまでサブルーチンでプログラムした。 ~詳しく説明すると、sub line_trace で黒線の左端を通り進むように定義し、一定時間左折し続けようとした場合(FastTimer(0)で時間を測り、白または白に近いグレーを認識した時はClearTimer(0)でリセットするyように定義した。)交差点と判断し音を鳴らしストップする、という動作を行うようにし、その後,交差点を左折右折直進のどれかの動作を行うようにsub turn_left sub turn_right sub go_straightを定義した。 *プログラムの説明 [#ha0ea0d3] **定義 [#db91d26b] 定義はこれである。 #define black 43 #define white 52 #define go_forward(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC); //前進 #define goforward OnFwd(OUT_AC); #define turn_left1 OnFwd(OUT_C); OnRev(OUT_A); //左旋回 #define turn_left0 OnFwd(OUT_C); Off(OUT_A); //左折 #define turn_right0 OnFwd(OUT_A); Off(OUT_C); //右折 #define turn_right1 OnFwd(OUT_A); OnRev(OUT_C); //右旋回 #define STEP 1 **サブルーチン [#ff405a1d] ライントレースについてはこちら sub line_trace() { ClearTimer(0); while (FastTimer(0)<36) { if (SENSOR_2<=black) { turn_left1; } else if (SENSOR_2<black+3) { turn_left0; } else if (SENSOR_2>white-3) { turn_right0; ClearTimer(0); } else if (SENSOR_2>=white) { ClearTimer(0); turn_right1; } else { OnFwd(OUT_AC); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0) PlaySound(SOUND_UP); Wait(100); } 交差点左折について 交差点左折について、交差点で止まったあとこのサブルーチンを使う事で左折するようにした。 sub turn_left() { while (FastTimer(0)<160) { turn_left0; } ClearTimer(0); } 交差点右折についてはこちら 交差点右折について、交差点で止まったあとこのサブルーチンを使う事で右折するようにした。 sub turn_right() { while (FastTimer(0)<160) { turn_right0; } ClearTimer(0); } 交差点直進についてはこちら sub go_straight() { while (FastTimer(0)<160) { OnFwd(OUT_AC); } ClearTimer(0); } **メインプログラム [#kffebd8b] task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); go_forward(100); line_trace(); turn_left(); line_trace(); turn_left(); line_trace(); go_straight(); line_trace(); go_straight(); line_trace(); turn_right(); line_trace(); turn_left(); line_trace(); go_forward(100); } *結果 [#lcdd2b77] ~一度たまたま辿り着いたが、確実性は全然得られなかった。 ~時間は大体1分半と少しだった。 *反省と感想 [#ked02faa] ~成功しにくい一番の原因は、交差点の反応だと思う。 ~交差点の反応が悪い時が多く ~明るさの微調整などを何回もいろいろ変えて試して調節した ~交差点については、1つ目の交差点は反応するのに ~2つめの交差点は交差点と認識しなかったりといった場合に ~どう調整すればよいのか工夫のしようが分からなかった。 ~途中の急カーブは細かく頑張らないといけないかと思ったが ~考えていたよりすんなりと成功してよかった。