ロボットの紹介

コース攻略法

  1. スタート
  2. 普通のライントレースをする
  3. 缶の位置まできたら缶をつかむ
  4. ライントレースと交差点を通過するライントレースを交互にする
  5. 缶を置く位置まで来たら、一度通過し通り過ぎてから旋回し缶を置き後退、再び旋回をする
  6. 普通のライントレースをする
  7. ゴール
    robotics-2013a-mission1.jpg

プログラムの説明

定義

#define THRESHOLD 35 //基準のしきい値
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_forward1 set_power_H;OnFwd(OUT_AC);  //前進(高速)
#define go_forward2 set_power_L;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 moter set_power_L;OnFwd(OUT_B);  //缶をつかむ
#define STEP 1
#define nMAX 3  //交差点とカーブを見分けるカウンター
#define short_break Off(OUT_AC);Wait(10);  //小休憩
#define CROSS_TIME 30  //交差点を通過するための前進する時間
#define cross_line go_forward1;\
 Wait(CROSS_TIME);short_break  //交差点を通過
#define time0 400
#define time1 1800 
#define time2 2200
#define time3 3300
#define time4 3700
#define time5 4600
#define time6 4900
#define time7 6000

普通のライントレースのサブルーチン

sub line_trace1()  //普通のライントレース
{     
       if (SENSOR_2 < THRESHOLD -6) {
      turn_left0;
     } else 
      if (SENSOR_2 < THRESHOLD -3) {
       turn_left1;
     } else if (SENSOR_2 < THRESHOLD +3) {
        go_forward1;
     } else if (SENSOR_2 < THRESHOLD +7) {
        turn_right0;
     } else {
        turn_right1;
       }
        Wait(STEP);
 }

急なカーブのライントレースのサブルーチン

sub line_trace2()  //急なカーブのライントレース
{     
       if (SENSOR_2 < THRESHOLD -3) {
      turn_left1;
     } else 
      if (SENSOR_2 < THRESHOLD +3) {
       turn_right1;
     } else {
        go_forward1;
       }
        Wait(STEP);
 }

交差点を通過するサブルーチン

sub line_cross()  //交差点を通過
{      
      int nOnline=0;
       while(nOnline < nMAX){
        if (SENSOR_2 < THRESHOLD -6) {
      turn_left1;
      nOnline++;  //カウンターをプラス
     } else {
      if (SENSOR_2 < THRESHOLD -3) {
       turn_left0;
     } else if (SENSOR_2 < THRESHOLD +3) {
        go_forward1;
     } else if (SENSOR_2 < THRESHOLD +7) {
        turn_right0;
     } else {
        turn_right1;
      }
    nOnline=0;  //カウンターをリセット
      }
      Wait(STEP);
    }
      short_break;  //小休憩
      turn_right1;Wait(nMAX*STEP*10);  //交差点と判断する間に左に旋回した分もとに戻る
      cross_line;  //交差点を通過
      nOnline=0;  //カウンターをリセット
}

コースを進む

    task main()
{
      SetSensor(SENSOR_2,SENSOR_LIGHT);
         ClearTimer(0);  //タイマーを0にする
       go_forward1;Wait(35);  //前進
       turn_left1;Wait(100);  //最初の直角のカーブを曲がる
       while(FastTimer(0) <= time0) {
         line_trace1();  //普通のライントレース
}
       moter;Wait(50);
       while(FastTimer(0) <= time1) {
         line_trace1();  //普通のライントレース
}
       PlaySound(SOUND_UP);
       while(FastTimer(0) <= time2) {
         line_cross();  //交差点を通過
}
       PlaySound(SOUND_UP);
       while(FastTimer(0) <= time3) {
         line_trace2();  //急な回転のライントレース
}
       PlaySound(SOUND_UP);
       while(FastTimer(0) <= time4) {
         line_cross();  //交差点を通過
}
          PlaySound(SOUND_UP);
       while(FastTimer(0) <= time5) {
         line_trace2();  //急な回転のライントレース
}
          PlaySound(SOUND_UP);
       while(FastTimer(0) <= time6) {
         line_cross();  //交差点を通過
}
           PlaySound(SOUND_UP);
       while(FastTimer(0) <= time7) {
         line_trace1();  //普通のライントレース
}
           PlaySound(SOUND_UP);

缶を置く

       turn_right1;Wait(100);  //缶を指定された位置に置き、缶に当たらないようにしながら続きのライントレースへ進む
       go_forward1;Wait(100);
       turn_left1;Wait(200);
       OnRev(OUT_B);Wait(50);Off(OUT_B);
       OnRev(OUT_AC);Wait(100);
       turn_right1;Wait(200);
       while(true){
         line_trace2();
   }
}

まとめ


添付ファイル: fileimage (5).jpg 418件 [詳細] fileimage (4).jpg 297件 [詳細] fileimage (3).jpg 312件 [詳細] fileimage (2).jpg 287件 [詳細] filerobotics-2013a-mission1.jpg 266件 [詳細] file1373524701220.jpg 125件 [詳細] file1373524685053.jpg 138件 [詳細] file1373524663100.jpg 145件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-07-26 (金) 05:16:52