2008b/A3/課題2?

課題2 黒い線に沿って動くロボットを作成せよ

課題2のポイント

・ライン上から外れることなくすすむこと
・交差点でもう一方のロボットとうまく行き交うこと
・ぶつかったら距離をとること
・2周したところで止まること

このようなことが求められている。

上の問題を解決するため、 課題2には課題1で使わなかったセンサーとプログラミングがある。

・コンピュータがトレースすべきラインを読み取るための光センサー
・コンピュータが衝突したときに対処するためのタッチセンサー
・光センサーやタッチセンサーを反応させるプログラム
・2周したところで止めるためのプログラム

この辺りを調整することで課題2の成功を目指す。

コース

課題2で使うコースをA3のグループで作成

ラインの幅は2〜2.5cmで、形はそれほど難しくはないコースになった。

コースは小さめに書かれているため、小回りを聞かせる必要がある。

交差点は2つ。

22.9,コース

ロボットの形成

試走

まずはドライブベースに光センサーを付ける。

この時点で、光センサーを2つ使うことを決めました。 理由はなんとなくです。

あるものは付けたほうがいい気がしました。

光センサーが2つの場合には、1つの場合に比べて

プログラミングが多少ややこしくなることが予想されました。

しかし2つあったほうが反応がいいのではないかという考えから、

プログラミングが難しくなっても2つ使ってやることにしました。

光センサー2つをドライブベースの先端部分に装着して

とりあえずコースを走らせてみました。

2つのセンサーは、トレースしていくラインをまたぐように装着。

右のセンサーが黒い部分を感知したら右へ進む
左のセンサーが黒い部分を感知したら左へ進む

というシンプルなプログラムでした。

結果・問題点

試走したことでわかったこと

・カーブを曲がり終えて交差点に入るまでに車体がまっすぐにならない
・曲がりきれない

→ロボットが大きく、小回りが利かない  2つのセンサーの間隔が広い  センサーが本体の中心から離れすぎている

・カーブでロボットの反応が追いつかない

→勢いがつきすぎている

修正

・車体を小さくする。
・センサーを可能な限り車体の中心に寄せる。

→小回りが利くようになる。

 ・センサーの間隔をラインの幅ギリギリまで狭くする。

→センサーがすぐに反応する →小回りできるようになる →スピードを抑えて曲がることができる

こうして修正することで、コースを回れるようになりました。

この後タッチセンサーを取り付けました。 本に掲載されているものをそのままに作って設置しました。

32.7,センサー

ロボット形成における工夫

.蹈椒奪箸鮠さく

小さくしたことによってカーブが楽になりました。

▲札鵐機爾篭瓩・狭く

反応を早くすることができました。

小回りをすることと

カーブを曲がりきって車体をまっすぐにする、というところで役立ちました。

A箸瀘て方

,鉢△旅夫を取り入れるため、

光センサーとタッチセンサーの位置関係を上下にして、

なるべくまとまった形になるようにしました。

40.0,全体

プログラミング

#define THRESHOLD 40                      //閾値を40に設定

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサ−1は光センサー
SetSensor(SENSOR_2,SENSOR_TOUCH);        //センサー2はタッチセンサー
SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサー3は光センサー

int n;                 //変数nを使う
n=0;                  //nを0とする

	while(n<4){               //nが4より小さいとき実行
			if(SENSOR_1>THRESHOLD)   {
				if(SENSOR_3>THRESHOLD)   {             //センサー1とセンサー3が
				OnFwd(OUT_A+OUT_C);              //白を感知しているとき前進
			}    else   {                //センサー1が白
		    	  OnFwd(OUT_A);             //センサー3が黒
			   	Off(OUT_C);           //を感知しているとき
				}          //右に回る
			}	
			else   {           //センサー1が黒
				if(SENSOR_3>THRESHOLD)   {         //センサー3が白
				Off(OUT_A);           //を感知しているとき
				OnFwd(OUT_C);           //左に回る
				}
				else   {            //センサー1とセンサ−3が
					OnRev(OUT_A+OUT_C);         //黒を感知しているとき
					Wait(30);
					Off(OUT_A+OUT_C);          //下がって止まり
					Wait(50);              //前進する
					OnFwd(OUT_A+OUT_C);
					Wait(100);
					n=n+1;         //変数nに1加える
					}
			}
			if(SENSOR_2==1){         //センサ−2が押されたとき
				OnRev(OUT_A+OUT_C);   Wait(50);         //下がって止まる
				Off(OUT_A+OUT_C);   Wait(100);
				}

			}
			Off(OUT_A+OUT_C);         //変数が4になったら止まる
}


苦労・工夫した点

苦労した点は黒いラインに沿って進ませるという、一番基本となる部分でした。

ロボットをイメージ通り動かすための、光センサーの位置や本体の大きさなどの調整が難しかった。

タッチセンサーをつけたときにバランスが悪くなって調整することにも苦労しました。

後はプログラミングで、光センサーのプログラムにタッチセンサーのプログラム、交差点での動き、2周で止めるプログラムを組み込むことに苦労しました。

2周で止めるために、変数を使うことができたのはよかったと思います。

コメントをお願いします

  • 変数とif文が使えていてよいです。 -- なかむら? 2008-12-11 (木) 13:54:13

どのような試行錯誤をしたかよくわかる良いレポートです。
図や写真を使えばわかりやすくなると思います。FI


添付ファイル: filecourse.JPG 276件 [詳細] filelsensor.JPG 256件 [詳細] filelhontai.JPG 243件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-11 (木) 13:54:13