[[2017a/Member]] #contents *課題について [#tf0df331] **課題:空き缶収集&積み上げロボット [#yf45466e] 空き缶を収集し、ゴールに空き缶をなるべく高く積み上げる #ref(./2017a-mission3.png,50%,2) ***フィールドの説明 [#nd023378] ◦フィールドは課題2で使用した紙を使用する~ ◦図のピンク色の場所に350mlの空き缶を置く~ ◦図のライトブルーの円のいずれか一箇所に中身の入った350mlの缶を置く~ ◦中身の入った缶には紙をはったり図などを描いてもよい~ **ルール [#tb055b24] ***基本のルール [#o632f463] ◦競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。| ◦図のA地点または(および)PQRSで囲まれた中央部の円からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。~ ◦空き缶を集めて図のT地点を含む「ゴール」と書かれた3/4円と2線分で囲まれる領域に空き缶を運ぶ~ ◦なるべく高く空き缶を積み上げる~ ◦運び終わった後、あるいは積み上げた後はロボットはゴールの領域から外に出ること。また空き缶と接触していてはいけない。~ ◦開始の合図から5秒以内にスタートボタンを押す作業を完了すること。~ ◦競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。~ ◦ロボットスタート後、速やかに1〜3の数字が記されたくじを引き、中身の入った缶を引いたくじの位置に設置する。~ ◦途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。~ ***基本得点の計算方法 (片道)◦n段目の空き缶の点数を3n点とし、すべての空き缶の点数を合計する。 [#y5f9d79f] ◦中身の入った缶については、その缶自身を含め、その缶の上下に積まれている缶の点数をすべて倍にする^ ◦例:中身の入った缶の上に3本の空き缶を積んだ場合:(3+6+9+12)×2 = 60点~ ◦例:空き缶を3段と4段に分けて積み、中身の入った缶は運搬するだけでその上に空き缶を積まなかった場合: (3+6+9) + (3+6+9+12) + 3x2 = 54点 ***技術点の計算方法 [#ge31994b] 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安: ◦空き缶を取りにいくまでの動作 (3点)~ ◦空き缶を掴む動作 (3点)~ ◦空き缶をを運ぶ動作(2点)~ ◦空き缶を積み上げる動作(5点)~ ◦2台のRCXまたはNXT、EV3の連携の良さ(3点)~ ◦自立型のロボットとしての形や動作の美しさ、斬新さ(2点)~ ◦その他 (2点)~ *ロボットについて [#t2ef30cc] **全体図 [#sc2e7ee8] #ref(./robo1.png,2) 過去の作品を振り返って、アイデアを得た。~ RIS2台を横に配置して、お互いに交信できるようにした。~ その際横に配置したことによって本体自体が横にとても大きくなってしまい、バランスをとるのが大変だった。 #ref(./robo5.png,2) バランスをとりつつ、動きの邪魔にならないように、後ろにキャスターを付けた。 **缶の回収について [#s8d1c10d] #ref(./robo2.jpg,50%,2) 上の写真のように前のアームを開いて、缶を回収する アームを閉じることで、缶を前後に2個並べる。 **缶の積み上げについて [#xd41dc8e] #ref(./robo3.jpg,50%,2) #ref(./robo4.jpg,23%,2) 前のアームで缶を二つ押し、奥のタイヤを回転させることによって、奥側の缶が上に上がるようにした。そのまま手前の缶が下に入り込み、2段に積み重ねるという方法をとった。しかし、実際はアームが弱かったり、途中でタイヤ同士の間に缶が引っかかってしてしまい、うまく積みあがらないことが多かった。 *プログラム [#fe9a2de7] 前の本体をメインで後ろの本体をサブで活用した。 そのため缶を捕まえたり缶を持ち上げたいときに、前から後ろにメッセージを飛ばすようにしている。 **受信者(アーム) [#pfe4df11] ***定義 [#t48acb69] 受信するメッセージの番号を定義づけ #define SIGNALON 11//アームを閉めながら缶を持ち上げる #define SIGNALOFF 12//SIGNALONを停止 #define SIGNALUP 21//アームを閉める #define SIGNALDOWN 22//SIGNALUPを停止 #define SIGNALOPEN 31//アームを開く #define SIGNALCLOSE 32//SIGNALOPENを停止 ***メインプログラム [#i4e759c8] task main() { ClearMessage(); while(true){ until (Message()==SIGNALON); OnRev(OUT_C); OnFwd(OUT_A); until(Message()==SIGNALOFF); Off(OUT_AC); until (Message()==SIGNALUP); OnRev(OUT_C); until(Message()==SIGNALDOWN); Off(OUT_C); until (Message()==SIGNALOPEN); OnFwd(OUT_C); until(Message()==SIGNALCLOSE); Off(OUT_C); } } 停止のプログラムを逆の意味を表す単語を使用している。 また、最初と少し変更したのもあり名前はかなりおかしな部分があるが、プログラムには問題がなかったのでそのままにした。 **発信者(タイヤ) [#l00121e8] ***定義づけ [#f610f663] 送信するメッセージの定義づけ #define SIGNALON 11 #define SIGNALOFF 12 #define SIGNALUP 21 #define SIGNALDOWN 22 #define SIGNALOPEN 31 #define SIGNALCLOSE 32 ***メインプログラム [#fda388b3] task main() { OnFwd(OUT_AC); Wait(321); Off(OUT_AC); OnRev(OUT_A); OnFwd(OUT_C); Wait(30); Off(OUT_AC); OnFwd(OUT_AC); Wait(150); Off(OUT_AC);//缶に向かって角度をつけながら向かう SendMessage(SIGNALON); Wait(200); SendMessage(SIGNALOFF); SendMessage(SIGNALOPEN); OnFwd(OUT_AC); Wait(10); SendMessage(SIGNALCLOSE); SendMessage(SIGNALUP); Wait(50); SendMessage(SIGNALDOWN);//一瞬アームを緩め前に進むことできれいに重ねることができる。 OnFwd(OUT_AC); Wait(90); Off(OUT_AC); OnFwd(OUT_C); OnRev(OUT_A); SendMessage(SIGNALOPEN); Wait(60); SendMessage(SIGNALCLOSE); Off(OUT_AC); OnRev(OUT_AC); Wait(30); Off(OUT_AC);//ゴールまで運んだうえで缶を離し離れる } *まとめと感想 [#y2240454] **まとめ [#wa95ce7c] 自分たちの班は、どういった方法でやるのかがあまり決まらずに、まず、ロボットの形を決めるまでに時間がかかってしまった。また、ロボットを完成させても、思い通りに動かず、修正する場所が多かったりして、なかなか完成しなかった。プログラムもなかなか思い通りに動かずにいた。その結果、アームの動きや、缶の積み上げが完璧に完成せずに、運任せのようになってしまった。 **感想 [#x3dfd46d] みんなテスト中ということもあり、なかなか集まれなかったため、大変だった。また、自分自身が、テスト後もサークルなどで忙しくて、全然参加できなかったことで、メンバーには多大な迷惑をかけてしまった。もっと早めからしっかりと計画を立てて、制作していけばよかった。 **班員 [#scf313ab] 自分とは違った視点から考察してたりするので、ほかの班員のページも是非参考にしてほしい。 http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMember%2Ffukupon%2FMission3 http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMember%2Ftosi%2FMission3 http://yakushi.shinshu-u.ac.jp/robotics/?2017a%2FMember%2FRyota%2FMission3