2007a/A9/ロボコン

ライントレースについて

方法としては、以下の通りである。

方法

A,2つのセンサーでトレース(黒、黒)
B,2つのセンサーでトレース(白、白)
C,1つのセンサーでトレース(黒)

  • 1つでトレース、一つで箱感知、一つで交差点を認識させることにしました。

参考までに。それぞれのプログラム(動作保障はいたしませんが。)

  • Cのプログラム
    ライントレース.JPG
    #define MOTOR OUT_A+OUT_C
    #define THRESHOLD 40 //閾値
    int search_dir;
sub turn_left(){ OnRev(OUT_A);OnFwd(OUT_C); }
sub turn_right(){ OnFwd(OUT_A);OnRev(OUT_C); } 
task main() 
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_LIGHT);OnFwd(MOTOR); //最初の動きとして直進させる。
while(true){
 if(SENSOR_1<THRESHOLD)           //線を見失ったら
 {
  if(search_dir==0){               //前回の捜索方向が0(左から捜索していた)
    turn_right(); Wait(5);     //右側から捜索開始
     if(SENSOR_1<THRESHOLD){        //線をみつけたのなら直進
         OnFwd(MOTOR);  
         search_dir=1;       //右から捜索していたことを記憶
     }else{                         //見付からないのなら反対側を探す
         turn_left(); Wait(10);
          if(SENSOR_1<THRESHOLD){    //見付けたのなら直進
            OnFwd(MOTOR);
            search_dir=0;      //左側の捜索で線を見つけたことを記憶
          }else{                     //どちらも見付からないのなら1秒前進
            OnFwd(MOTOR);Wait(100);
            search_dir=0;      //線を見失ったことになるので、とりあえず前進させる。
          }
     }
   }
   if(search_dir==1){         //上と同様。
     turn_left(); Wait(5);
       if(SENSOR_1<THRESHOLD){
          OnFwd(MOTOR);
          search_dir=0;
       }else{
          turn_right(); Wait(10);
           if(SENSOR_1<THRESHOLD){
             OnFwd(MOTOR);
             search_dir=1;
           }else{
             OnFwd(MOTOR); Wait(100);
             search_dir=0;
           }
       }
    }
  }
 }
 Off(OUT_A+OUT_C);
}

コメントをどうぞ。



添付ファイル: fileライントレース.JPG 346件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-09 (木) 16:47:25