2010a

目次

課題2:黒い線に沿って動くロボット

各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

1. 空き缶をコース上に戻して再びコースに戻って進む

2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む

ただし、

•速さと正確さを追求すること

•コースを1周したら自動的に止まること

•交差点では一時停止すること

メンバー

スズキ
Ta2(写真配置の都合上、ウインドウを横に広げて見ていただきたい)

ロボットについて

本体

MS_type1_全体.JPG
MS_type2_全体.JPG
←「type1」
空き缶を運ぶためにアームが前にあります。

「type2」→
空き缶を避けて進むため、
邪魔なアームは後ろに。


MS_本体.JPG
タッチセンサー、光センサー、アームを外すとこんなにシンプルに…
まぁ、ほとんど最初のものと同じですが…

各種パーツ

MS_タッチセンサー.JPG
MS_光センサー.JPG
←タッチセンサーの接触部分?の脆さが難点…
本体を下から見ただけだったり…→


MS_タッチセンサーのみ.JPG
MS_光センサーおよびアーム(type2).JPG
←分解するとこんな感じ
タッチセンサの部分です。
こちらも分解されている図→
光センサとアームは一体化?しています。
アームはtype2のもの。

工夫した点

  • 重心がロボットの前の方だったので、バランスをとるためにRCXを少し後方に配置し、タイヤを前の方を大きくした。
  • タッチセンサーの反応を良くするために部品をつけ、小さな力でもしっかりと反応するようにした。
  • アームを簡単なものにしたため取り外しが容易にできて、役割に応じて変形できるようにした。

苦労した点

  • タッチセンサーがうまく反応しなかったこと。
  • 缶を取りこぼすことなく運ぶにはどのようなアームにすれば良いのか。
  • タッチセンサーの反応を良くするために取り付けた部品が脆かったこと

コースについて

SH3E0008.jpg

simple is the best!
ただ、他の形が思いつかなかっただけですが…
しかし思っていた以上にカーブは急になっていて、ちょっと光センサの取り付け位置を変える必要がありました。

問題点

  • 場所によって閾値がばらばらで、線を無視して走ってしまうこと。

プログラム

スズキのプログラム

空き缶を次の交差点まで運ぶプログラム

#define THRESHOLD 40	// 閾値
#define turn_time 170	// 180°回転する時間
#define go_time 90	//交差点から出る時間
#define away_time 90	//缶から遠ざかる時間
#define play_time 6000	//ロボットの動く時間
int n=0;		//n=1:空き缶持っている
task main(){

	SetSensor(SENSOR_1, SENSOR_LIGHT);
	SetSensor(SENSOR_2, SENSOR_TOUCH);
	SetSensor(SENSOR_3, SENSOR_LIGHT);
	ClearTimer(0);
				//空き缶を次の交差点まで運ぶプログラム
   while(FastTimer(0)<play_time){
		start follow_line;				//ライントレースの開始
             until(SENSOR_1<THRESHOLD&&SENSOR_3<THRESHOLD);	//交差点まで(センサー1と3が黒になる場合まで)
		stop follow_line;				//ライントレースの終了
		Off(OUT_A+OUT_C);				//2秒間停止
		Wait(200);
		OnFwd(OUT_A+OUT_C);				//交差点から出る
		Wait(go_time);
		if(n==1){					//もし空き缶を持っている なら
			OnFwd(OUT_A);OnRev(OUT_C);		//空き缶を交差点に戻す
			Wait(turn_time);
			OnRev(OUT_A+OUT_C);			//後ろに下がって空き缶に当たらないようにする
			Wait(away_time);
			OnFwd(OUT_A);OnRev(OUT_C);		//進行方向へ回転
			Wait(turn_time);
			OnRev(OUT_A+OUT_C);			//ライン上に戻る
			Wait(away_time);
			Off(OUT_A+OUT_C);
			n=0;					//作業が完了したためn=0にする
			
		}
   }
  
}

				//ライントレースのプログラム
task follow_line(){       
while (true){
          if(SENSOR_1>THRESHOLD&&SENSOR_3<THRESHOLD){		//センサー1が白、センサー3が黒の時
              OnFwd(OUT_A);OnRev(OUT_C);			//右に回転し軌道を修正
          }else if(SENSOR_1<THRESHOLD&&SENSOR_3>THRESHOLD){	//センサー3が白、センサー1が黒の時
              OnFwd(OUT_C);OnRev(OUT_A);			//左に回転し軌道を修正
          }else{						//両方白または、両方黒の時 
              OnFwd(OUT_A+OUT_C);				//前進する
	       }
	   if(SENSOR_2==1){ 	  	 		        //空き缶に当たったら 							    
n=1;								//nを1にする		
	  }
     }
}

工夫した点

  • できるだけ簡単になるようにした。
  • プログラムに詳しく説明を入れ分かりやすいようにした。

今後改善すべき点

  • タッチセンサーが反応したら音が鳴るようにする。
  • 動く時間を交差手点を通った回数にする。

Ta2のプログラム

空き缶を避けて進むプログラム

#define light 40		//閾値
#define time 50		//待ち時間
#define RUN_TIME 8700	//走る時間

task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);
	SetSensor(SENSOR_2,SENSOR_TOUCH);
	SetSensor(SENSOR_3,SENSOR_LIGHT);
	
	ClearTimer(0);
	
	while(Timer(0) <= RUN_TIME)
	{
 	
	start follow_line;

	if(SENSOR_2>1)			//タッチセンサーが反応
		{
		
		stop follow_line;	//ライントレースのタスクを一旦停止

		OnRev(OUT_A+OUT_C); 
		Wait(time);			
	
		OnFwd(OUT_A);
		OnRev(OUT_C);
		Wait(100);
		Off(OUT_A+OUT_C);
	
		OnFwd(OUT_A+OUT_C);
		Wait(130);
	
		OnFwd(OUT_C); OnRev(OUT_A);
		Wait(100);
		Off(OUT_A+OUT_C);
	
		OnFwd(OUT_A+OUT_C);
		Wait(280);	
	
		OnFwd(OUT_C); OnRev(OUT_A);
		Wait(100);
		Off(OUT_A+OUT_C);	
		OnFwd(OUT_A+OUT_C);
		Wait(100);
		}				//缶を避けてラインに戻る。
	}
}





task follow_line()				//ライントレースのプログラム
{

while(true){

	if(SENSOR_1>light){
		if(SENSOR_3>light){ 	
			OnFwd(OUT_A+OUT_C);	
			}
		else{  				
			OnFwd(OUT_A);
			OnRev(OUT_C);
			}
		}

	else{
		if(SENSOR_3>light){
			OnRev (OUT_A);
			OnFwd(OUT_C);		
			}

		else{
			Off(OUT_A+OUT_C);	
			Wait(20);		
			OnFwd(OUT_A+OUT_C);	
			Wait(20);					
			}
		}
	}
}

工夫した点

缶を避けるためのタスクと、ライントレースのタスクを分けて作成した。

今後改善すべき点

elseの使い方を間違っていたかもしれない。
音を鳴らしてみたい。
もっとシンプルに。

反省・感想

elseに嫌われた…。また、空き缶が軽すぎてタッチセンサーが反応しなくて困った。by Ta2

プログラムを考えるのが大変だった。タッチセンサーが反応しなかったためロボットを改造するのに苦労した。byスズキ

コメント

コメントをどうぞ

  • ロボットについて、プログラムについて工夫した点や問題点などを具体的に説明してください -- TAKA? 2010-07-09 (金) 17:48:49
  • 二人目のプログラムではsensor_2が反応した際に、いったんfollow_lineのtaskをとめたほうがよいのではないでしょうか? -- FI? 2010-07-31 (土) 15:16:23


添付ファイル: fileMS_本体.JPG 226件 [詳細] fileMS_光センサーおよびアーム(type2).JPG 201件 [詳細] fileMS_タッチセンサーのみ.JPG 234件 [詳細] fileMS_光センサー.JPG 196件 [詳細] fileMS_タッチセンサー.JPG 228件 [詳細] fileMS_type2_全体.JPG 228件 [詳細] fileMS_type1_全体.JPG 218件 [詳細] fileSH3E0008.jpg 237件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-29 (日) 13:09:17 (3280d)