第三回目の課題は、懐中電灯の場所を探しボールを当てるというもの。課題内容はこちらを参照。課題3のロボットはは、課題2で使用したロボットをベースにした。ベースにしたロボットは課題2のロボットを参照。課題3の内容を遂行させるため、特に光センサーへの光の入り方を工夫した。以下、今回の変更点を詳細に記載する。第三回目の課題内容に沿わせるため、第二回目のロボットでは光センサーを下向きに使用していたが、今回は前方にある光源を光センサーによって判断するため、光センサーを横向きに固定し直した。課題2では、アームの挙動を制限しすぎたと感じたため、アームの挙動可能区域に余裕をもたせてある(アームの回転可能角度が100°程度だったものを150°程度に向上させた)。光を前方からのみ入るように、光センサーの左右に壁を取り付けた。そのようにすることで、斜めからの光入射を抑えられ、より正確な位置が把握できるようになった。天井の電灯等からの直接光を抑えるために、光センサーの上にもブロックを取り付け、光センサーの受光部が影になるようした。そのブロックには上の写真にあるような90°の壁を作れるものを使用し、ボールの位置固定にも役立てた。前方にボールを固定する形式のため、課題2のロボットではボールによって光センサーの受光が阻害されてしまっていた。実際に、光センサーの位置変更のみを行った課題2のロボットでは、ボールの受光阻害により試行毎にかなりの誤差が生じてしまった。それを改善すべく、ボールの固定位置を変更する必要があった。そこで、上記の写真のように、アームを短く改良し、ボールを持ち上げるような形式をとった。このようにすることで、前方にある光源からの光の通路を確保し、試行毎の誤差を最小限にした。課題2のロボット作成の際に、既にボールを固定化していたため、今回はボール固定の吟味は不要となり、時間短縮に繋がった。†まずは課題に沿った最低限の内容のプログラムを完成させることを目標とした。†ここでは、一周するうちにどこが光の強さの最大値かを測定し、一周し終えた時、光の最大値だった場所まで戻るというプログラミングを行った。光の強さの記録方法として、「測定した値が、その前に設定した最大値より大きければ、その値を最大値として書き換えなさい」というプログラムを、一周する間に幾度も繰り返させる方式をとった。その光の最大値だった部分を0秒としてカウントを初め、最後に書き換えられた最大値の場所から、光測定のための回転を終えるまでの時間を計測した(最大値が更新される毎にタイマーも0秒に戻されるという設定)。光測定のための回転を終えた時に、最大値からの時間を計測していたタイマーに記録された時間の分だけ逆回転することで、光の最大値(光源の方角)へ向き直すことができる。そこからボールを放ち、懐中電灯に当てるというプログラムを書いた。以下の画像は、上記のプログラムを用いた時の再現、簡略説明を兼ね可視化したgif画像である。第一段階のプログラミングを元に、より正確に位置を把握するためのプログラムである。以下、第二段階プログラム(完成版)を記載する。shoot()は変更していない。第二段階目のプログラムは、第一段階目のプログラムではカバーしきれないモーターの回転出力によって生じる誤差を、最小限にするためのプログラムである。本体が一回転する内に光の最大値を探すという課題であるが、回転し始めてから90°のところに光源があるのと270°のところに光源があるのでは、一回転し終えてから戻るまでの時間に大きな差がある。回転し始めてから270°のところにある場合、タイマーによって計測される時間は比較的短いため、戻るための回転角は小さい。よって、戻る時間が短い場合はモーターの出力に関する誤差は少なくなる。回転し始めてから90°のところにある場合、タイマーによって計測される時間が270°に比べて大分長い。よって戻るための回転角が大きく、戻る時間も長くなるため、モーターの出力に関する誤差が顕著になってくる。それを補うために、一度計測した最大値付近に再び戻り、その付近を小さい範囲で再び計測し直すというプログラムを作成した。このようにすることで、360°どの範囲に光源がある場合でも、正確な位置判断が可能になった。下の画像は第一段階プログラムを用いた時の可視化同様に作成した説明用gif画像である。「このようにプログラミングをすれば、このような動作になる」ということがプログラミングをしながら明確なイメージできるようになっており、このゼミ全体を通じての成長を感じられた。今までは参考資料に目を通しながら作成していたが、今回は目を通す必要もなく、スムーズに作成できた。このゼミでは、全てのロボット作りに携わっていたため、ロボットとプログラミングの食い違いは比較的少なかったように思える。プログラムを理解するだけでなく、そのプログラムで実際に動くロボットの構造、性質を理解することが最善の動作に繋がると感じた。これから工学を学んでいく上で、ソフトとハードの関わりをもっと深く学んでいく必要がある。このゼミで得た知識や経験を今後の学習に活かしていけるよう、努力したい。