[[2016b/Member]]
目次
#Contents

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

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

5球打ち合計の得点を競う。
*機体 [#a17c167b]
今回自分は投球ロボットを担当した。

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

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

投球場所までの移動はライントレースを用いた。
*投球ロボットプログラム [#j32e7f20]
**定義 [#h96ae104]
    #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()//ラインを検知して超えるプログラム
**ラインを越えるためのサブルーチン [#bd0faf4d]
    sub BASYO()
    {
    SetSensorLight(S1);

    TYOKUSIN;
    until(SENSOR_1<35);
    Off(OUT_BC);
    Wait(500);
    CM(5);
    Wait(500);
    }
    
**本文  [#e7759b36]
まずゴールにぶつからないように向きを変え直進、そこで向きを変え、ラインを3回超えるまで進む、位置調整のあと方向転換してバッターの方を向き通信を開始する。
    task main()
    {
    int SIREI;//子機からの信号を入れる場所
    int SIREI;
    TURNR(110);
    CM(36);
    TURNR(150);
    repeat(3){   //ラインを3回超えるまで
    repeat(3){   //ライン3回越える
    BASYO();
    }
    CM(-13);//位置の調節のためバック
    CM(-13);//位置調整
    TURNR(130);
    until(BluetoothStatus(1)==NO_ERR);//通信
    RemotePlayTone(1,440,1000);//通信
    until(BluetoothStatus(1)==NO_ERR);
    RemotePlayTone(1,440,1000);
    Wait(1000);
    RemoteStartProgram(1,"DAGEKI.rxe");//通信
    RemoteStartProgram(1,"DAGEKI.rxe");
    while(SIREI<12){
    ReceiveRemoteNumber(MAILBOX1,true,SIREI);//通信
    ReceiveRemoteNumber(MAILBOX1,true,SIREI);
    if(SIREI==11){
    PlaySound(SOUND_CLICK);
    Wait(200);
    HASSYA;
    SIREI=0;//通信
    SIREI=0;
    }
    }
    }

*通信プログラム [#pfc57d62]
    #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;
     }
     }
*反省 [#m818e60d]
位置通りに動いたが、プログラムをもう少し簡略したかった。
今回機体の作成に時間がかかり、相方とプログラムの確認があまりできなかった。


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