課題2:ロボコン

ロボットの紹介

今回のロボットは、ピンポン玉発射時とピンポン玉を取りに行くときの正確さを上げるような構造にしました。 http://www.dotup.org/uploda/www.dotup.org4406378.jpg

コースの攻略法

http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2013a%2FMission2&openfile=robocon2013a.png

先行(ピンポン玉をとりに行くほう)

  1. ライントレースをし交差点まで行く
  2. 交差点まできたと判断したら、ピンポン玉の方向へロボットの進行方向の調節をするプログラムを起動させる
  3. ピンポン玉を取りもと来た道に戻るようにする
  4. 相互にパスをする体勢を整えてからパスをやり取りする
  5. 最後のパスが来たライントレースをし、時間指定で所定位置まで行きゴールにシュートする

プログラムの説明

文字の定義

#define off Off(OUT_BC);  
#define BLACK 31
#define WHITE 62
#define go OnFwd(OUT_BC,30);
#define left OnFwd(OUT_B,30);Off(OUT_C);
#define right OnFwd(OUT_C,30);Off(OUT_B);
#define THRESHOLD 46
#define lleft OnFwd(OUT_B,30);OnRev(OUT_C,30); 
#define rright OnFwd(OUT_C,30);OnRev(OUT_B,30);
#define fire OnRev(OUT_A,55);
#define catch OnFwd(OUT_A,40);
#define back OnRev(OUT_BC,30);
#define off1 Off(OUT_BC);
#define off2 Off(OUT_A);
#define CONN 1

メインプログラム

task main()
{//1  カッコの数が分からなくなるので数字をつけて区別 {}で1対応
  SetSensorLight(S1);//光センサー定義
   int n=0;//変数1
   int m=0;//変数2
    int msg;
     
 

球をとるまでのプログラム

while(n<600)//ライントレース(交差点判断含む)
 {//2
  if (SENSOR_1 < 35){left;n++; }
  else
    {//3
   if(SENSOR_1 < 42){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
   n=0;
    }//3
  }//2

交差点にきたらwhileを抜け次のプログラムへ

  back//体制を整えるため一旦距離をとる
  Wait(1250);
  right
  Wait(980);//球の方向へ
  go
  Wait(500);//進む
  catch
  Wait(500);//球を抑える
  Off(OUT_A);
  rright
  Wait(1500);//元の方向へ
  go//進む
  Wait(2450);
  while(SENSOR_1 > 50){left}//黒線がくるまで左回転

球を排出するまでのプログラム

long t0 = CurrentTick();//時間指定

while(CurrentTick()-t0 <= 4850)//ライントーレス
  {//4
  if (SENSOR_1 < 37){left}
  else
    {//5
   if(SENSOR_1 < 45){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
    }//5
   }//4

時間が来たら玉をパスするための行動に移行する

 lleft
 Wait(1040);
 Off(OUT_BC);
 Wait(2000);
 SendRemoteNumber(CONN,MAILBOX1,11);相手に信号を送る
 fire//玉発射
 Wait(1200);
 Off(OUT_A);
 rright
 Wait(400);
   while(SENSOR_1 > 50){rright}//方向改善

go//次の地点へ
      Wait(2050);

玉を受け取るプログラム

    lleft//受け取る体勢
    Wait(1040);
    Off(OUT_BC);
     
   Wait(5000);
    SendRemoteNumber(CONN,MAILBOX1,12); 玉を打たせる信号を送る
     Wait(3000);
    catch//玉をとる
    Wait(350);
    Off(OUT_A);
   while(SENSOR_1 > 50){rright}

球を排出するまでのプログラム

   long t3 = CurrentTick();
  while(CurrentTick()-t3 <= 2400)
  {//6
  if (SENSOR_1 < 37){left}
  else
    {//7
   if(SENSOR_1 < 45){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
    }//7
   }//6
    
      lleft//球排出
      Wait(1040);
      Off(OUT_BC);
      Wait(5000);
    SendRemoteNumber(CONN,MAILBOX1,13);
      fire
      Wait(1000);//1回目終了
      Off(OUT_A);
                  

相手が終わるまで待機

Wait(30000);

玉受け取り

SendRemoteNumber(CONN,MAILBOX1,13);
Wait(800);
catch
Off(OUT_A);
Wait(500);
 while(SENSOR_1 > 50){lleft}
 

球を排出するまでのプログラム

   long t4 = CurrentTick();
  while(CurrentTick()-t4 <= 2500)
  {//8
  if (SENSOR_1 < 37){left}
  else
    {//9
   if(SENSOR_1 < 45){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
    }//9
   }//8
    
       
    rright
    Wait(1000); 
    Off(OUT_BC);
    fire
    Wait(500);
    Off(OUT_A);
  while(SENSOR_1 > 50){lleft}
 

球を受け取るプログラム

   long t5 = CurrentTick();
  while(CurrentTick()-t5 <= 2500)
  {//10
  if (SENSOR_1 < 37){left}
  else
    {//11
   if(SENSOR_1 < 45){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
    }//10
   }//11

        rright
        Wait(1000);
       Off(OUT_BC);
 
        catch
        Wait(500);
         Off(OUT_A);
        while(SENSOR_1 > 50){lleft}


long t6 = CurrentTick();

ゴール用

while(CurrentTick()-t6 <= 5000)
 {//12
  if (SENSOR_1 < 35){left}
  else
    {//13
   if(SENSOR_1 < 42){lleft} 
   else if (SENSOR_1 < 50){go}
   else if (SENSOR_1 < 56){right}
   else  {rright}
    }//13
   }//12

時間が来たら発射

fire
Wait(1000);
Off(OUT_A);
}//1

まとめ

とても難しかった。特に相手とのBluetooth通信による連携は困難を極めた。他にも、ロボットの形が相手とは違っていたのでパスのやり取りがしずらかったことも反省すべき点であった。だが、なんとか2回のパスを本番で通すことができたのは僥倖だった。

また、電池の残量によりロボットの挙動が大分変ってしまうので、試験当日に電池が切れ、交換をしなければならなくなったことで、調整に余計に時間を使ったことが特に悔やまれる。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-14 (水) 00:04:02