ロボット紹介

全体

無題5.jpg
無題.jpg

前回のように軽さにこだわらず、できるだけピンポン玉をとれるように大きめに作りました。 この範囲内に入れば上から押し下げるアームによって中央にピンポン玉を持ってくることが可能になってます。アームは左右対称にチュ−ブ(?)を斜めに装着することで端にピンポン玉がいってしまったとしても中央にくる仕組みです。

無題4.jpg

部品の着脱が簡単に行えるようにできており、前回同様片づけのことも考慮したロボットになっています。

起動部分

無題3.jpg

アームを上げると同時に壁でピンポン玉を蹴ってシュートする仕組みになています。 アームの方が早く上がらなければ玉が引っかかってしまうため、歯車を多くつけ壁をより遅く動かすようにしました。アームが思った以上に重かったためシュート力が下がってしまってかなり苦労しました。できるだけアームを近づけることで対処しました。

コース攻略

robocon2013.png

初めはパスをもらう側

フィールド説明

ルール

攻略

プログラムの説明

#define THRESHOLD 48
#define HIPOWER 7//直進、シュート用の力
#define LOWPOWER 2//カーブ用
#define NOMALPOWER 5//パスをとるための力
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,NOMALPOWER);
#define set_power_S SetPower(OUT_B,HIPOWER);
#define go_forward set_power_H; OnFwd(OUT_AC);
#define turn_left1 set_power_L ;\
     OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
     OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
     OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
     OnFwd(OUT_A);OnRev(OUT_C);
#define STEP 1
#define nMAX 300
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 20
#define cross_line set_power_L;\
      go_forward;\
      Wait(CROSS_TIME);short_break;
#define arm_forward set_power_N; OnFwd(OUT_B);//アームを閉じる
#define arm_backward set_power_N; OnRev(OUT_B);//アームを開く
#define shoot set_power_S; OnRev(OUT_B);//シュート

ここまでが定義

task main ()
{
  SetSensor(SENSOR_2, SENSOR_LIGHT);
    int nOnline=0;
  ClearTimer(0); 
  while(FastTimer(0)<=200){
      if(SENSOR_2< THRESHOLD -10) {
         turn_right1;
         nOnline++;
      }else{
       if(SENSOR_2< THRESHOLD -4){
        turn_right0;
      }else if(SENSOR_2< THRESHOLD +3){
        go_forward;
      }else if(SENSOR_2< THRESHOLD +10){
        turn_left0;
      }else{
         turn_left1;
       } 
       nOnline=0;
        }
       Wait(STEP);
    }

通常のライントレース。

 PlaySound(SOUND_UP);
turn_left1;Wait(120);Off(OUT_AC); 
arm_backward;Wait(100);Off(OUT_B);Wait(1500);
arm_forward;Wait(10);Off(OUT_B);

相手のほうを向いてアームをあげ、パスをキャッチ。

 PlaySound(SOUND_UP);
turn_left1;Wait(130);Off(OUT_AC);

ライントレースをするため向きを元に戻す。

 ClearTimer(0);
while(FastTimer(0)<=300){
    if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -8)){
         turn_right1;
         nOnline++;
      }else{
       if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -3)){
        turn_right0;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +3)){
        go_forward;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +8)){
        turn_left0;
      }else if(nOnline < nMAX){
         turn_left1;
       }
       nOnline=0;
     } if(nOnline >= nMAX){
       short_break;
       turn_left1;
       Wait(STEP);
       cross_line;
      nOnline=0;
    }
  }

通常のライントレース。外側を走らせることで交差点を無視できる。

PlaySound(SOUND_UP);Off(OUT_AC);
turn_right1;Wait(145);go_forward;Wait(30);
shoot;Wait(50);Off(OUT_AC);Wait(0);Off(OUT_B);
OnRev(OUT_AC);Wait(80);turn_left1;Wait(130);Off(OUT_AC);

相手の方を向き、シュート。

   ClearTimer(0);
   while(FastTimer(0)<=700){
    if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -8)){
         turn_right1;
         nOnline++;
      }else{
       if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -3)){
        turn_right0;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +3)){
        go_forward;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +8)){
        turn_left0;
      }else if(nOnline < nMAX){
        turn_left1;
       }
       nOnline=0;
      } if(nOnline >= nMAX){
       short_break;
       turn_left1;
       Wait(STEP);
       cross_line;
       nOnline=0;
    }
  }
PlaySound(SOUND_UP);
turn_right1;
Wait(120);
arm_backward;
 ClearTimer(0);
while(FastTimer(0)<=2600){
    if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -8)){
         turn_left1;
         nOnline++;
      }else{
       if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -3)){
        turn_left0;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +3)){
        go_forward;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +8)){
        turn_right0;
      }else if(nOnline < nMAX){
         turn_right1;
       }
       nOnline=0;
       }if(nOnline >= nMAX){
       short_break;
       turn_right1;
       Wait(STEP);
       cross_line;
       nOnline=0;
    }
   }
PlaySound(SOUND_UP);
arm_forward;
  ClearTimer(0);
 while(FastTimer(0)<=4000){
    if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -8)){
         turn_right1;
         nOnline++;
      }else{
       if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD -3)){
        turn_right0;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +3)){
        go_forward;
      }else if((nOnline < nMAX)&&(SENSOR_2< THRESHOLD +8)){
        turn_left0;
      }else if(nOnline < nMAX){
         turn_left1;
       }
       nOnline=0;
       }if(nOnline >= nMAX){
       short_break;
       turn_left1;
       Wait(STEP);
       cross_line;
       nOnline=0;
    }
  }
}

まとめ

期末試験があったためあまり時間がとれず、結局完成することができませんでした。今回の課題は思ったとおり難しく、ロボット作成の時点でつまずいてしまいプログラムにあまり時間をかけることができませんでした。 プログラムを考えたり、ロボットの製作は思った以上に大変でしたが、ペアまたはチームで考え合い、協力し、試行錯誤しながら、なによりも楽しみながらすることができました。 最後は残念な結果になってしまいましたが、この講義で学んだことを今後にいかしていきたいと思います。


添付ファイル: file無題5.jpg 192件 [詳細] file無題4.jpg 202件 [詳細] file無題3.jpg 222件 [詳細] file2無題.jpg 111件 [詳細] file無題.jpg 192件 [詳細] file無題.png 109件 [詳細] filerobocon2013.png 239件 [詳細]

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