目次 #Contents *課題3の内容 [#g40fe707] #ref(2016b/Member/god22ila/Mission3/2016b-mission3.png,50%,コース) 今回の課題は基本ルールに従ってピッチャーロボとバッターロボが通信をして野球をするというものである。 **基本ルール [#z54d30fa] -ピッチャーロボとバッターロボが決められた場所についてピンポン玉を投げて打つ -ピッチャーロボはA地点からM地点まで移動 -バッターロボはC地点からB地点まで移動 -高さの制限はないがスタートの時点で機体が枠内に収まること -M,B地点では接地部分が枠内に収まっていること -ピッチャーロボはスタート時にピンポン玉を5個まで持てる -バッターロボはピンポン玉を3秒以上持っていてはいけない -移動の途中でゴールにぶつかってはいけない **得点の計算方法 [#m8cee12c] -5つあるゴールに書かれている数字を合計するが、同じゴールに2個以上のピンポン玉がはいったら2個目以降の得点は1個目の半分になる -打つことはできたがどのゴールにも入らなかった場合は1点になる **技術点の説明 [#ca104426] 以下の評価ポイントを含めた技術的な工夫や芸術性について他のチームが20点満点で評価し、その平均点を求める **評価ポイント [#c216650b] -スタートから所定の位置まで移動するスピードと正確さ(3点) -ピンポン玉を投げる動作について(3点) -ピンポン玉を打つ動作について(3点) -2台のロボットの連携の良さについて(3点) -自立型ロボットとしての形や動作の美しさ、斬新さについて(3点) -ロボコン出場ロボットとしての完成度(3点) -その他(2点) *本体の説明(バッターロボ) [#qfbc9a2d] 本体は今回もライントレーサーを使うこともあり、課題2で使っていたものをそのまま利用した。 *アームの説明(バッターロボ) [#r24463bf] アームは直接モータにブロックを付けた構造になっているので動きとしては、逆水平チョップを打つような感じになっている。 *本体の説明(ピッチャーロボ) [#fe6d1ad0] バッターロボと同じくライントレーサーを使うので、前回の僕たちの班のロボットの本体と同じ構造になっている。 *アームの説明(ピッチャーロボ) [#mac7a008] ピンポン玉の収納部の下が傾斜しているのでピンポン玉がそこに落ちると転がってバッターのもとへいくようになっている。 ピンポン玉がどんどん落ちてこないように手裏剣型のストッパーを用意した。このストッパーは回転するとすぐ下のピンポン玉を押し出し、次のピンポン玉を発射する準備をしその次のピンポン玉を落ちてこないようにする役目を担っている。 *2台を通信するプログラムについて [#cbea9911] バッターロボをマスター、ピッチャーロボをスレーブとし2台で通信する *バッターロボのプログラム [#kfe49bfb] #define turnright OnFwd(OUT_C,45); #define turnleft OnFwd(OUT_B,45); #define SR OnFwdSync(OUT_BC,45,-100); #define SL OnFwdSync(OUT_BC,45,100); #define GF OnFwdSync(OUT_BC,60,0); #define XrdTR TR Wait(500);SL Wait(1400);Off(OUT_BC);Wait(300);GF Wait(500);Off(OUT_BC); #define XrdTL TL Wait(500);SR Wait(1400);Off(OUT_BC);Wait(300);GF Wait(500);Off(OUT_BC); #define XrdST TR Wait(1000); #define MS Wait(400); #define CONN 1 #define SIGNALON 11 #define SIGNALOFF 12 task main() { SetSensorLight(S1); int n=0; int m=1200; while(n<2){ if(SENSOR_1>40){ GF } else{ GF MS Off(OUT_BC); MS n++; } } Off(OUT_BC); MS SR Wait(1300); Off(OUT_BC); while(n<6){ if(SENSOR_1>40){ GF } else{ GF MS Off(OUT_BC); MS n++; } } Off(OUT_BC); MS GF Wait(600); Off(OUT_BC); MS SL Wait(700); Off(OUT_BC); MS GF Wait(1100); Off(OUT_BC); Wait(2000); while (m<1450){ SendRemoteNumber(CONN,MAILBOX1,SIGNALON); Wait(m); RotateMotor(OUT_A,75,180); Wait(500); RotateMotor(OUT_A,-20,180); Wait(500); n++; m=m+50; } Off(OUT_A); } *ピッチャーロボのプログラム [#cd84a823] #define turnright OnFwd(OUT_C,45); #define turnleft OnFwd(OUT_B,45); #define seikairight OnFwdSync(OUT_BC,45,-100); #define senkaileft OnFwdSync(OUT_BC,45,100); #define goforward OnFwdSync(OUT_BC,45,0); #define zokkou Wait(400); #define SIGNALON 11 #define SIGNALOFF 12 **光センサーとタイマーを起動 [#k20e6350] task main() { SetSensorLight(S1);//光センサー起動 int n=0;//nの値を決める teisi **ラインとレースで目標の場所まで移動 [#u93b11a5] ロボットは枠の中からスタートしMに向かって直進し、Mの枠内で向きを変えてバッターロボットのほうに発射口を向けるという移動の仕方をする。ロボットは黒い線の上を4回通り、もし白と認識したら直進し、黒と認識したら白と認識されるまで直進しnの値を増やし直進するという動きをする。これをnが4になるまで行う while(n<4){ //スタート地点からM地点まで行くプログラム if(SENSOR_1>37){ goforward } else{ goforward zokkou Off(OUT_BC); zokkou n++; } } nの値が4以上になったら方向転換してバッターロボのほうに発射口を向ける。 Off(OUT_BC);//方向を変えるプログラム goforward zokkou Off(OUT_BC); zokkou turnright Wait(3500); Off(OUT_BC); **通信のプログラム [#m12ccad8] MAILBOXに値を受け取ることにより動作を実行する。受け取った数値により動作が変わる。 int msg; //受け取った値を入れておく変数 while (true) { ReceiveRemoteNumber(MAILBOX1,true,msg);//MAILBOX1の値を受けとってmsgに入れる。trueを指定するとMAILBOXが空になる if (msg == SIGNALON) { //SIGNALONを受け取った場合 RotateMotor(OUT_A,-20, 95);//ピンポン玉を発射するプログラムが起動 } if (msg == SIGNALOFF) { //SIGNALOFFを受け取った場合 Off(OUT_A); //停止 } } }