目次
基本ルール
ピッチャーロボットとバッターロボットが所定の位置まで移動してピンポン球を投げて打つ ピッチャーロボットはA地点をスタートしM地点まで移動する バッターロボットはC地点をスタートしB地点まで移動する スタート時はそれぞれA地点B地点の枠内に収まること(高さの制限はなし) M地点、B地点では接地している部分が枠内に入っていること ピッチャーロボットはスタート時にピンポン球を5個まで保持できる ピッチャーロボットが投げたピンポン球をバッターロボットは3秒以上保持してはならない 移動の途中で目標に接触してはならない 基本得点の計算方法 目標は5個あり、それぞれに書かれている点数を合計する。ただし同じ目標に2個以上のピンポン玉が入った場合は2個目以降の得点は1個目の半分とする。 打つことができたにもかかわらずどの目標にも入らなかった場合には1点とする 技術点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチームが20点満点で採点し、その平均点を求める。 得点の目安: スタートしてから目的地点まで移動する速さ、正確さ (3点) ピンポン玉を投げる動作 (3点) ピンポン玉を打つ動作 (3点) 2台のロボットの連携の良さ (3点) 自立型のロボットとしての形や動作の美しさ、斬新さ (3点) ロボコン出場ロボットとしての完成度 (3点) その他 (2点)
R3R4のロボットのチーム
バッターのロボット製作を担当した。
スタート地点から規定の位置まで一直線に回転センサーで距離をはかりながら移動。移動後、バッターに通信の確認のためメッセージを送り、帰ってきたらピッチング開始。
ピッチャーがまずメッセージを送り、確認のメッセージを受け取ったらボールを転がす。
スタート地点から規定の位置までは光センサーと回転センサーを用いて移動する。移動後、通信の確認のため通信が届くまで徐々に前進しメッセージが届いた後は確認のメッセージを送ってバッティング開始。
ピッチャーからメッセージが送られたら確認のメッセージを送り、タイミングをはかりバットを振る
四輪型をコンパクトにし二輪型ロボットにして、モーターでアームを回転させ打つバットを取り付けた。タイヤを動かすモーターの片方に回転センサーをつけている。
#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; //本番では打ち方を変えて時計回りではなく反時計回りにバットを回して打つようにした } }
移動のプログラムは他のメンバーのものを使用している。
移動後、バッティングを始めるときに時々通信がうまくいかないことがあったので移動後に通信を安定させるため少しずつピッチャーとの距離をつめ、通信確認が成功した後にバッティングを始めるようにした。
バッティングの流れはピッチャーのメッセージ受信→確認のメッセージ送信→タイミングをはかってバットを振り、構える→再びピッチャーのメッセージ受信を待つ の繰り返し
ロボコンは4位という結果になった。
移動はうまくいったが、ピッチングバッティングのところでタイミング良くボールを打てなかったりと正確性が欠けていた
バッターロボットを担当したが、一応は移動からバッティングまでの動作を大分安定させることができたように思う。特に移動に関しては多少のズレがあったものの、通信確認の過程でうまく補正することができた。
しかしバッティングの面ではピッチングに対してのバットを振るタイミングを上手く合わせることができなかった。バッティングの動作にもう少し時間を充てていれば改善できたかもしれない。
もっと計画的にロボット設計や動作確認などを行うようにしていればより良い結果になっていたと思う。またボールを投げ打つというだけの動作をロボットで行うことの難しさを実感した。試行錯誤することでロボットがより思い通りに動けるようになるのは楽しかったので、次の機会があればまたロボット製作に触れてみたい。