2012a/MemberOnly/進行状況A

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

ルール

・交差点×2
・ヘアピンカーブ×1
・直角×1
・コースの出入り口の線×4
・一周半以上回ってからコースアウトする

ロボット本体

コースを走りやすくするために(小回り出来るように)、光センサーを車輪にできるだけ近づけて取り付けました。それと、見た目をコンパクトにしました。

本体
光センサー

コース

コースはこんな感じになりました。描いてみて結構ムズいコースになってしまったことに気づきました。黒と白の間を走るため、コースの構造上2周してコースアウトすることにした。

コース

コースはこのように回りました。

コース

また、コースで難しかったところが3か所あった。

コース

,猟廠僂里箸海蹐任呂修里泙泙世閥覆りきれずにコースアウトしてしまったので、スタート位置からの大体の距離を測定し、直角の手前で慎重に動くようにした。2周目の直角でも1周目と同様にした。ところが、予定よりアウトコースを走ったりして毎回微妙に距離が違ったりするので、設定する距離が短いとのところで曲がってしまい、長いと,魘覆りきれないという風に大変だった。コースを作る際に、もう少し,鉢の間を開けて描けば良かったです。 △任脇るときには問題ないが、線が太かったせいか出るときに稀に脱出できない時があり、スピードを上げることにより失敗の確率を下げれた。 でも線の太さのせいか、時々アウトコース気味に走ってしまうことがあり、ここでアウトコースを走ると後に直角までの距離が変わってしまうので、ここでもスピードを上げて何とか毎回バラバラのコースどりをしないようにしました。 最後のコースアウトでは、,猟廠僂汎瑛優好拭璽箸らの大体の距離を測りゴール間際で慎重になるようにしてコースアウトするようにしました。

プログラム

 /*****************************************************************/
 /*		nxtプログラム kadai2				*/
 /*****************************************************************/
  
 //定義文
 #define	in_dis		50  //入り口の距離
 #define	cr1_dis_r	1300 //1周目の直角までの右車輪の距離
 #define	cr1_dis_l	1700 //1周目の直角までの左車輪の距離
 #define	cr2_dis_r	10000 //2周目の直角までの右車輪の距離
 #define	cr2_dis_l	8900 //2周目の直角までの左車輪の距離
 #define	out_dis_r	17000 //出口までの右車輪の距離
 #define	out_dis_l	13800 //出口までの左車輪の距離
 #define	sensor_c	43 //白と黒の閾値の中心値
 
 //メイン関数
 task main(void){
 	unsigned int          mode,in_f=0,out_f=0,cr1_f=0,cr2_f=0,cr_distance,distance_r,distance_l,sensor_w,sensor_b;
	SetSensorLight(IN_3); //センサーセット
	ResetTachoCount(OUT_B); //右車輪の回転数のリセット
	ResetTachoCount(OUT_C); //左車輪の回転数のリセット
	mode=1;
	
	sensor_w = sensor_c+5; //白の閾値
	sensor_b = sensor_c-5; //黒の閾値
	while(1){
							
		distance_r=MotorTachoCount(OUT_B); //右車輪の回転数の取得
		distance_l=MotorTachoCount(OUT_C); //左車輪の回転数の取得
		TextOut(0,LCD_LINE1,"LightSensor ="); //ディスプレイの表示
		NumOut(85,LCD_LINE1,Sensor(IN_3)); //センサーの値を表示
		TextOut(0,LCD_LINE2,"TachoCout_R"); //右車輪のディスプレイの表示
		NumOut(0,LCD_LINE3,distance_r); //右車輪の距離表示
		TextOut(0,LCD_LINE4,"TachoCout_L"); //左車輪のディスプレイの表示
		NumOut(0,LCD_LINE5,distance_l); //左車輪の距離表示
				
		NumOut(0,LCD_LINE6,mode); //場合わけの表示
		switch(mode){
			case 1:
				if(Sensor(IN_3)<=sensor_b){
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_B,40,0);
					Wait(5);
				}else if(Sensor(IN_3)>=sensor_w){
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_C,40,0);
					Wait(5);
				}else{
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_BC,38,0);
					Wait(5);
				}
				
				if(distance_r>in_dis &&   distance_l>in_dis && in_f==0){
					mode=2;
				}
				if(distance_r>cr1_dis_r && distance_l>cr1_dis_l && cr1_f==0){
					mode=2;
				}
				
				if(distance_r>cr2_dis_r && distance_l>cr2_dis_l && cr2_f==0){
					mode=2;
				}
				
				if(distance_r>out_dis_r && distance_l>out_dis_l && out_f==0){
					mode=2;
				}
				
				if(out_f==1 && Sensor(IN_3)>=99 && Sensor(IN_3)<=10){
					Wait(1000);
					OffEx(OUT_BC,0);
					while(1);
				}
					
				break;
			case 2:
				if(Sensor(IN_3)<=sensor_b){
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_B,50,0);
					OnFwdEx(OUT_C,-20,0);
					Wait(5);
				}else if(Sensor(IN_3)>=sensor_w){
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_C,50,0);
					OnFwdEx(OUT_B,-20,0);
					Wait(5);
				}else{
					CoastEx(OUT_BC,0);			//モータBCフリー
					OnFwdEx(OUT_BC,25,0);
					Wait(5);
				}
				
				if(distance_r>in_dis+300 && distance_l>in_dis+100 && in_f==0){
					mode=1;
					in_f++;
				}
				
				if(distance_r>cr1_dis_r+350 && distance_l>cr1_dis_l+150 && cr1_f==0){
					mode=1;
					cr1_f++;
				}
				
				if(distance_r>cr2_dis_r+350 && distance_l>cr2_dis_l+150 && cr2_f==0){
					mode=1;
					cr2_f++;
				}
				if(distance_r>out_dis_r+150 && distance_l>out_dis_l+350 && out_f==0){
					mode=1;
					out_f++;
				}
				
				break;
		}
	}
 }

感想

今回の課題は前回の課題よりもとても難しく大変でした。コースは後から後悔した点が多く、最初にもっと慎重に後のことを考えて作ればよかった。また、プログラミングは相方にとても助けてもらいました。次回からはロボコンが始まるので、チームメイトに迷惑をかけないように今までの経験を活かして自分にできることを頑張りたいと思います。


添付ファイル: fileコース難点2.jpg 157件 [詳細] file光センサー2.jpg 185件 [詳細] fileコース難点.jpg 80件 [詳細] fileコース回る向き.jpg 161件 [詳細] fileコース.jpg 159件 [詳細] file光センサー.jpg 77件 [詳細] file本体.jpg 158件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-07-06 (金) 16:17:49 (2598d)