[[2016b/Member]]

目次
#contents

*課題 [#g2ac071d]
**ルール [#wc0277f1]
基本ルール
 ピッチャーロボットとバッターロボットが所定の位置まで移動してピンポン球を投げて打つ
 ピッチャーロボットはA地点をスタートしM地点まで移動する
 バッターロボットはC地点をスタートしB地点まで移動する
 スタート時はそれぞれA地点B地点の枠内に収まること(高さの制限はなし)
 M地点、B地点では接地している部分が枠内に入っていること
 ピッチャーロボットはスタート時にピンポン球を5個まで保持できる
 ピッチャーロボットが投げたピンポン球をバッターロボットは3秒以上保持してはならない
 移動の途中で目標に接触してはならない
 基本得点の計算方法
 目標は5個あり、それぞれに書かれている点数を合計する。ただし同じ目標に2個以上のピンポン玉が入った場合は2個目以降の得点は1個目の半分とする。
 打つことができたにもかかわらずどの目標にも入らなかった場合には1点とする
 技術点の計算方法
 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチームが20点満点で採点し、その平均点を求める。 得点の目安:
 スタートしてから目的地点まで移動する速さ、正確さ (3点)
 ピンポン玉を投げる動作 (3点)
 ピンポン玉を打つ動作 (3点)
 2台のロボットの連携の良さ (3点)
 自立型のロボットとしての形や動作の美しさ、斬新さ (3点)
 ロボコン出場ロボットとしての完成度 (3点)
 その他 (2点)

*チーム全体でのロボットたちの動きや連携 [#f21c3da9]
R3R4のロボットのチーム
**ピッチャー [#q60fa9be]
スタート地点から規定の位置まで一直線に回転センサーで距離をはかりながら移動。移動後、バッターに通信の確認のためメッセージを送り、帰ってきたらピッチング開始。

ピッチャーがまずメッセージを送り、確認のメッセージを受け取ったらボールを転がす。
**バッター [#x7cda776]
スタート地点から規定の位置までは光センサーと回転センサーを用いて移動する。移動後、通信の確認のため通信が届くまで徐々に前進しメッセージが届いた後は確認のメッセージを送ってバッティング開始。

ピッチャーからメッセージが送られたら確認のメッセージを送り、タイミングをはかりバットを振る

*ロボット(バッター) [#c5b38b0e]
**ロボット全体 [#ob60d0fa]
&ref(2016b/Member/rts/Mission3/IMG_1255.JPG,25%,robo);
&ref(2016b/Member/rts/Mission3/IMG_1265.JPG,10%,robo);

*プログラム(バッター側) [#abed7c98]
**内容 [#y6070f49]
 #define BLANK Off(OUT_ABC);Wait(30); //動作の安定のために一時停止するマクロ
 
 #define WHITE 47 //白の光センサーの下限値
 
 #define BLACK 40 //黒の光センサーの上限値
 
 #define FIRST_COUNT 21 //スタートの黒枠を出てから45度回転するまでの回転センサーの値
 
 #define B_COUNT 17 //バッターボックスに入ったあとに進む距離の回転センサーの値
 
 #define TURN_COUNT 10 //90度回転するときの回転センサーの値
 
 #define TURN_L45 ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3 == -6);Off(OUT_AC); //左に45度回転するときのマクロ
 
 #define TURN_R45 ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3 == 6);Off(OUT_AC); //右に45度回転するときのマクロ
 
 #define TURN_L ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3 == -TURN_COUNT);Off(OUT_AC); //左に45度回転するときのマクロ
 
 #define TURN_R ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3 == TURN_COUNT);Off(OUT_AC); //右に45度回転するときのマクロ
 
 #define FORWARD_W_B OnFwd(OUT_AC);until(SENSOR_2 < BLACK);Off(OUT_AC); //白いところから黒いところに入るまで直進するマクロ
 
 #define FORWARD_B_W OnFwd(OUT_AC);until(SENSOR_2 > WHITE);Off(OUT_AC); //黒いところから白いところに入るまで直進するマクロ
 
 #define FORWARD1(X) ClearSensor(SENSOR_3);OnFwd(OUT_AC);until(SENSOR_3 == X);Off(OUT_AC); //回転センサーがxの値になるまで直進するマクロ
 
 #define getset 100 //投げる合図(こっちが受け取る)
 
 #define confirm 200 //投げる合図の確認(こっちが送る)
 
 #define hit OnRev(OUT_B);Wait(15);Off(OUT_B); //バットで打つ
 
 #define set OnFwd(OUT_B);Wait(15);Off(OUT_B); //バットを構える(振ったアームを戻す)
 
 //通信確認用の変数↓
 #define test 101
 
 #define confirm2 201
 
 #define t1 220
 
 #define turnl(a) ClearSensor(SENSOR_3);OnFwd(OUT_A);OnRev(OUT_C);until(SENSOR_3<=-a);Off(OUT_AC);ClearSensor(SENSOR_3); //左旋回
 
 #define turnr(b) ClearSensor(SENSOR_3);OnFwd(OUT_C);OnRev(OUT_A);until(SENSOR_3>=b);Off(OUT_AC);ClearSensor(SENSOR_3); //右旋回
 
 #define go(c) ClearSensor(SENSOR_3);OnFwd(OUT_AC);until(SENSOR_3>=c);Off(OUT_AC);ClearSensor(SENSOR_3); //前進
 
 #define back(d) ClearSensor(SENSOR_3);OnRev(OUT_AC);until(SENSOR_3<=-d);Off(OUT_AC);ClearSensor(SENSOR_3); //後退
 //↑回転センサーで進む距離や曲がる角度を決めている
 
 sub P1()
 {
   TURN_R45;
   BLANK;
   FORWARD_W_B;
   FORWARD1(FIRST_COUNT);
   BLANK;
   TURN_L45;
   BLANK;
 }
 
 sub P2()
 {
   repeat(3)
   {
     FORWARD_W_B;
     FORWARD_B_W;
   }
 }
 
 sub P3()
 {
   OnFwd(OUT_AC);
   Wait(30);
   BLANK;
   TURN_L;
   BLANK;
   FORWARD_W_B; //バッターボックスに入るまでは光センサーを使用
   FORWARD1(B_COUNT);
   BLANK;
   turnr(5);
 }
 
 task main()
 {
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   SetSensor(SENSOR_3,SENSOR_ROTATION);
   ClearSensor(SENSOR_3);
   ClearSensor(SENSOR_2);
   ClearMessage();
   P1(); //スタートしてからピッチャーマウンドの前まで行くサブルーチン
   P2(); //3本の黒線を横断するサブルーチン
   P3(); //バッターボックスに入り、ピッチャーの方向に向くまでのサブルーチン
 
  // 以降はバット振る
 //バッティングの前に通信確認テスト。通信が安定する距離まで前進。
   while(Message()!=confirm2)
   {
     Wait(80);
     back(1);
   }
   PlaySound(SOUND_UP);
   back(4);
   repeat(10)
   {
     SendMessage(test);
   }
 
   //バッティング開始
   
   int c=0;
   repeat(5)
   {
     ClearMessage();
     until(Message()==getset);
     repeat(10)
     {
       SendMessage(confirm);
     }//投げる合図を受け取ったら確認のメッセージを送る
 
     Wait(t1);
     PlaySound(SOUND_DOUBLE_BEEP);
     
     set;
     BLANK;
     hit;
     hit; //本番では打ち方を変えて時計回りではなく反時計回りにバットを回して打つようにした
   }
 }
**解説 [#c649c665]

*まとめ [#t4582bd7]
**結果 [#r1fdbbca]
ロボコンは4位という結果になった。

移動はうまくいったが、ピッチングバッティングのところでタイミング良くボールを打てなかったりと正確性が欠けていた
**終わりに [#icc08458]



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS