下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。私のロボットが走行するコースは第1コースであり、詳しいコースの内容は以下の通りである。赤い線が第1コースである。光センサーと紙が平行になるような位置にセンサーを取り付け、光センサーの値を正確に測ることができるようにした。タイヤの中点よりも右側に光センサを取り付けるようにした。†ライントレースをスムーズに行うことができるように、タイヤの中点よりも右側に光センサーを取り付けるようにした。タイヤと光センサーの距離を近づけることにより急なカーブやUターンなどがしやすくなっている。空き缶との距離を正確に測るために、超音波センサーの前に他のセンサーとの接続コードがこないようにした。超音波センサーを少し下向きに傾けることで、空き缶を認識しやすいようにした。今回は、「黒と白の境界線をライントレースする」というプログラムを制作した。いう5段階の明るさの値を測定できた。5つの測定できた値は以下のものとなった。明るさの値が5段階存在するので、それぞれの明るさに対応した動きをする必要がある。そのために5段階で動きを制御することができるような以下のプログラムを作成した。//右折また、黒と白の境界線には「黒線の右側をライントレースする」、「黒線の左側をライントレースする」という2種類の境界線が存在するので、これらのプログラムを分けて考えることにした。//白と黒の境界線の明るさの値が45である。定義して、以下のようなプログラムを作成した。//max_tにいれた時間分だけラインの右側をライントレースする。//現在の時間を記録する。//現在の時間とt0の時間の差がmax_t以下の時、以下のプログラムを実行する。//明るさの値が34以下の時、turn_left1の動きをする。//明るさの値が38以下の時、turn_left2の動きをする。//明るさの値が52以下の時、go_forwardの動きをする。//明るさの値が56以下の時、turn_right1の動きをする。//それ以外の時、turn_right2の動きをする。}}このプログラムは下図のように動く。//max_tにいれた時間分だけラインの左側をライントレースする。//現在の時間を記録する。//現在の時間とt0の時間の差がmax_t以下の時、以下のプログラムを実行する。//明るさの値が34以下の時、turn_right1の動きをする。//明るさの値が38以下の時、turn_right2の動きをする。//明るさの値が52以下の時、go_forwardの動きをする。//明るさの値が56以下の時、turn_left1の動きをする。//それ以外の時、turn_left2の動きをする。}}このプログラムは下図のように動く。//min_tにいれた時間分だけライントレースをする。//現在の時間を記録する。//現在の時間とt1の時間の差がmin_t以下の時、以下のプログラムを実行する。(min_tの時間で交差点を認識する。//明るさの値が34以下の時、B,Cのモータを1秒間停止させる。//明るさの値が38以下の時、turn_left2の動きをする。//現在の時間を記録する。//明るさの値が52以下の時、go_forwardの動きをする。//現在の時間を記録する。//明るさの値が56以下の時、turn_right1の動きをする。//現在の時間を記録する。//それ以外の時、turn_right2の動きをする。//現在の時間を記録する。動きをする必要があるので、交差点を横断するプログラムを考える。OnFwd(OUT_B,40);OnFwd(OUT_C,40);Wait(1000)//1秒間交差点を横断する。OnFwd(OUT_B,40);OnFwd(OUT_C,40);Wait(400)//0.4秒間交差点を横断する。度の時計回りの旋回する。現在の方向を中心にang度の範囲で探す。障害物までの距離を返す。旋回角度からタイヤの回転を計算する。指定された角度の半分を旋回する。角度計測をリセットする。反時計回りに旋回する。仮の最小値を更新する。//アームを動かし、ボールを空き缶に当てる。//アームをもとの位置に戻す。//光センサを4に接続する。SetSensorLowspeed(S2);//超音波センサを2に接続する。Wait(3000);//スタートボタンを押してからすぐにロボットが動くのを防ぐために、3秒間ロボットを停止させる。across;//1秒間交差点を横断する。Rfollow_line(3500);//3.5秒間ラインの右側をライントレースする。Rfollow_line(400);//0.4秒間ラインの右側をライントレースする。follow_intersection(400);//0.4秒で交差点を認識する。across2;//0.4秒間で交差点を横断する。Rfollow_line(10000);//10秒間ラインの右側をライントレースする。d=searchDirection(360);//現在の方向を中心に360度回転し、最小値(空き缶)の方向を向く。turn_left2;Wait(3000);//ライントレースを続けるために向きを変える。Rfollow_line(4000);//4秒間ラインの左側をライントレースする。across2;//0.4秒間で交差点を横断する。Rfollow_line(19500);//19.5秒間ラインの右側をライントレースする。follow_intersection(400);//0.4秒で交差点を認識する。turn_left2;Wait(1000);//交差点をぬけるために向きを変える。Lfollow_line(1500);//1.5秒間ラインの左側をライントレースする。across;//ゴールに向かって前進する。交差点を認識して止まることができるときとできないときがあったが、プログラムがうまく改善できたので良かった。同じプログラムでも結果に差が出るので、もっと精度を上げたプログラムができるように頑張りたいと思う。