下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。黒い線に沿って動き、350mlの空き缶(黄色で表示)を移動させるロボットを製作せよ。二つのコースがあり、自分はコース1を選択して作成した。下の図で青→緑→黄色の矢印の順で動き、緑の矢印上は空き缶を運んでいる。停止と書かれた交差点では、一時停止をしなければならない。課題について詳しくはこちら。†レゴのクラフトガイドの作り方を参考に車輪、光センサーの取り付けをした。缶をつかむ機構は虫取り網の要領で囲って運ぶようにした。始めはモーターの動力を直でつないでアームを制御をしていたが、動きが早すぎて制御が難しいためモーターとアームとの軸の間に大きい歯車を入れて制御しやすくした。†コースの関係上左側のふちをライントレースするようにした。ライントレースをするうえで重要なのは光センサーである。黒の線上でも光センサーでは違う値を検出するため、検出された値に対応した動作をさせることでライントレースができる。私たちは白と黒の間の値を基準として、そのプラスマイナスで制御をおこなった。下の表にその値で行う動作を示す。上の表で整理した動作をマクロとして以下のように定義した。下にライントレースで使用したサブプログラムを記載する。//とまれ}このプログラムをよく見てもらうと真っ黒と感知したときの動作が上の表とは違い黒を感知したときの動作になっている。これは次に説明する交差点の判断で誤動作を減らすために変更したためである。whileでタイマーの値を使っているのも交差点の判断に必要なためである。交差点を認識させるにはライントレース中の真っ黒である時間によって認識させる。交差点に差し掛かると直線よりも真っ黒の時の時間が増加する。このターンにかかる時間が一定以上になった時にライントレースのプログラムを抜け次に対応する動作につなげる。私の作った機体では0.28秒が適正だった。以下に交差点時の様子を図で示している。ここでなぜライントレースのプログラムを変更したのか説明する。それは交差点の感知ができなかったためである。主な原因は二つだと考えられる。タイヤの出力が大きいこと→交差点でもすぐに回転しトレースし続けてしまう。センサーの位置が車体から離れていること→交差点に対して車体が斜めに入ってしまいターンにかかる時間が減少してしまう。わかりずらいと思うので下の図にて補足する。上の写真は実際の機体部の様子である。†ライントレースで使った以外に以下のマクロを定義した。交差点を渡る時間や缶を取りに行く時間をその時々で調節できるようにした。†ライントレースで使用したサブプログラムのほかに以下のプログラムを用意した。下のサブプログラムはGからH間のライントレースで使用するプログラムで、25秒間交差点の判断をしないでライントレースをするというプログラムである。GからH間は半径の小さいカーブが多く交差点と判断してしまうことが多いためこのようにして対処した。//黒なら旋回しなさい}}Off(OUT_AC);}次のプログラムは真っ白を検知するまで左回転するプログラムである。これは交差点を感知してからライントレースのプログラムに入る際、真っ黒の範囲から出られず再び交差点と判断することを防ぐためである。下の図でも軽く説明する。//停止}次のプログラムは缶をつかむプログラムと、離すプログラムである。//白のとこまで回転させる。//缶をつかむため所定の位置まで前進する。//速く動き出すと誤作動するので少し時間を空けるTURN_LEFT();実際にうまくいったのはここまでである。次のライントレースから交差点でないのに停止してしまう問題が生じる。前回の課題1に比べ様々な問題に直面した。機体に関するトラブルが多くプログラムでそれをカバーするように努力した。結果として課題2を達成することはできなかったが、修正する能力が身についたと思う。今回の課題の制御は時間で調整しようとするとトラブルが多くなってしまう。光センサーによってより細かい制御を行えたら課題を達成できたかもしれない。缶をキャッチしに行くときの機体の角度が円の中心に向かっていなかった。これを解決するために真っ黒を感知するまで回転するといった制御が必要だったのかもしれないと思った。次の課題が最後なのでこれまで学んだことを生かして課題をクリアさせたい。