[[2006b/MemberOnly/進行状況A]] [[ロボティクス入門ゼミ]] [[2006b/A2]] CENTER:&color(blue){&size(50){ロボコン};}; #contents *ロボコンのルール [#s21e915e] **フィールド [#h7c352bd] &ref(ロボコン・コース); &ref(robocon-2006b-1.jpg); &size(15){フィールドの説明}; -フィールドは約180cm×80cm -運搬する500mlの紙パック(以下単に紙パックと呼ぶ)は約7cm×7cm×10.3cm -紙パックはすべての面に緑色の画用紙がはられている。 -アルミ缶は350mlで側面にのみ緑色の画用紙がはられている。 **ルール [#zf408ee5] &size(15){基本ルール}; -所定の時間内にアルミ缶と紙パックを分別して所定の場所に運ぶ。 -競技時間は2分とする。ただし紙パックあるいはアルミ缶を1個運ぶごとに時間を30秒延長する。 -中央のサークル内からスタートする。ただし地面に接していない部分はサークル外にあってもよい -スタート時のロボットは3個を越えないこと (スタート後はいくつに分裂してもかまわない)。 -開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 -競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 -途中でうまく動かなくなった場合、1回限り再スタートすることができる。 &size(15){基本得点の計算方法}; -紙パックあるいはアルミ缶を一個運ぶと+2点 -間違ったカゴに入れると-1点 &size(15){技術点の計算方法}; ~以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について全てのチーム(自チームを含む7チーム)が10点満点で採点し、その平均点を求める。得点の目安: -紙パック・アルミ缶を集める動作 (2点) -紙パック・アルミ缶を運搬・分別する動作 (3点) -自立型のロボットとしての形や動作の美しさ、斬新さ(3点) -その他 (2点) *作戦 [#uc20c5b3] *ロボット [#c636733f] **ロボット完成までの道のり [#k131635f] **完成したロボット [#vb425367] **工夫したこと・苦労したこと [#me417824] *プログラム [#q8c065a0] **紙パック専門のロボットのプログラム[#sfe4924f] #define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off (OUT_A+OUT_C); //進む #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //バック #define turn_right(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_A+OUT_C); //右に曲がる #define turn_left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait (t);Off(OUT_A+OUT_C); //左に曲がる #define THRESHOLD 40 #define run_time 80 #define Do 523 //音階の周波数を定義する #define Do_s 554 #define Re 587 #define Re_s 622 #define Mi 659 #define Fa 698 #define Fa_s 740 #define Sol 784 #define Sol_s 831 #define La 880 #define La_s 932 #define Si 988 #define Do_up 1047 #define Re_up 1175 task play_music() //大塚愛の『さくらんぼ』の音楽を演奏する { while (true) { PlayTone(La,15);Wait(20); PlayTone(Si,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Sol,50);Wait(60); PlayTone(Si,25);Wait(30); PlayTone(Re_up,25);Wait(30); PlayTone(Fa_s,15);Wait(20); PlayTone(Fa_s,50);Wait(55); PlayTone(Sol,50);Wait(55); PlayTone(Sol,15);Wait(20); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Si,25);Wait(30); PlayTone(Re,15);Wait(20); PlayTone(Re,50);Wait(55); PlayTone(Mi,25);Wait(30); PlayTone(Sol,25);Wait(30); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Si,25);Wait(30); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,25);Wait(30); PlayTone(Re,15);Wait(20); PlayTone(Do,25);Wait(30); PlayTone(Re,25);Wait(30); PlayTone(Mi,25);Wait(30); PlayTone(Sol,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Si,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Sol,50);Wait(55); PlayTone(Si,15);Wait(20); PlayTone(Re_up,25);Wait(30); PlayTone(Fa_s,15);Wait(20); PlayTone(Fa_s,50);Wait(55); PlayTone(Sol,50);Wait(55); PlayTone(Sol,15);Wait(20); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Si,25);Wait(30); PlayTone(Re,15);Wait(20); PlayTone(Re,50);Wait(55); PlayTone(Mi,25);Wait(30); PlayTone(Sol,25);Wait(30); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Re,15);Wait(20); PlayTone(Si,25);Wait(30); PlayTone(Do_up,25);Wait(30); PlayTone(Si,25);Wait(30); PlayTone(La,25);Wait(30); PlayTone(Mi,25);Wait(30); PlayTone(Sol,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,15);Wait(20); PlayTone(La,15);Wait(20); PlayTone(Fa_s,15);Wait(20); PlayTone(Sol,25);Wait(30); Wait(50); } } task main() { start play_music; SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと定義 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3が光センサーと定義 go_straight(170); turn_left(85); go_straight(585); turn_left(90); go_straight(80); turn_left(95); OnFwd(OUT_B); go_straight(1100); //1個目の箱を入れる動作 if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) {OnFwd(OUT_C);OnRev(OUT_A);} ClearTimer(0); while(Timer(0)<=run_time) {if(SENSOR_1<THRESHOLD) {OnFwd(OUT_A); Off(OUT_C);} if(SENSOR_3<THRESHOLD) {OnFwd(OUT_C); Off(OUT_A);}} //黒い線に沿って進むプログラム repeat(2) {Off(OUT_B); back(450); turn_right(180); go_straight(500); turn_right(100); go_straight(50); turn_right(90); OnFwd(OUT_B); go_straight(1200); //右側 right Off(OUT_B); back(400); turn_right(180); go_straight(600); turn_left(100); go_straight(50); turn_left(100); OnFwd(OUT_B); go_straight(1200); //右側 left back(200); turn_right(90); turn_left(90); go_straight(150); //左側に移動 Off(OUT_B); back(450); turn_left(180); go_straight(500); turn_right(100); go_straight(50); turn_right(90); OnFwd(OUT_B); go_straight(1200); //左側 right Off(OUT_B); back(400); turn_right(180); go_straight(600); turn_left(100); go_straight(50); turn_left(100); OnFwd(OUT_B); go_straight(1200);} //左側 left } **缶専門のロボットのプログラム [#w85f2708] task main() { SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); Wait(1250); while(true) {OnFwd(OUT_A+OUT_C); until (SENSOR_2 ==1); OnRev(OUT_A+OUT_C); Wait(30); OnFwd(OUT_C);OnRev(OUT_A); Wait(140); OnFwd(OUT_A+OUT_C); until(SENSOR_2 ==1); OnRev(OUT_A+OUT_C); Wait(90); OnFwd(OUT_A+OUT_C); until(SENSOR_2 ==1); OnRev(OUT_A+OUT_C); Wait(30); OnFwd(OUT_B); Wait(80); Off(OUT_B); OnFwd(OUT_A);OnRev(OUT_C); Wait(180); OnFwd(OUT_A+OUT_C); until(SENSOR_2 == 1); Off(OUT_A+OUT_C); OnRev(OUT_B); Wait(85); OnFwd(OUT_B); Wait(80); Off(OUT_B); OnRev(OUT_A+OUT_C); Wait(20); OnFwd(OUT_A); Wait(175); OnRev(OUT_B); Wait(85); Off(OUT_B); } } *感想 [#j9a6534a] #comment