今回の課題は課題2で制作したコースを用いてボールを回収して缶に向けて投げるロボットと缶にぶつかったボールを回収してゴールまで向かうロボットを用いてミッションを行うものである。今回、私が担当したのはSTART,B地点からスタートして缶にぶつかったボールを回収してGOAL,B地点に向かう方のロボットである。注意点としてはアルミ缶は5CM以上動かすこととボールを投げるロボットは半分の線を超えてはならないことである。今回私たちが制作したロボットの機能を実現するための部分が大きく分けて3箇所ある。画像の�、�、�の部分である。�の部分は重りである。�の部分が重いため重心がそちらに移動してタイヤが浮いてしまうためこれを取り付けた。ピンを留める間隔を広げるなどしてできるだけ部品への負担を減らすように心がけた。�の部分はボールを捕まえる部分である。捕まえ方は単純に振り下ろすだけである。このロボットの最も重要な部分であり、片側がしっかり接続されていないところがポイントである。片側を接続しないことによってボールを捕まえた後に後進すると自動的に缶の重みで軸がしなり缶のみ排出されるという仕組みである。�の部分は�で説明した方の反対側のアームである。こちら側は固定してある。こちら側は先端に超音波センサーを配置してある。プログラムで目標地点に到達したら稼働させて、何かがセンサーの前を横切るとモーターが動き捕まえるようになっている。センサーの下にバンパーのように丸みを帯びた部品を付けることでボールが缶を排出するときに一緒に出て行かないように工夫している。�、�共通であるがボールが隙間から出ていかにようにギアをつけたり突起をつけたりしている。†はじめはしっかりボールを探して缶とボールをうまく判別して回収しようと考えたが、どこにボールが飛ぶかわからないため運の要素があることと缶とボールを探しながらうまく区別することが難しいように思われたため探すこともせず、缶とボールを判別することなくボールのみ回収できないかと考えた結果こうなった。することによってボールを探すことと缶とボールの判別という無駄な動きをすることなくボールを運の要素を排除して回収できる。†プログラムでの主な工夫点は大きく3点あり、一つはプログラムの修正のしやすさととわかりやすさを追求するためにサブルーチンを多く使いそれぞれの動作を部品かしたことである。二つ目はより正確にボールを捕まえるために2台のロボットで通信を行ったことである。3つ目はできるだけ時間による動作を少なくしてバッテリーの減少による影響を少なくしたことである。全てモーターの回転で制御してボールを探す動作を省いた結果常に同じ場所を移動することが可能になりライントレースで失敗する可能性の排除にも成功した。30ここでは通信に使う数値とモーターの速度を定義している。モーターの速度をここで定義することによって機体が重いために電池が減ってきてパワー不足なった時にすぐにパワーを増やせるようにしている。}この部分ではメッセージの受信と相手側が缶とロボットの誤認識をしない位置まで移動を行っている。ボールを投げるロボットが投げる位置についてからこちらがキャッチをする位置につくようになっている。理由は上で説明した�の部分が誤って缶と認識される場合があったためである。最初にmsgという変数にSTOP(99)が入っており、向こうがGO(10)を送ってくると受信をするループを抜けるようになっている。}この部分では回転を行っている。一瞬だけ最弱の力で動くようになっているのはこれがないと次の動作を行うときにこちらの意図しない動きをするからである。これを入れると正常に動作をしてくれるので全く意味がないような動作であるがこの動作が加えられている。}この部分では前進を行っている。この動作終了後の位置がボールを捕まえる定位置である。}この部分ではメッセージの受信とボールを捕まえる動作を行っている。こちらが定位置に着いた時に投げる側のロボットに『ready(20)』送る。超音波センサーの値が30以上かつ変数tの値が500以下の時はボールを待つ。それ以外になったら腕を下ろしボールを捕まえるようになっている。始めの方に宣言している変数tは万が一ボールをうまくセンサーが認識しなかった時のために時間で閉じるようにするためのものである。この時はボールが捕まえられる範囲になければならないため運の要素が強い。}この部分では後進を行っている。プログラム上は単純な動きであるがハード面でボールと缶を判別して缶のみを排出するというプログラムでは実現することの難しい動作を行っている。}この部分ではボールを捕まえ缶を排出した後ゴールへ向かう動作を行っている。このロボットは缶を探すという動作を排除しているため常に同じ場所を通ることができるためライントレースを行うことなくゴールへ辿りつくことができるためこのような角度での移動でゴールへ行くことができる。ライントレースは電池の残量や路面の状態などによってたまに誤作動を起こすことがあるので運の要素が少なからずあるがそれを排除することでより精度を上げている。}上で解説したサブルーチンを実行する。このように全て部品化してあるため見やすく、修正が容易である。画像内の番号は上で解説した時のサブルーチンの番号に対応している。今回の課題は最後の課題であり今までの集大成である。今回の課題ではハード面はかなり満足できるものとなったと思う。地味ではあるがプログラム面でもシンプルで判りやすいプログラムができたのではないかと思う。シンプルで読みやすく修正がしやすいプログラムを書くことは以外と難しいと思う。今回のロボットは機能的には斬新で良いと思うが、見た目は自分でもあまりいいとは言えなかった。異様に大きな重りはなくせるようであれば無くしたかったが、無理であった。今回の課題は練習の時はほぼ100%缶を排出してボールのみを捕まえることができたが、本番では一回しか成功しなかった。できるだけ運の要素を排除したつもりであったがまだ甘かったようである。現実的に完全に運の要素を排除することは不可能であると思うが、もっと徹底的に繰り返し検証していたらその運のようをさらに排除できたと思う。