黒い線に沿って動き紙コップを移動させるロボットを製作せよ。†トレースを可能にするために右と左に一つずつモーターをつけた。トレースの際にロボットが安定するようにモーターを取り付けた後輪2つに加え自由に動く前輪を2つ取り付けた。課題1に比べてロボットの前後左右の動きがより活発になったため、壊れにくい丈夫なロボットを作るように意識した。光センサーがロボットの中心部にできるだけ近づくように努力した。光センサーをロボットのど真ん中にしてしまうと、交差点などでラインから抜け出すのが困難となったため、中心よりもやや前に取り付けた。後輪は一番小さいギアと一番大きいギアをかみ合わせることでタイヤの回転を遅くした。コップを取るアームは下のように囲いを作りそれを上下に移動することで取れるようにした。アームを重くし過ぎるとアームを引き上げることが出来ないため軽くする必要があったが、少しロボットがずれてもコップが取れるようにするため可能な限りアームを大きくした。†スムーズなライントレースを可能にするために5段階の移動方法を定義した。直進、右折、左折は時間が指定できるよう定義し、アームの上げ下げは時間も定義した。基本的には右側のライントレースを使ったが、右側のライントレースではR地点からQ地点へ移動することが出来なかったため左側のライントレースも作った。†SetSensorMode(SENSOR_2,SENSOR_MODE_RAW)を入れることにより詳細な値を測定することができる。下のライントレースのサブルーチンでは右旋回の時間(光センサーにより示される線の閾値が830より大きくなる時間)が連続で0.32秒よりも大きくなった場合whileのループから抜け出すというものである。交差点にぶつかるとき、黒を回避して右旋回をしてもまた黒が続き連続で光センサーが黒を感知するのが0,32秒を超えると、whileのループから抜けて止まるという方法で交差点を判断する。右旋回以外の動きをするときはたとえその動きが連続で0.32秒以上動いたとしてもClearTimer(0)を入れているためにその時間はカウントされないですむのである。ここでの0.32秒は実際に計測して最も良いとされた時間であり、これが0.32秒よりも小さければF地点からE地点までのカーブが急なラインをトレースすることが出来ず、また0.32秒よりも大きければ交差点判断しないときがあった。光センサーが示す閾値に次のように動くようにした。上にある線の左側のライントレースと仕組みは同じで、線の左側のライントレースのサブルーチンであ左旋回の時間(光センサーにより示される線の閾値が820より大きくなる時間)が連続で0.32秒よりも大きくなった場合whileのループから抜け出すというものである。†スタートからゴールまで行くことが出来たが、コップをうまく運ぶことが出来なかった。コップの付近まで近づいた後にコップの前で微調整をしてからコップをとるという流れにすべきだった。今回の課題は課題1に比べて、プログラミングが大変だった。ロボットの見た目を意識しすぎてプログラミングにあまり時間を割くことが出来なかった。電池の消耗により変わった結果が出たので最後まで調整する必要があり大変だった。