†ロボットコンテスト(課題3)は課題2で作成したコースを用いてタイムレースを行い、最終得点で勝負する。今回は2台以下のロボットを使用して、C地点(3個)とD地点(3個)の2箇所に設置された紙コップをコース中央の輪の中に交互に重ねる。最終的な点数は紙コップの個数に応じた基本点と動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性についての技術点の合計とする。†2台のロボットはA地点とB地点からスタートする。紙コップは(C地点のコップ)→(D地点のコップ)の順に重ねる。最終的に紙コップはロボットが触れていない状態で自立していること。競技時間は紙コップをすべて(最大6個)重ねるか、審判が続行不能と判断するまで。競技が終わるまでロボットに触れてはいけない。今回の課題では各地点の枠内であれば自由に紙コップを配置してよい。私たちの班は次の図のように紙コップを配置した。†このロボットはA地点からスタートし、コース中央で待機する。その後、ロボット2が運んできた紙コップを挟んで抑え、重ねるときに倒れないようにすることを目的に制作した。光センサを2個ともロボット2に使ってしまったので、ロボット1の動作はすべて時間指定になった。※本来はその予定で作ったが、最初のスタート位置のずれやロボットの調子によって、正しい場所で待機できず、ロボット2の動作の邪魔、紙コップをうまく固定できないなど課題の成功率が下がると判断し、ロボコンの2回目の挑戦では使用しなかった。今回使用したモーターの回転はもともと縦方向である。そのため、そのままではモーターの力を使用して左右にアームを開いたり、閉じたりすることはできない。写真のように歯車(水色で囲ったもの)を使用することで、縦向きの力(赤い矢印)を横向きの力(青い矢印)へと変換している。緑の枠...ロボット2がコップを下すときにロボット1のアームが邪魔にならないように、できるだけアームの位置を下げた。青の枠...タイヤを小さくし、ロボット2の動作の邪魔にならないようにした。小さくするのではなく、コップをつかんだ時の安定性も確認しつつ、タイヤのサイズを決めた。赤の枠...留め具はできるだけ小さいものを選び、高さをなくすことで、ロボット2がコップを下すときに引っかかり、コップが転倒しないようにした。//121の値をロボット2から受信したとき、次の指定された動作を行う。※値は0〜255までの値をメッセージとして送受信できる。†このロボットはB地点からスタートし、ライントレースを行って、紙コップのある地点へ行く。紙コップをつかむ役割と重ねる役割を持っている。光センサーをアームと同じ面に付けることで、紙コップをつかむ時に生じる、ロボットと紙コップの間合いのずれをできるだけ抑えた。このロボットは紙コップを重ねる際にロボット1との衝突を減らすために、各アームにタイヤを1つしか取り付けていない。紙コップを持ち上げたり、運んだりするときの安定性が低いので、各動作を行うときに別の理由で紙コップがずれたり、落としたりすることを減らしている。【光センサー】タッチセンサーでは紙コップに反応しない・紙コップがずれる可能性が考えられたので光センサーを使用した。上側(赤色の枠で囲まれた)光センサーは紙コップの識別のために使用。下側(青色の枠で囲まれた)光センサーはライントレースのために使用。※上側に紙コップ用、下側にライントレース用を付けた。この形(全体像前側及び下の光センサーの写真参照)にしたのは、光センサーが真ん中にあることで、挟む時にアームが紙コップに対して、同時に力を加えることができるようにするためである。その結果、アームの力のつり合いが取れずコップが転倒したり、つかめなかったりすることを防いでいる。紙コップを重ねるまでの手順は以下の通りである。アームが(アーム写真�の赤い矢印の方向に)閉じる。※紙コップ上側の淵がアームのタイヤ部分に引っかかることで紙コップを持ち上げている。限界まで紙コップをつかむ。アーム写真�の赤い矢印の方向にそれ以上力を加えることができない状態に達する。それまで、アームを閉じる方向にかかっていた力が、上向き(アーム写真�の赤い矢印の方向)に力がかかり始める。アームは上へと動き紙コップが持ち上がる。下すときはモーターを逆向きに回せば、自動的に下り、アームが開くので、重ねることができる。※モーターの力の変換方法(アーム写真�の青い枠)は上側(ロボット1/構造)に記載している。アームを上下に動かすときのスピードはアームのギア比(各ギアの大きさとギア同士のサイズの違い)によって決まる。そのことをあまり詳しく知らなかったこともあり、改良することができなかった。次の機会で困らないように調べておきたい。//if以外の条件を決めることができる�ライントレース課題2で行ったライントレースを利用している。ライントレースとは光センサを用いて、ロボットに黒い線を認識させ、トレースさせることである。Off(OUT_AC);}�CとDの1つ目のコップをつかみライントレースできる位置に移動する紙コップの配置と番号は上に記載している。//ラインまで移動Wait(170);go_forward;Wait(100);}�コップを下し、ロボット1と通信するコップを前に押すことで2つ目以降のコップを重ねるときに、ひっかかりコップが転倒することのないようにした。//ラインまで移動Wait(60);turn_left2;Wait(120);go_forward;Wait(50);}【メインプログラム】ロボットが交差点を判断するたびに変数cの値を増やしていき、正しい順番で動作するようにした。course_checkはC地点とD地点のどちらに行くかを交互に判断できるようにし、cup_countはどの紙コップでどの動作を行うのか区別した。変数dはすべてのコップを回収したとき1になり、動作を停止する。私たちの班は、1回目はロボット1が正しい場所に行かず、そのずれによってロボット1のアームにコップが当たり、コップが倒れてしまって失敗したが、2回目の挑戦で紙コップを1つC地点から運ぶことに成功した。そのあとライントレースに失敗した。その結果、基本点は3点、技術点は9.2点の合計12.2点を獲得し、2位だった。今回は今までの技術を組み合わせた課題だった。プログラムが前回よりも少し長く・複雑化するだけで、ロボットは自分の想像と異なる動作をし、少しのずれが最終的に大きなずれへとつながってしまう。今回は紙コップを運ぶだけだったが、航空機などのプログラムならば失敗は許されない。この講義を通じてプログラムの正確さ・簡潔さの重要性とロボットを組み立てる発想力の乏しさに気づくことができた。