相手のロボットに向かってブロックを投げるロボットを製作せよ。ロボットは課題2で用いたコースを走る。ライントレースをしながら相手のロボットを見つけ、5秒間追跡した後ブロックを投げること。後ろのタイヤ2つと前につけた棒の3点で支えている。赤矢印のように、モーターを回転させて打ち出す仕組み。緑の枠のレゴで縦に固定した。(モーターの向きが下向きの為)ブロックを縦に置いた時、隙間ができるだけ狭くなるように工夫した。することでブロックが真っ直ぐ飛び、飛距離がのびた。ブロックを2つ以上装置に積むときに、1回ブロックを打って2個目のブロックが装填されるときにレゴの突起に引っ掛からないようにした。ラチェットを取り付ける際、構造上の理由で右側のラチェットが長くなった。初めはキャスターを使っていた。キャスターがうまく動かず、摩擦を大きくする原因になってしまった。キャスターの改良もしたが、試しに棒一本を使ってみたところ上手くいったので、採用することにした。タイヤが空回りしてしまうという問題があった。後輪の摩擦を大きくすることで解決をはかった。その結果、車体が上向きになり、ブロックが装置から落ちないという利点が付いた。SENSOR_LIGHT);//センサー1定義(ライントレース用)while(1){if(SENSOR_1<THRESHOLD){//最初にライン上(黒)の場合OnFwd(OUT_C);Wait(15);//左に逸らすif(SENSOR_1>THRESHOLD){//ライン外(白)の場合OnRev(OUT_C);Wait(15);//右に逸らす}}}Off(OUT_C);}最初ライン上(黒)に置く。これによってwhile内の1つ目のifに入る。すると左に逸れ、センサはライン外(白)に。ライン外(白)になると、2つ目のifにはいり右に逸れる。ディファレンシャル・ギアと2つのラチェットを使ったことで直進が出来ない。センサ1つなので、白と黒を交互に感知して進む方法をとり、ジグザグに進むことにした。l_maxに観測値lを代入(l_maxを更新)}}}if(SENSOR_3>=(l_max-5)){//SENSOR_3がl_max(相手の光)を感知したら[誤差±5]repeat(16){//5秒間追跡するOnFwd(OUT_C);Wait(15);OnRev(OUT_C);Wait(15);}shoot();//弾を打つ}PlaySound(SOUND_UP);}Off(OUT_C);}『5秒間相手を探し続け、いなければまたそれを繰り返す』というプログラムにしました。大きな欠点は、ライントレースをするプログラムが、ただ黒を見つけ出すというもので、ライン外に出てしまったときに止まってしまうということです。}ライントレースは上記、光センサ1つでライントレースする仕組みによる。このライントレースは交差点を直進することはなく、左折してしまう。結果的にコースの外回りを走る。弾を打つのは光センサの値が45を上回ったとき。45というのは、相手の光を感知したときの値。今回の課題は、光の最大値を求めるというものでしたが、うまくできたと思います。悩んだことがディファレンシャル・ギアを使ってロボを製作することでした。最初はディファレンシャル・ギアを直接タイヤに付け、真っすぐ進ませるようにしようとしましたが、機体が重く摩擦が大きくなり直進が出来ませんでした。それにギアを反転させて方向転換をしようとしましたが、それも重さのせいで出来ませんでした。結局直接つけるのはやめて、ジグザグに進ませるようにしました。こちらの方がよく動きました。ロボ製作のおかげでロボの組み立てがうまくなったと思います。ロボ製作は弾を飛ばす装置にこだわりました。ギアの反動でレゴが外れてしまう事が何度も起きました。これを解決するために頑丈にしましたが、重くなってしまい外れて落ちてしまう事がありました。レゴが多すぎず、且つ頑丈にするように工夫しました。プログラミングはシンプルにできたと思います。今回の課題でプログラミングの理解がより深まりました。追尾しなくてよいということだったので、前に動くものがあった(光センサの値の変化)場合に投げることにしようと考えた。光センサは、前方に物があることを十分感知できなかった。方向によっても値の変化が大きかったので、センサの周りを囲って周りの影響を小さくすることもしてみた。したがって相手のセンサからの光を感知するしかないと考えた。蛍光灯の明りがあるため、通常の状態とセンサの光が当たった時の差が小さいと思う。暗いところでやれば、もっと正確に光を見つけられるのではないかと思った。状況をロボットにどう判断させるかがちゃんと説明してあり良いと思います。FI特徴が述べられていて良いと思います。課題も述べられています。