ライントレースをするロボット

Programed by 体調

int dir;					//変数dirを設定					
task main()					
{
SetSensor(SENSOR_2,SENSOR_LIGHT);		//センサー1をライトセンサーに定義
OnFwd(OUT_A+OUT_C);				//前進
until(SENSOR_2 < 40);				//ライトセンサーが黒のライン上に到達する
dir = 1;					//変数dirに1を代入
while (true)					//以下繰り返し
 {
 if(SENSOR_2 < 40)				 //RCXがライン上にある場合
  {
   OnFwd(OUT_A+OUT_C);				 //前進
   until(SENSOR_2 > 40);			 //ラインから外れるまで待つ
  }
 while (dir == 1)				 //変数dirが1の場合以下繰り返し(プログラム 				 //変数dirが1の場合以下繰り返し(プログラム 
 {
 if((SENSOR_2 > 40) && (dir == 1))		  //RCXがライン上にないとき
  {
   OnRev(OUT_A);
   OnFwd(OUT_C);				  //左回転
   ClearTimer(0);
   until((SENSOR_2 < 40) || (Timer(0) == 5));	  //RCXがライン上に戻るか0.5秒経つまで待つ
   if(SENSOR_2 < 40)				   //RCXがライン上に戻った場合
    {
     OnFwd(OUT_A);				   //前進 ⇒ ,帽圓
    }
   else					   //0.5秒左回転してもRCXがライン上にない場合
    {
     OnFwd(OUT_A);
     OnRev(OUT_C);				   //右回転
     until(SENSOR_2 < 40);			   //RCXがライン上に戻るまで待つ
     OnFwd(OUT_C);				   //前進
     dir = 2;					   //変数dirに2を代入 ⇒ △帽圓
    }
 }
 while (dir == 2)				 //変数dirが2の場合以下繰り返し(プログラム◆
 {
 if((SENSOR_2 > 40) && (dir == 2))		  //RCXがライン上にないとき
  {
   OnFwd(OUT_A);
   OnRev(OUT_C);				  //右回転
   ClearTimer(0);
   until((SENSOR_2 < 40) || (Timer(0) == 5));	  //RCXがライン上に戻るか0.5秒経つまで待つ
   if(SENSOR_2 < 40)				   //RCXがライン上に戻った場合
    {
     OnFwd(OUT_C);				   //前進 ⇒ △帽圓
    }
   else					   //0.5秒左回転してもRCXがライン上にない場合
    {
     OnFwd(OUT_C);
     OnRev(OUT_A);				   //左回転
     until(SENSOR_2 < 40);			   //RCXがライン上に戻るまで待つ
     OnFwd(OUT_A);				   //前進
     dir = 1;					   //変数dirに1を代入 ⇒ ,帽圓
    }
    }
  }
  }
 }
}

 このプログラムでは、光センサーがライン上にある場合は前進し、
ラインから外れた場合は光センサーを左右に振りラインを探して、
ライン上に光センサーが戻ったら再び前進するという仕組みになっています。
 このプログラムで問題となったのは、首を振る向きです。
例えば首を振る向きを左、右の順番にすると、右カーブでラインから外れる度に
左に首を振ってから右に振ってラインを見つけるため、非常に無駄な動きとなってしまいます。
 この問題の解決策は変数dirです。前回左右のどちらに首を振ったかを
変数dirの値によってRCXに覚えさせることによってラインを探す時の無駄な首の振りをなくしています。
 例えば右カーブでラインから外れた場合、最初はdirが1なのでプログラム,鮗孫圓掘
0.5秒左回転をしてから右回転をし、ラインに戻ります。このプログラムの後、dirの値は2となり、
プログラム△飽椶蠅泙后プログラム△任0.5秒右回転をしてから左回転になるので、
右回転の間にラインを見つけることができ、無駄な首の振りがなくなります。 Written by 体調

補足トリビア??? 
このころからロボット製作陣(全員)はユニット化を押し進めており、当初台から落ちないロボットと本体を共有し、 
センサー部分のみを別にする予定でしたが、隊長からの提案により内部に取りつけることになりました。 
写真は上から順に試作一号、別カット、完成形、その裏、競技場?、となっております。  Written by パシリ

01280003.jpg
01280004.jpg
01280001.jpg
01280002.jpg
nihonntizu.png

添付ファイル: file01280004.jpg 185件 [詳細] file01280003.jpg 185件 [詳細] filenihonntizu.png 213件 [詳細] file01280002.jpg 177件 [詳細] file01280001.jpg 199件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-02-08 (火) 13:41:24 (5303d)