[[2019a/Member]] #contents *課題3 [#z9a1a765] ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。 #ref(./2019a-mission3.png,70%,コース) **フィールドの説明 [#u8d7a3a3] フィールドは課題2で使用した紙を使用する。 生協のお弁当の四角いプラ容器2つをそれぞれ円内に置き、片方に玉を2個入れる。 残りの2個の玉は課題2と同じ位置に置く。その際、ゴムタイヤやプレートの上に置いてもよい。 プラ容器には色をつけたり文字や記号を書いてもよい。 プラ容器は両面テープ等でフィールドに固定してもよい。 2枚の紙の境界にはそれぞれ幅1cm、合計2cmの黒線を描いてもよい。 **ルール [#y06357f8] 競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。 図のA地点または(および)A'地点からスタートする。ただし接地している部分はそれぞれの領域内に収まるものとする(線上はOK)。上空部分は領域からはみ出していてもよい。 開始の合図から5秒以内にスタートボタンを押す作業を完了すること。 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。 競技終了後、ロボットが、ゴールのプラ容器に触れていてはいけない。 競技終了後、もともと玉が入っていたプラ容器が、ゴールのプラ容器に触れていてはいけない。 *ロボットの説明 [#o174d6d7] 今回は2台のロボットを使った。 **ロボット1について [#s52e7521] ***ロボット1の移動 [#b2d5a012] #ref(./robo1_tizu.jpg,70%,ロボット1の移動) ***ロボット1の構造 [#n20e4cdc] ロボット1はトレーを持ち上げて、ゴールのトレーまで移動し、ひっくり返しボールを落とすようにした。 #ref(./robo_zenntai.jpg,20%,ロボット全体) ボールを落とすときにボールがこぼれないように柵を張りゴールのトレーにスムーズに入るように工夫した。 #ref(./robo1_tore.jpg,20%,ロボット1運ぶ) トレーを持ち上げるアームの所にもタイヤを設置させた。 丁度、トレーの所が引っ掛かり安定感のある運びが出来た。 #ref(./robo1_tore2.jpg,20%,ロボット1運ぶ) **ロボット2について [#ef091eb3] ***ロボット2の移動 [#z4c68b9f] 下の図のように、A`からライントレースはあまりせずにゴールまで移動するようにした。 #ref(./robo2_tizu.jpg,70%,ロボット2の移動) ***ロボット2の構造 [#xddb7bef] ロボット2は地面に置かれたボールをゴールまで運ぶようにした。 #ref(./robo_zenntai2.jpg,20%,ロボット全体2) #ref(./robo2_tore3.jpg,20%,ロボット2入れる) #ref(./robo2_tore.jpg,20%,ロボット2運ぶ) ボールを輪ゴムと使って、固定するようにした。 また、上にあるブロックも使って移動中でも落ちないように工夫した。 #ref(./robo2_tore6.jpg,20%,ロボット2運ぶ2) *プログラムについて [#vafe2b9f] **ロボット1のプログラムについて [#h9ddb203] ***defineのプログラム [#qdf7e762] #define RUN_TIME 610 #define power(s) SetPower(OUT_B,s); #define STEP 5 #define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(148);Off(OUT_AC); #define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(120);Off(OUT_AC); ***サブルーチン [#k63b9c99] sub tores() { SetSensor(SENSOR_2,SENSOR_LIGHT); ClearTimer(0); while ( FastTimer(0) <= RUN_TIME ) { if ( 48 < SENSOR_2 ){ OnFwd(OUT_A); Off(OUT_C); //白なら右へ } else if (45 <SENSOR_2 < 49) { Off(OUT_A); OnFwd(OUT_C); //灰色なら左へ } else { OnRev(OUT_A);OnFwd(OUT_C); //黒なら左へ旋回 } } } sub down() { OnFwd(OUT_B); power(0); //ゆっくり前進 Wait(50); Off(OUT_B); Wait(100); } sub up1() { OnRev(OUT_B); power(0); Wait(30); Off(OUT_B); Wait(100); } sub throw() { OnFwd(OUT_B); power(0); Wait(80); Off(OUT_B); OnRev(OUT_B); Wait(50); Off(OUT_B); } ***実行プログラム [#q6a0d096] task main() { OnFwd(OUT_AC); Wait(100); tores(); turn; OnRev(OUT_AC); Wait(120); Off(OUT_AC); down(); OnFwd(OUT_AC); Wait(130); Off(OUT_AC); up1(); OnRev(OUT_AC); Wait(415); turn_left; OnRev(OUT_AC); Wait(140); Off(OUT_AC); throw(); } **ロボット2のプログラムについて [#w498a025] ***defineのプログラム [#rd3a274b] #define RUN_TIME 700 #define turn OnFwd(OUT_A);OnRev(OUT_C); #define turn2 OnFwd(OUT_C);OnRev(OUT_A); #define power(s) SetPower(OUT_B,s); //モータのパワーをsにする #define go OnFwd(OUT_AC); ***サブルーチン [#df10e504] sub tores() { SetSensor(SENSOR_1,SENSOR_LIGHT); ClearTimer(0); while(FastTimer(0)<=RUN_TIME){ if(48<SENSOR_1){//白ならば右回転 OnFwd(OUT_A); Off(OUT_C); ClearTimer(0); }else if(45<SENSOR_1<49){//白黒ならば左回転 Off(OUT_A); OnFwd(OUT_C); }else{//黒ならば逆左回転 OnRev(OUT_A); OnFwd(OUT_C); } } Off(OUT_AC); Wait(100); } sub up() { OnFwd(OUT_B); power(1);//ゆっくり前進 Wait(50); Off(OUT_B); } sub up2() { OnFwd(OUT_B); power(2);//ゆっくり前進 Wait(20); Off(OUT_B); } sub down() { OnRev(OUT_B); power(2);//ゆっくり前進 Wait(50); Off(OUT_B); } ***実行プログラム [#sfc30d94] task main() { go;Wait(110);Off(OUT_AC); turn2;Wait(70);Off(OUT_AC); go;Wait(210);Off(OUT_AC); turn;Wait(70);Off(OUT_AC); go;Wait(30);Off(OUT_AC); down();Wait(30); up();Wait(30);//たまきゃっち turn2;Wait(70);Off(OUT_AC);//90まわる go;Wait(10);Off(OUT_AC); up2();Wait(30); OnRev(OUT_AC);Wait(1000);Off(OUT_AC); } *結果 [#lf56aafe] ロボコンでは、2体ともボールを掴むことが出来なかった、電池を前日に変えてしまったからもあるが、9位という結果を残せたのはよかった。 *まとめ [#m39272a6] これまでに学んできたことをこのロボコンですべて出せたので良かった。授業中では、チームで話し合いながらロボットを作ることが出来たので、楽しめながら作成することが出来た。