2016b/Member 目次

課題

前回のライントレースの延長で、さらに今回は二つのロボットを通信させることが目的だ。

バッターとピッチャーのロボットをそれぞれ通信させ、放たれた玉を打ち的に当てる。

5球打ち合計の得点を競う。

機体

今回自分は投球ロボットを担当した。

投げる機構は、玉を高いところから転がし放つようにした。

しかし、高さが足りなかったので球速が落ちてしまい、玉がまっすぐ進まず打つことが困難になってしまった。

投球場所までの移動はライントレースを用いた。

投球ロボットプログラム

定義

   #define TURNR(A) RotateMotorEx(OUT_BC,40,A,100,true,true);Wait(1000);//右に曲がる
   #define TURNL(L) RotateMotorEx(OUT_BC,40,L,-100,true,true);Wait(1000);//左に曲がる
   #define TYOKUSIN OnFwdSync(OUT_BC,40,0);               //直進する
   #define CM(K) RotateMotorEx(OUT_BC,40,20.47315*K,0,true,true);Wait(1000);//K(cm)直進
   #define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);RotateMotor(OUT_A,-90,-90);//ボールを発射、装填
   

ラインを越えるためのサブルーチン

   sub BASYO()
   {
   SetSensorLight(S1);
   TYOKUSIN;
   until(SENSOR_1<35);
   Off(OUT_BC);
   Wait(500);
   CM(5);
   Wait(500);
   }
   

本文 

まずゴールにぶつからないように向きを変え直進、そこで向きを変え、ラインを3回超えるまで進む、位置調整のあと方向転換してバッターの方を向き通信を開始する。

   task main()
   {
   int SIREI;
   TURNR(110);
   CM(36);
   TURNR(150);
   repeat(3){   //ライン3回越える
   BASYO();
   }
   CM(-13);//位置調整
   TURNR(130);
   until(BluetoothStatus(1)==NO_ERR);
   RemotePlayTone(1,440,1000);
   Wait(1000);
   RemoteStartProgram(1,"DAGEKI.rxe");
   while(SIREI<12){
   ReceiveRemoteNumber(MAILBOX1,true,SIREI);
   if(SIREI==11){
   PlaySound(SOUND_CLICK);
   Wait(200);
   HASSYA;
   SIREI=0;
   }
   }
   }

通信プログラム

   #define HASSYA RotateMotor(OUT_A,-90,90);Wait(1000);RotateMotor(OUT_A,-90,-90);//ボールを発射、装填(ピッチャー)
   #define CATCH Wait(500);RotateMotor(OUT_A,70,45);Wait(1000);ボールのキャッチ(バッター)
   #define UTU RotateMotor(OUT_A,-90,45);Wait(1000);ボールの発射(バッター)
   #define TURN(s,t) RotateMotorEx(OUT_BC,40,s,t,true,true);Wait(1000);向き調整(バッター)
   until(BluetoothStatus(1)==NO_ERR);//子機と通信ができるまで待機
   RemotePlayTone(1,440,1000);//子機の音を出させる
   Wait(1000);
   RemoteStartProgram(1,"DAGEKI.rxe");//子機のプログラムを開始させる
   int x=1;//回数を計るために定義
   
   task main()
   { 
       UTU;//アームを上げる
       while(x<6){
       BATTING();//バッティングのサブルーチン
   }
       SendRemoteNumber(0,MAILBOX1,12);//親機のプログラムを終了させる
   }

  

   子機から親機へ指令
   while(SIREI<12){
    ReceiveRemoteNumber(MAILBOX1,true,SIREI);
    if(SIREI==11){   
     PlaySound(SOUND_CLICK);
     Wait(200);
     HASSYA;
     SIREI=0;
    } else if(x==2){
       TURN(95,-100);
       UTU;
       TURN(95,100);
       x = x+1;
    } else if(x==3){
       TURN(40,100);
       UTU;
       TURN(40,-100);
       x = x+1;
    } else if(x==4){
       TURN(45,-100);
       UTU;
       TURN(45,100);
       x = x+1;
    } else {
       TURN(45,-100);
       UTU;
       TURN(45,100);
       x = x+1;
    }
    }

反省

位置通りに動いたが、プログラムをもう少し簡略したかった。 今回機体の作成に時間がかかり、相方とプログラムの確認があまりできなかった。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-03-06 (月) 20:16:20