2008b/A7/課題2右

#hr
CENTER:&size(25){ライントレースロボット};
#hr

CENTER:製作者:タキさ マツコ

目次
#contents
-------

*課題についての説明 [#d306895c]

各チームで作成したコースに沿って動くロボットを作成せよ。ただし、

    * 速さと正確さを追求すること
    * 交差点で優先側を走っていない場合には、一時停止すること
    * 前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
    * コースを2周したら自動的に止まること
    * コースを2周したら自動的に止まること(ただし、手違いにより私たちは3周)

*製作したマシン [#e6da836a]

今回私たちが製作したライントレースロボットは、基本的なタッチセンサーロボットに
ラインをトレースする光センサーを適度な場所に取り付けたシンプルなロボットとなりました。
今回私たちが製作したライントレースロボットは、当初は基本的なタッチセンサーロボットにラインをトレースする光センサーを適度な場所に取り付けたシンプルなロボットとなりました。しかし、課題を達成し、余裕ができた私たちは、スピードを追求したマシンを作ろうとしました。タイヤを大きくしたり、プログラムの処理を減らしたりと色々な工夫の結果、マシンは下の画像のようになり、コース3周を2分37秒から1分50秒と47秒の短縮に成功しました。

|>|CENTER:COLOR(#808080):'' マシン ''|
|>|CENTER:COLOR(#808080):''鳥瞰図 修正前マシン 側面図''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/tyoukanzu1.jpg,75%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/sokumennzu1.jpg,75%,);|


|>|CENTER:COLOR(#808080):'' マシン ''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/tyoukanzu2.jpg,75%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/sokumennzu2.jpg,75%,);|
|>|CENTER:COLOR(#808080):''鳥瞰図 修正後マシン 側面図''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/tyokanzu3.jpg,75%,);| |>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/sokumannzu3.jpg,75%,);|

|>|CENTER:COLOR(#808080):'' キャスター? ''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/kyasuta.jpg,75%,);|

*このマシンの利点[#la6ffb39]
修正前
-付属の本に掲載されているタッチセンサーロボットに、光センサーを適度な場所にくるように調節して取り付けるだけなので、製作が非常に簡単。

-光センサの位置の調整が簡単(=プログラム制作が簡単になる)。

-シンプルな構造のため、複雑な動きはできないものの、その分動作が安定する。

修正後
-修正前のマシンのタイヤを大きくし、スピードUP。

-後部を支えるキャスターを上の画像のようなキャスター?にすることで、製作が簡単で、なおかつ動作がより安定。


*コース [#q7ba1066]
|>|CENTER:COLOR(#808080):''(全体図) 修正前コース (8の字カーブ) ''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/zentaizu.jpg,75%,);||>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/8nozi.jpg,75%,);|

#hr

|>|CENTER:COLOR(#808080):'' 書き換え後コース ''|
|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/081203_1523~0001.jpg,75%,);|

|>|CENTER:COLOR(#808080):&ref(2008b/A7/課題2右/kosu00.jpg,75%,);|
 
*プログラムの紹介 [#n9e8de4f]

 #define light_judg 40
 #define timer0_judg 5
 #define two_motor OUT_A+OUT_C
 
 /* ラインチレースプログラム */
 
 /* 定数を定義 */
 #define light_judg 40 /* 光センサの判断値を定義 */
 #define two_motor OUT_A+OUT_C /* 出力A、Cをまとめる定義 */
 
 /* タッチセンサか、光センサの両方が反応したときの動作関数 */
 void move_stop(int t){
 		
 	OnRev(OUT_A);    /* 位置微調整のため少し左回転 */
 	Wait((t  / 13)); /* 入力値が0ならば待たない */
 	Off(two_motor);
 	OnRev(two_motor);
  	Wait(t);
 	Off(two_motor);
 	Wait(200);
 	Wait(200);       /* 2秒間停止 */
 	OnFwd(two_motor);
 	Wait((t * 2));
 	Wait((t * 2));   /* 入力値が0ならば待たない */
 }
 
   
    
 task main(){
         /* n:交差点通過数のカウンタ変数 */
 	int n;
 	n = 0;
 
         /* センサの設定 */
 	SetSensor(SENSOR_1,SENSOR_LIGHT);
 	SetSensor(SENSOR_2,SENSOR_TOUCH);
 	SetSensor(SENSOR_3,SENSOR_LIGHT); 
 	
 	SetPower(OUT_A,3);
 	SetPower(OUT_C,3);
         /* 出力の設定 */
 	SetPower(OUT_A,2);
 	SetPower(OUT_C,2);
 	
         /* マシンスタート */
 	OnFwd(two_motor);
 	
         /* nが9以上(コース3周以上)になるまでループ */
 	while(1){
                 /* もしタッチセンサが反応したら */
 		if(SENSOR_2)
 			move_stop(0);
 		
                 /* もし光センサの両方が反応したら */
 		if((SENSOR_1 < light_judg) && (SENSOR_3 < light_judg)){
 			n++;
 			if (n % 3 != 0)
 			n++;               /* nに+1 */
 			if (n % 3 != 0)  /* nが3の倍数(スタート地点の目印の反応時)以外ならば */
 				move_stop(50);
 			else
 				Wait(20);
 			else              /* nが3の倍数ならば */
 				Wait(20); /* 0.2秒待機 */
 		}
 		
 		if (n >= 6){
 			Off(two_motor);
 			break;
 		 /* nが9以上(コース3周以上)になったら */
 		if (n >= 9){
 			Off(two_motor); /* マシン停止 */
 			break;          /* ループか抜ける */
 		}
 			
                 /* センサ1が反応したら */
 		else if(SENSOR_1 < light_judg){
 			Off(OUT_A);
 			OnRev(OUT_A);
 			ClearTimer(0);
 			
 			while(SENSOR_1 < light_judg){
 				if(SENSOR_2)
 					move_stop(0);
 				if(SENSOR_3 < light_judg)
 					break;
 				if(FastTimer(0) > timer0_judg)
 					OnRev(OUT_A);
 			}
 			Wait(2);
 			OnFwd(OUT_A);
 		}
 		
 		else if(SENSOR_3 < light_judg){
 			Off(OUT_C);
 			OnRev(OUT_C);
 			ClearTimer(0);
 			
 			while(SENSOR_3 < light_judg){
 				if(SENSOR_2)
 					move_stop(0);
 				if(SENSOR_1 < light_judg)
 					break;
  				if(FastTimer(0) > timer0_judg)
 					OnRev(OUT_C);
 			}
 			Wait(2);
 			OnFwd(OUT_C);
 		}
 	}
 }
  }

 


*苦労した点 [#u55de425]

コースについて

-RCXの性質上、取り付けられるセンサーの上限が3つしかないうえ(付けようと思えば付けられそうだが、マイナスにしかならなそう?)、タッチセンサーも付けなくてはいけないため、光センサーの数が2個しか付けられないので、コースが複雑だとプログラムも難しくなる。

-私たちの描いたコースが複雑なため、2個しかない光センサーではプログラムで対応をさせようとしても、複雑かつそのコースに特化しすぎたプログラムになってしまった。他のコースでもあまり複雑でない限り、ライントレースができるマシンとプログラムにしたかったので、その両立ができないことがわかった。

その結果以下の修正を施すことになりました。

-コースが複雑なため、プログラムで対処するには難しいと判断し、やむなくコースを修正。修正前のコースでは、光センサーを増やさないと、そのコース専用のプログラムになってしまう。コースによって多少のプログラム修正は必要なものの、このコースの場合、かなり大きな修正が必要になってしまうため(個人的にそれは好きではない)、コース自体の修正を選択した。

-修正は魔の8の字カーブ地帯を、マシンがラインをトレースしやすいようショートU字カーブを大きなU字を描くようにした。

-しかし、修正しても交差点に対して垂直に入らず、課題通りの動作ができなかった。これ以上修正するぐらいなら、書き直した方が良いと判断して、下図の修正前から書き直し後にコースを変更した。

-------

プログラムについて


*製作日誌 [#u1068eb7]
-11/20 製作スタート・・・のはずが、タキさが休み、製作できず。とりあえずコースが完成。
-11/27 1週間遅れで製作スタート。マシンがほぼ完成。しかし、コースが思いのほか難しいことが判明。コースを修正しつつ、プログラムを制作。
-12/2 放課後に集合し、プログラムの制作を続ける。しかし、コースの一部が今回のライントレースカーの仕様では難しいところがあり、A7左グループと協議した結果、コースを書き直すことにした。(くわしいことは「苦労した点を」を参照)
-12/3 再び放課後に集合
-12/3 再び放課後に集合。書き直し後のコースが完成。とりあえず課題達成したが、スピードを追求し時間を費やす。そしてスピードUPし、コースを完走する。
-12/4 マシン発表会。発表前に最後の微調整をし、本番へ。見事成功し、喜びを噛み締める。

*皆さんのコメント [#g72ad519]
よろしければコメントをどうぞ
- テスト -- [[タキさ]] &new{2008-12-01 (月) 12:05:44};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS