青と赤のボールを運搬して、それぞれ所定の350ml缶の上に乗せる。前回のロボットを改良して、カラーセンサーと超音波センサーが真ん中に来るようにした。超音波センサーを挟むように取り付けてある2本の灰色の棒は、缶に近づくとき少しずれていても、缶を無理やり超音波センサーの正面に来るように取り付けてある。ボールを掴むのではなくベルトコンベアを使って掬い上げるようにした。することによって、ボールを2つ保持することができるので、s字カーブを通らなくて済むようになった。ベルトコンベアをさらに回すと、ボールは車体上部にあるスロープに導かれそのまま缶に向かって転がっていく缶に着地するとき、何も手を加えないとボールの水平方向の運動エネルギーが強すぎて、ボールが缶から飛び出してしまうため、スロープの出口に暖簾のようなものを設けた。これを設けることによって、ボールのエネルギーを殺し、飛び出すことを防いでいる。今回はジャイロセンサーを利用していて、車体の回転した角度を測っている。最初はUFOキャッチャーのようにボールを掴むロボットを考えていたが、課題一の反省からモーターによってモーターを動かすと車体のバランスが悪くなったり、ケーブルに引っ張る力が加わって正確に動かないと思ったので、ベルトコンベア式にした。球を2つ保持できるため、赤玉を入手したらそのまま青玉へ進む。青玉を入手したら、次にベルトコンベアを回したとき出てくる球は赤玉なので、赤玉を乗せる缶のもとへ向かう。地図上の扇形の図形は缶を見つけるときに使う超音波センサーで調べる範囲。角度だけでなく調べる距離も設定することで、万が一缶が見つからなくても暴走しないような逃げ道を作った。赤玉を乗せるゾーンの缶は間隔が広いため、ダミーをありにした。青玉を乗せるゾーンは車体の大きさの関係上、缶をずらしてしまう恐れがあるため、ダミーなしで行う。基本的に課題2と変化は無い。stop()赤ボールを缶5,6に乗せるときのために、設定した時間で終了するライントレースを作成した。#j秒経った時に止まる。time.sleep(3)モーターを回すだけのシンプルなプログラムになっている。基本的に220度ずつ回している。課題2ではタイヤの回転角度で車体の角度を測っていたが、それだと車体のバッテリー残量で回転角度が変わっていたので、ジャイロセンサーを利用して改善した。-6がついているのは、ジャイロセンサーの誤差分を埋めるためにある。超音波センサーの値が2550を示した時にwhile関数を抜ける。ここで言う2550というのは2550だけの距離があるということではなく、超音波センサーと缶の距離が限りなく近いことを表している。超音波センサーは2つのスピーカーから発せられた超音波の干渉縞を計測しているのではないかと思う。超音波センサーに缶を限りなく近づけた時、干渉縞が形成されずセンサーが自身の測れる距離の限界である2550ではないかと勘違いをする。それを利用して超音波センサーが缶に限りなく近づいた(センサーの値が2550)時、whileのループを抜けるようにした。分かりづらいので画像を載せておく。#赤は番号の場合分けが容易だったため、赤のみダミーを避けるために分岐を設けた。その際に缶に番号を入力する。†ロボコンでは無事に優勝することができた。青ボールを缶に乗せることが出来なかった。本番で失敗したところの1つは赤いボールを掬う時である。これはジャイロセンサーの調子がEV3を起動した時に少しだけ変化するため、180度回転したつもりが、行き過ぎたり足りなかったりするのが原因だ。2つ目は赤ボールを乗せた後、交差点Iに侵入する時にライントレースがうまく作動しなかったことだ。これはロボットを作動した時の外部の環境(蛍光灯の明るさなど)によってカラーセンサーの値が少し変化したのではないかと思われる。課題3では課題1や課題2の反省点を生かしたロボットができたのではないかと思った。このゼミを受ける前はロボットを動かすために、いかに良いプログラムを作れるかが課題だと思っていたが、実際に取り組んでみるとロボット自体のハードの大切さに気づかされた。与えられた課題に適したロボットを作り、それに合ったプログラムを作ることが大事である。