課題3のフィールドと大まかな説明を載せておく。図1:フィールドフィールドは図1のように課題2と同じものを使う。図のマジェンタの円に、ピンポン玉を2つ入れたコップを逆さまにして置く。図の黄色い円に障害物の紙コップを通常の向きに置く。X地点の茶色い枠にピンポン玉を入れ、Yの地点に紙コップを置くことで得点を得られる。紙コップは重ねておくと得点に加算される。障害物は決められた枠より出てしまうと減点される。詳しいルールは2017年度後期の課題3を見ていただきたい。班のメンバーは私のほかにriko氏とtono氏がいる。この二人のレポートも見るとよいだろう。今回の課題に対しては同じロボットを2つ作った。これは、コップを重ねることがこのロボットのようなアームでは1台では上手くいかなかったことと、ピンポン玉の回収を効率よくできるのではないかと考えたからである。1台が失敗したときにある程度補完できると踏んだのも理由の1つである。課題2のときと同様、タイヤ間の中心に取り付けることで移動などを楽にした。写真3:支えこの部分は、アームの重さのために、持ち上げているときと下ろしているときで重心がずれ、機体が揺れてしまうのを防ぐためのものである。写真4:アーム全体アーム全体は写真4のようになっている。いくつかの機能を持っているので、以下にそれを示す。超音波センサーは、アームの後方の動かない部分から伸ばして取り付けた(画像では少しわかりにくいと思う)。初めはもっと後ろのほうにつけていたが、正しく検知することがほとんどなかったので位置を前にずらした。問題は、超音波センサーを縦につけられなかったことと、腕を開いておかないと物体を検知できないことだ。センサーの下に見える円形の物体は、これがセンサーに当たることでアームが垂れ下がらないようにするための部品である。これは、スタート前の接地面はその領域(A地点及びD地点)の枠から出ないようにする、というルールへの対策と、コップをつかむときにその中心付近をつかめるようにするためのものである。この部分によるセンサーの誤検知はなかったと思われる(未検証)。写真7:スタート後のスタンドこれは、スタート前のルールのためだけのパーツである。スタート前は写真6のように立っており、センサーなどが接地しないように働き、始まると写真7のように倒れるようになっている。この部品が動きの邪魔になることはなかった。写真8:上から見たアームアームを上から見ると写真8のようになっている。使用した部品は必要最低限にしたはずだが、重さと大きさが結構あったため、自重で腕が下がるのを防いだり、障害物にぶつからないようにする必要が出て来た。図2:コップを固定(上から見た図)写真9の赤線で囲まれた部分が今回の工夫である。これがあることによって、図2のようにコップを3点で支えることができ、コップが安定するようになった。パーツを腕のにはつけられなかったが、大きな問題にはならなかった。腕の先にあるタイヤは回転するようになっており、コップが少し離れていても内側に引き込んでつかむことができる。図3:割りばしの枠越え本課題では、割り箸で作った枠の中にピンポン玉を入れるにはコップを持ち上げすぎてはいけない。このロボットではピンポン玉が転がった後に回収できないからだ。そのため、ピンポン玉を枠に入れるには、紙コップをつかんだ後少しだけ浮かせる必要があるが、アームの自重のために「少し持ち上げる」ということができない。それの解決策が、このパーツである。この支え棒を腕より少し下に取り付けることで、図3のように、コップをつかんだときに腕で支えた点より下から押されて前方が浮き上がるのである。写真9のように、青矢印の向きにモーターを動かすと写真右側の黒い歯車も当然その向きに回る。その回転を受けて紫矢印の向きに真ん中の薄い灰色の歯車が回転する。すると、写真左側の黒色のウォームギアも同じ方向に回転する。それによって、腕の根元にある2つの歯車が赤矢印の方向に回転し腕が閉じるのである。逆にモーターを回せば当然腕は開く。写真10は腕を閉じてコップをつかんだ状態である。この状態でさらにモーターを腕を閉じる方向に回すと、どこかで腕の歯車が回らなくなる。すると、写真9の中心の歯車が回らなくなり、写真11のようにアームごと持ちあがる。本番ではここまでたどり着けなかったが、重ねるプログラムだけの場合はできていたのでその方法をここで説明しておく。子機はピンポン玉を置いてから所定の位置で待機する。このとき、子機は一旦コップを放して後退し、腕を閉じておく。これを怠ると、親機の超音波センサーが子機の腕を誤検知してしまう。その間に親機もピンポン玉を置き、子機のほうに向かう。図4:コップの重ね方1次に、図4のように親機はコップを持ち上げたままコップの近くに来る。その後、超音波センサーでコップを認識したら、子機と通信しメッセージ1を送って親機は一時停止する。コップは持ち上げたままである。図5:コップの重ね方2通信をして子機がメッセージ1を受け取ると、図5のように子機は前進してコップを軽くつかみ固定する。図6:コップの重ね方3その後、図6のように親機も前進する。このときの移動距離の制御が難しかったので、コップにぶつかるぐらい前進させて、その後後退して位置を調整するようにした。位置を決めた後、腕を少し下げて紙コップをかぶせるようにし、子機と2度目の通信を行う。図7:コップの重ね方4図7ではわかりにくいが、ここで子機は腕を少し開いて親機が重ねたコップが引っ掛からないようにし、同時に少しだけ前進し、コップを押す(図で子機の腕が短くなっているのは腕を開いているような感じを出そうと試みたためである)。このコップを押す動作がないと上手く重ならないので、重ねるためにロボットは2台必要だった。図8:コップの重ね方5親機も腕を下ろしていくと図8のようにコップを重ねられる。3つ目を重ねるときも同じ方法である。†プログラムは、ライントレースなどの移動のプログラムと紙コップ関連のプログラムとで別々に作った。私は紙コップ関連のほうを担当したのでこちらを主に解説する。移動のプログラムについてもコメント文は入れておくが、詳しい内容はriko氏の課題2のプログラム及び課題3のプログラムを参照していただきたい。ちなみに、音のプログラムもriko氏のものである。ここで私たちの班が立てた計画を大まかに示しておく。大まかというのは細かい移動を省いているからだ。子機の移動の順番を青丸、親機の移動の順番を赤丸で示している。図9:順路1子機はA地点からスタートし、ある程度直進してから超音波センサーでピンポン玉の入った紙コップを探して取得する(青の経路�)。その後ピンポン玉を枠内に入れ(青の経路�)、緑色の丸の地点で待機する(青の経路�)。親機はD地点を後ろ向きでスタートし、ある程度進む(赤の経路�)と黒線を見つけるまで回転する(赤の経路�)。黒線を見つけるとライントレースを行う(赤の経路�)。交差点に着くと、超音波センサーを使ってピンポン玉の入った紙コップを探し取得する(赤の経路�)。その後赤の経路�でピンポン玉を枠内に入れる。子機と親機で通信を行い、紫色の丸の地点に紙コップを重ねる(青の経路�及び赤の経路�)。図10:順路2順路1の後、子機は何もせずに緑色の丸の地点で待機する。親機はある程度後退した後(赤の経路�)、ライントレースに復帰する(赤の経路�)。ライントレースをした後(赤の経路�)、交差点判断で超音波センサーを使い、ピンポン玉の入った紙コップを探し取得する(赤の経路�)。その後ピンポン玉を枠内に入れる(赤の経路�)。位置を調整した後(赤の経路�)、子機と親機で通信を行い、紫色の丸の地点に紙コップを重ねる(青の経路�及び赤の経路�)。親機が重ねたコップをY地点に置いて終了する(赤の経路�)。今回のプログラムでは、アームのある方をロボットの前方として、モーターA,B,Cは以下のように対応している。子機親機とも同じ対応である。//diameterを定数5.45とする。//treadを定数11.3とする。これはタイヤのトレッド幅である。//piを定数3.1415とする。