2004/A6/ロボコン/運ぶロボット/プログラム

二号機のプログラム

 task main()
 {
  int move_time;
  SetSensor(SENSOR_1,SENSOR_LIGHT);//横につけたセンサー
  SetSensor(SENSOR_2,SENSOR_LIGHT);//前につけた色を判断するためのセンサー
  SetPower(OUT_C,7);//モーターCは箱を取り入れたりかきだす時に使い、AとBはタイヤ(移動)に使う。

  OnFwd(OUT_A+OUT_B); Wait(300);//台から降りる
  OnRev(OUT_A);//前を向く
  OnFwd(OUT_B); Wait(200);
  OnRev(OUT_A+OUT_B);Wait(300);//ちょっと前進
  Off(OUT_A+OUT_B); Wait(30);

  OnFwd(OUT_A)//90度右回転
  OnRev(OUT_B); Wait(100);
  OnRev(OUT_A+OUT_B); Wait(300);//前進
  OnRev(OUT_A);//90度左回転
  OnFwd(OUT_B); Wait(100);
  Off(OUT_A+OUT_B);

  while(true)
  {
     ClearTimer(0);

     OnRev(OUT_A+OUT_B);//前進
     until(SENSOR_1>50);//パックにぶつかるまで

     Wait(10);
     Off(OUT_A+OUT_B);//止まる
     move_time = 10*Timer(0);//move_timeの定義
     OnFwd(OUT_C); Wait(200);//箱をのせる

     OnFwd(OUT_A+OUT_B); Wait(50);//後退
     Off(OUT_C);
     OnRev(OUT_A+OUT_B); Wait(50);//前進
     OnFwd(OUT_C);
     OnFwd(OUT_A+OUT_B); Wait(30);//後退
     Off(OUT_C);
     OnRev(OUT_A+OUT_B); Wait(50);//前進 
     Off(OUT_A+OUT_B); Wait(30);


     if(SENSOR_2>35)//箱が緑,白
     {
        OnFwd(OUT_A+OUT_B); Wait(move_time);//後退
     
        Off(OUT_A+OUT_B);Wait(600);//止まる
        
        ClearTimer(1);
        while(Timer(1)<=50)//上げるロボットと通信
        {
           SendMessage(1);
	    Wait(50);
        }
      
        OnRev(OUT_A);//180度回転
        OnFwd(OUT_B); Wait(200);
        Off(OUT_A+OUT_B);
        OnRev(OUT_C); Wait(200);//箱を降ろす
        Off(OUT_C);
     
        SetPower(OUT_C,1);//モーターを弱くして棒を下向きにする(かき棒を元の状態にする)
        OnRev(OUT_C); Wait(100);
        Off(OUT_C); Wait(30);
        SetPower(OUT_C,7);
      
        OnRev(OUT_A);//180度回転
        OnFwd(OUT_B); Wait(180);
        Off(OUT_A+OUT_B);
     }
     else if(SENSOR_2<35)
     {
        OnFwd(OUT_A);//右回転
        OnRev(OUT_B);
        Wait(160);
   
        Off(OUT_A+OUT_B);//止まる
        OnRev(OUT_C); Wait(300);//箱を降ろす
        Off(OUT_C);
        SetPower(OUT_C,1);//かき棒を下向きにする
        OnRev(OUT_C); Wait(100);
        Off(OUT_C); Wait(30);
        SetPower(OUT_C,7);
   
        OnFwd(OUT_A);//回転
        OnRev(OUT_B);
        Wait(240);//前を向く
   
        Off(OUT_A+OUT_B);
     }
  }
 }

結構長いプログラムになってしまった。サブルーチン等を使えばもっと簡潔にできたはず...だけどあまり余裕がなかったためこのまま実行!!第一の問題は上げるロボットと通信が出来なかったこと。そのため調整はタイマーを使うこととなった。

箱を取り入れてから前後に動くことによって箱を掴み損なうという事がなくなった。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-02-24 (木) 16:13:53