2009a

課題2 ライントレースロボットを作る

A11L メンバー ダークホース ライス バビロン

ロボット

車体

車輪は基本的に最初に作ったものに改良を加えたもの。
最初に作ったロボットはなかなか小回りが利くため今回の課題にはもってこいだった。
またセンサーを組み込みやすかったため比較的はやくロボットを完成させられた。

車体

タッチセンサー

シングルバンパーを作成し、その先にアームを取り付けることにした。
アームによって牛乳パックをキャッチし、運ぶことにしたがしかし、運ぼうと思っても牛乳パックが出てしまうことに気がつき改良を加えた。G型にすることにより、左旋回では出ないようになった、なので右旋回はできない。
結果、いい感じに牛乳パックをキャッチできるようになった。

アーム

光センサー

最初はかなり悩んだが、先端につけると重心が前になってしまうためタッチセンサーアームより後ろにつけることにした。
センサー間を狭くすることによって、正確なライントレースが可能になった。

光センサー
光センサー2
光センサー3

完成

完成したがクワガタになった。
なかなかの出来ではないだろうか。

光センサー3

コース

course2.JPG

コース1
交差点:3
紙の端や交差点が狭い。

プロブラム

1:紙パックをキャッチした後、旋回し元の場所に戻し、また旋回してライントレースに戻る。

制作者:ダークホース

定数・マクロの指定

#define T 40                                                          //闘値を40に設定
#define Run_time 1500                                                  //Run_timeを150秒に設定
#define a OUT_A                                                       //OUT_Aをaと定義
#define c OUT_C                                                       //OUT_Cをcと定義
#define go_s(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);         //直進
#define go_b(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);         //後退
#define t_l(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);   //左旋回
#define t_r(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);   //右旋回

メインプログラム

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを1にセットする。
SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを2にセットする。
SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを3にセットする。
ClearTimer(0);
while(Timer(0) <= Run_time){     //150秒たったら止まるループ
	if(SENSOR_1>T){                  //光センサが2個とも白紙上にあるとき、直進
		if(SENSOR_3>T){
			OnFwd(a+c);
            	 }
		else{
			if(SENSOR_1>T){                  //左だけ白紙上にあるとき、右にターン
				OnFwd(a);
				Off(c);
  	         		}
		}
	}
	else{
		if(SENSOR_3>T){                  //右だけ白紙上にあるとき、左にターン
			OnFwd(c);
			Off(a);
            	}
		else{                            //両方線上にあるとき  1.0秒止まりし、1.0秒前進する。
			Off(a+c);
			Wait(100);
			OnFwd(a+c);
			Wait(100);
		}
   
  	 }
	if(SENSOR_2 == 1);		    //タッチセンサーのが押されるか判断
		go_s(50);            //押されたら、0,5秒進み
		t_l(90);             //左に180度旋回
		go_b(50);            //0,5下がり、牛乳パックをおく
		t_l(90);             //左に180度旋回
	}

2:迂回するパターンのプログラム

制作者:バビロン

定数・マクロの指定

#define BORDER 40                 //闘値を40に設定
int x=0;                      //変数Xを定義

メインプログラム

task main ()
{
	
	SetSensor ( SENSOR_1, SENSOR_LIGHT );   //光センサーを1にセットする。
	SetSensor ( SENSOR_2, SENSOR_TOUCH );    //タッチセンサーを2にセットする。
	SetSensor ( SENSOR_3, SENSOR_LIGHT );    //光センサーを3にセットする。
	
	
	
	
	while (x < 3); //xが3になるまで下のプログラムをつづける
		
		if ( SENSOR_2 == 1 ){ //タッチセンサーが押されたとき
			OnRev(OUT_A+OUT_C); //バック
			Wait(50);
			Off(OUT_A+OUT_C);
			OnFwd(OUT_A);
			OnRev(OUT_C); //右を向く
			Wait(90);
			OnFwd(OUT_A+OUT_C);//直進
			Wait(100);
			OnFwd(OUT_C);
			OnRev(OUT_A); //左を向く(コースに平行)
			Wait(90);		
		            OnFwd(OUT_A+OUT_C); //直進
			Wait(100);
			OnFwd(OUT_C); //左を向く
			OnRev(OUT_A);
			Wait(90);		
		            OnFwd(OUT_A+OUT_C);//直進 この時点でパックの向こう側にいる
			Wait(100);
			OnFwd(OUT_A); //右を向く(コースの先に)
			OnRev(OUT_C);
			Wait(90);
			x=x+1; //xに+1する
		}
		else{ //ライントレース
			
 			if ( SENSOR_1 > BORDER ){
				if ( SENSOR_3> BORDER ){
					OnFwd(OUT_A+OUT_C);
				}
				else {
					OnFwd(OUT_A);
					Off(OUT_C);
				}
			}
			else {
				if ( SENSOR_3> BORDER ){
					Off(OUT_A);
					OnFwd(OUT_C);
 				}
				
			}
		}
}

3:最初の交差点では左折、次の交差点では右折、その次は左折、というように交差点一つごとに左折・右折を繰り替えして進む

制作者:ライス

#define THRESHOLD 44    
int a;
task main ()
{
a=0;      
SetSensor(SENSOR_1,SENSOR_LIGHT);  //光センサーを1にセットする。
SetSensor(SENSOR_2,SENSOR_TOUCH);  //タッチセンサーを2にセットする。
SetSensor(SENSOR_3,SENSOR_LIGHT);    //光センサーを3にセットする。
while (a<20){ //aが20=三周するまで以下の動作をする

if((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD))  //光センサーが両方黒を感知した=交差点にきたとき
{
if((a==0)||(a==2)||(a==4)||(a==6)||(a==8)||
(a==10)||(a==12)||(a==14)||(a==16)||(a==18)) //aが偶数の時
{
Off(OUT_A+OUT_C);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_A);  //右に曲がる
OnRev(OUT_C);
Wait(95);
OnFwd(OUT_A+OUT_C); 
Wait(35);
a=a+1;
}
else{              //それ以外=aが奇数の時
Off(OUT_A+OUT_C);
Wait(105);
OnFwd(OUT_A+OUT_C);
Wait(50);
OnFwd(OUT_C); //左に曲がる
OnRev(OUT_A);
Wait(100);
OnFwd(OUT_A+OUT_C);
Wait(40);
a=a+1;
}               //一度、以上のどちらかの動作を行ったらaに+1している

if (SENSOR_1>THRESHOLD){    //通常ライントレース、他の人とほぼ同じなので説明は省く。                       
OnFwd(OUT_A);
OnRev(OUT_C);
}
if(SENSOR_3>THRESHOLD){     
OnRev(OUT_A);
OnFwd(OUT_C);
}
}
Off(OUT_A+OUT_C);
}

		

感想   

今回の課題は例年に比べ難しかったと思う。 高校のころにマイコンカーをやっていてライントレースはやっていたが、まったく違う内容だった。まず、牛乳パックをいかに動かすかというところが難しかった。またプログラムもなかなか難しかった。

コメント



添付ファイル: filecourse2.JPG 447件 [詳細] filecourse1.JPG 199件 [詳細] file車体.jpg 452件 [詳細] fileアーム.jpg 369件 [詳細] file20090612174743.jpg 518件 [詳細] file20090612174757.jpg 412件 [詳細] file20090612174810.jpg 420件 [詳細] file20090612174824.jpg 190件 [詳細] file光センサー-1.jpg 472件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-10 (月) 00:20:25