[[2007a/MemberOnly/進行状況A]] #contents *メンバー紹介 [#p0fb3bd4] 今回のメンバーは「ZWEI」「クロ」「カズ」「チノ」「KY王子」の5人です。 *ロボコンのルール [#kf3e6928] **基本ルール [#zb371d97] ●所定の時間内に紙パックを所定の場所に運んで積み上げる。 ●競技時間は2分30秒、あるいはリタイアするまでとする。 ただし積み上げた紙パックからロボットが離れようとしている動作中に制限時間が来てしまった時には、その動作が終了するまで、とする。 2分経過した時点で10個以上入っていた場合には30秒延長する。 ●どこからスタートしてもよい。 ●スタート時のロボットは3個を越えないこと (スタート後はいくつに分裂してもかまわない)。 ●開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 ●競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 ●途中でうまく動かなくなった場合、1回限り再スタートすることができる。 ●積んだ紙パックの底面は水平でなければならない。 ●競技終了時点で、積み上げた紙パックにロボットの一部が触れていてはならない。 触れている場合は、その紙パックおよびその紙パックに触れている紙パック、さらにその紙パックに触れている紙パック、・・・、は加算しない。 ●半分以上枠はみ出した紙パックは得点に加算しない。 ●枠内からはみ出した部分が半分以下の場合には、本来の点数の 1/2 とする。1点未満は切捨て。 **フィールドの説明 [#fcbeb78b] http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2007a%2F%A5%ED%A5%DC%A5%B3%A5%F3&openfile=robocon-2007a-field.gif ●フィールドは約160cm×110cm ●運搬する500mlの紙パック(以下単に紙パックと呼ぶ)は約7cm×7cm×10.3cm ●紙パックはすべての面に白あるいは緑色の画用紙がはられている ●紙パックは(目的地の円周上を除く)各交差点に立てて配置されている ●目的地の円を囲む正方形の4隅には緑の紙パックが配置されている ●1つの格子はの境界の黒線の芯々で20cm平方の正方形である ●黒い線の太さは約25mm ** 基本得点の計算方法 [#t805fffa] 紙パックを一個運んで積み上げると、白パックの場合 1層目で横置き:1点、1層目で縦置き:2点 2層目で横置き:2点、2層目で縦置き:4点 3層目で横置き:4点、3層目で縦置き:8点 4層目で横置き:8点、4層目で縦置き:16点 ..... 以下同様 緑パックの場合はすべて白パックの2倍 技術点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム+TAor教員)が20点満点で採点し、その平均点を求める。 **得点の目安 [#ka930579] ●紙パックを集める動作 (4点) ●紙パックを積み上げる動作 (4点) ●2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(4点) ●自立型のロボットとしての形や動作の美しさ、斬新さ(4点) ●その他 (4点) *目標 [#n9c58888] 私たちのグループでは高く積み上げたものを一つ作り高得点をねらうことにした。 またできるだけ単純な動きですんだ方がいい。 そのためにはどうすればいいか。 **案1 [#sa93d98f] 一つの大きいロボットを作り紙パックを集めつつ重ねておき、あるていど集めたら円の中に置いてくる。 これだとロボットが大きくなりすぎてしまう。またロボットの作りやプログラミングが複雑になってしまうので断念。 **案2 [#u6d0809f] ロボットを二つに分け、役割を運ぶロボットと積むロボットに分担する。 また積み方を上に紙パックを乗せるのではなくて、下に入れていく方法にしたことによってよりシンプルな動きですむようにした。このような工夫によりロボットの軽量化ができるようになった。 しかし二つのロボットを使うということでロボット同士の通信機能を上手く使わなければいけない。 その点が課題となった。 *製作過程 [#b1a6d05f] **運ぶロボット [#t6ef73ba] ライントレースとタッチセンサーを上手く使い紙パックを見つけ、積むロボットまで運ぶ。 通信機能を使うために本体の位置を工夫する必要があった。 ***紙パックを運ぶ [#a9fcbc38] 紙パックをつかむ部分を左右の動きでは抜けず、ロボットが後退したときには抜けるように工夫した。 そうしたことにより紙パックを運んで置いてくる作業がしやすくなった。 ***光センサー [#m93b242b] **積むロボット [#z9598072] ***紙パックを支える[#yae90ec7] ***紙パックを持ち上げる [#e274c537] ***タッチセンサー [#yda57890] *プログラミング [#o63cb7c7] **LongLongAgoの主旋律 [#y0fe799c] #define Do 523 #define Fa 698 #define So 784 #define Ra 880 #define Si 932 #define DO 1047 #define RE 1175 task play_music() // 音楽を演奏するタスク { while (true) { PlayTone(Fa,60); Wait(70); // Wait の時間の方を少し長くして PlayTone(Fa,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(So,30); Wait(35); // 一つの音にならないようにしている PlayTone(Ra,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(Si,30); Wait(35); PlayTone(DO,60); Wait(70); PlayTone(RE,30); Wait(35); PlayTone(DO,30); Wait(35); PlayTone(Ra,120); Wait(140); PlayTone(DO,60); Wait(70); PlayTone(Si,30); Wait(35); PlayTone(Ra,30); Wait(35); PlayTone(So,120); Wait(140); PlayTone(Si,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(So,30); Wait(35); PlayTone(Fa,120); Wait(140); PlayTone(Fa,60); Wait(70); // Wait の時間の方を少し長くして PlayTone(Fa,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(So,30); Wait(35); // 一つの音にならないようにしている PlayTone(Ra,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(Si,30); Wait(35); PlayTone(DO,60); Wait(70); PlayTone(RE,30); Wait(35); PlayTone(DO,30); Wait(35); PlayTone(Ra,120); Wait(140); PlayTone(DO,60); Wait(70); PlayTone(Si,30); Wait(35); PlayTone(Ra,30); Wait(35); PlayTone(So,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(So,30); Wait(35); PlayTone(Fa,120); Wait(140); PlayTone(Fa,120); Wait(140); PlayTone(DO,60); Wait(70); PlayTone(Si,30); Wait(35); PlayTone(Ra,30); Wait(35); PlayTone(So,60); Wait(70); PlayTone(Do,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(Si,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(So,30); Wait(35); PlayTone(Fa,120); Wait(140); PlayTone(DO,60); Wait(70); PlayTone(Si,30); Wait(35); PlayTone(Ra,30); Wait(35); PlayTone(So,60); Wait(70); PlayTone(Do,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(Si,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(So,30); Wait(35); PlayTone(Fa,120); Wait(140); PlayTone(Fa,60); Wait(70); // Wait の時間の方を少し長くして PlayTone(Fa,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(So,30); Wait(35); // 一つの音にならないようにしている PlayTone(Ra,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(Si,30); Wait(35); PlayTone(DO,60); Wait(70); PlayTone(RE,30); Wait(35); PlayTone(DO,30); Wait(35); PlayTone(Ra,120); Wait(140); PlayTone(DO,60); Wait(70); PlayTone(Si,30); Wait(35); PlayTone(Ra,30); Wait(35); PlayTone(So,60); Wait(70); PlayTone(Ra,30); Wait(35); PlayTone(So,30); Wait(35); PlayTone(Fa,120); Wait(140); PlayTone(Fa,120); Wait(140); Wait(20); } } task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); start play_music ; // 演奏を開始 OnFwd(OUT_A+OUT_B); // 前進 until (SENSOR_1 == 1); stop play_music ; // 演奏を停止 Off(OUT_A+OUT_B); // 動きも停止 } **伴奏 [#j816dbef] #define Do 523 #define ra 440 #define fa 349 #define mi 330 #define doo 262 #define si 466 #define so 392 task play_music() // 音楽を演奏するタスク { while (true) { PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,120); Wait(140); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(si,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(si,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(si,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(si,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(ra,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(fa,30); Wait(35); PlayTone(ra,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(ra,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(fa,30); Wait(35); PlayTone(ra,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(si,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(si,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(si,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(si,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(ra,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(fa,30); Wait(35); PlayTone(ra,30); Wait(35); PlayTone(doo,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(ra,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(fa,30); Wait(35); PlayTone(ra,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(mi,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(so,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,30); Wait(35); // Wait の時間の方を少し長くして PlayTone(Do,30); Wait(35); // 同じ音を続けて鳴らす場合にも PlayTone(ra,30); Wait(35); PlayTone(Do,30); Wait(35); PlayTone(fa,120); Wait(140) Wait(20); } } task main() { SetSensor(SENSOR_1, SENSOR_TOUCH); start play_music ; // 演奏を開始 OnFwd(OUT_A+OUT_B); // 前進 until (SENSOR_1 == 1); stop play_music ; // 演奏を停止 Off(OUT_A+OUT_B); // 動きも停止 } *プログラミングの解説 [#dfd10aa8] *感想 [#ybd808d6] *コメントをどうぞ [#c6af31ac] #comment