課題は上図の黒線にそって動くライントレースロボットを制作するというものです。ライントレースをする際には、光センサを1つ用います。A地点またはB地点からスタートし、ライントレースしていきます。私は、A地点からスタートすることにしました。ここで条件があり、A地点→P直進→Q直進→Q右折→P右折→Q左折→P左折→B地点というような動きをするロボットにしなければなりません。P地点,Q地点は交差点と判断し、そこで1秒間停止してから、次の行動に移るようにしなければなりません。早く動くロボットするというのが条件になります。†ライントレースとは、床面に描かれた線をロボットがセンサで読み取り、線に沿って動くことを言います。上の写真のものが、今回の課題で制作したライントレースロボットの全体像になります。特徴として、急なカーブも曲がり切り、小回りが利くよう車体を小さくしています。上の写真の赤丸で囲ってあるものが光センサになります。光センサは、ライントレースする際に白か黒(明暗)かの判断をするためにあります。このロボットは光センサとモーターを近くにしてます。することで、光センサの判断がされてからすぐにモーターが動き、誤動作が少なくなると考えたからです。†ロボットが走行するために、モーターを2つ使用しています。それぞれが独立して動作するので、直進や回転させることができます。端子Aに接続しているモーターを左、端子Cに接続しているモーターを右とします。今回のライントレースは光センサが1つだけということもあり、黒線に沿って動くよりも、白と黒の中間に沿って動くロボットの方が効率が良いので、そのように動くようにしました。基本となるライントレース中のロボットの動作は、光センサが白,黒のどちらかを認識した際に、モーターのパワー,回転方向を変え、常に白と黒の中間を走行するようになっています。私は、最も白い,少し白い,中間色(閾値),少し黒い,最も黒いというように、5段階に分けて判断するようにしました。今回の課題で最も難関となるのが、交差点の判断です。私は、光センサが黒を連続で認識し続けた時間で交差点と判断しました。判断する時間は0.1秒より大きい値としました。この時間では走行途中、特にカーブでも交差点と判断してしまいます。これを避けるためには、判断する時間を延ばすことが挙げられますが、時間を延ばしてしまうと、交差点で止まる際に車体が斜めに傾いた状態で止まってしまいます。これはあまり好ましくないと思ったので、ライントレースの走行時間も併せて、交差点の判断に使いました。することで、カーブの途中で止まることなく、ライントレースすることができます。課題のコースをうまく走行するために、通常のライントレースを2パターンに分けました。�A地点からP地点右折前までのライントレース(右側走行)上図の赤線が1つ目に行うライントレースの道順です。〇最も黒いとき→右回転となっています。この動きを続けることで、交差点を直進することを除き、課題の通りにライントレースすることができます。交差点での直進は、その場から0.3秒間前進することで、実現しています。�P地点右折後からB地点までのライントレース(左側走行)上図の青線が2つ目に行うライントレースの道順です。〇最も黒いとき→左回転となっています。この動きを続けることで、課題の通りにライントレースすることができます。2パターンに分けた理由は、上図ので橙色の丸の部分をトレースした際に、誤って交差点と判断してしまうことがあり、右側走行が難しかったからです。いう事なので、スタートから左側走行にすれば良いと考えると思いますが、Q地点右折が上手くいかないということから、始めは右側走行、P地点右折後には左側走行というふうにしました。39〇A地点からスタートする動作・・・A地点から直進運動をします。SetPower(OUT_A,7);SetPower(OUT_C,7);OnFwd(OUT_AC);Wait(120);〇ライントレース中の直進運動・・・光センサが閾値を読み取ると直進します。〇交差点で停止し、カウントを1増やす・・・課題の条件にある交差点で1秒間停止するというのをサブルーチンにしています。加えて、交差点の数を数えるためにカウンターを設けています。することで、交差点ごとに違う動きをさせることができます。c_point+=1;}〇音を流す・・・ライントレースが終了した際に、歓喜の歌が流れます。軽快な音楽で、ゴールしたという達成感がでます。†このプログラムでは、主にwhile文とif文を使っています。ライントレース中の動きはwhile文を使っています。条件式は、交差点を判断するタイマーかつ交差点の通過回数で、2つの条件式を同時に満たしているときには、ライントレースを行い、2つの条件のどちらかを満たさない場合、交差点に差し掛かったと判断します。交差点での動きはif文を使っています。条件式は、走行時間かつ交差点の通過回数で、2つの条件を同時に満たした時、その交差点ですべき動作を行います。交差点で停止する度に、カウンター(初期値0)が1ずつ足されていきます。カウンターの数で今いる交差点がどこであるか把握できるので、その点ですべき行動をあらかじめプログラムしています。課題の通りにライントレースすることはできました。直進やカーブをする際に車体がジグザグに進んでいて、不格好に見えました。このような無駄な動きが多くあり、早くゴールすることは難しかったです。直進やカーブを滑らかに走行することが、今回の課題であると思います。これを解決するには、5段階に分けたライントレースをより細かく設定することや、モーターのパワーをカーブに合うように設定することが考えられます。今回の課題はプログラムを考えることが、非常に難しかったと思います。課題に取り掛かかり始めたころは、通常のライントレースすることすら、ままならない状態で混乱していました。いった問題をチームの人と考え、解決していくことで、徐々にプログラムを完成させていきました。チームメンバーがいなければ、今回の課題は達成できていなかったと思います。