2008b/A7/課題2右


ライントレースロボット

製作者:タキさ マツコ

目次


課題についての説明

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

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

製作したマシン

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

鳥瞰図 修正前マシン 側面図
tyoukanzu1.jpgsokumennzu1.jpg

鳥瞰図 修正後マシン 側面図
tyokanzu3.jpgsokumannzu3.jpg
キャスター?
kyasuta.jpg

このマシンの利点

修正前

  • 付属の本に掲載されているタッチセンサーロボットに、光センサーを適度な場所にくるように調節して取り付けるだけなので、製作が非常に簡単。
  • 光センサの位置の調整が簡単(=プログラム制作が簡単になる)。
  • シンプルな構造のため、複雑な動きはできないものの、その分動作が安定する。

修正後

  • 修正前のマシンのタイヤを大きくし、スピードUP。
  • 後部を支えるキャスターを上の画像のようなキャスター?にすることで、製作が簡単で、なおかつ動作がより安定。

コース

(全体図) 修正前コース (8の字カーブ)
zentaizu.jpg8nozi.jpg

書き換え後コース
kosu00.jpg

モータ・センサに対応する端子

モータ、センサについては以下の端子に接続してあります。

  • 出力側
    A端子 → 左モータ(正回転:前進,逆回転:後進)
    B端子 → なし
    C端子 → 右モータ(正回転:前進,逆回転:後進)
  • 入力側
    1端子 → 左光センサ
    2端子 → タッチセンサ
    3端子 → 右光センサ

プログラムの紹介

(今回のプログラムの説明に「光センサが反応したら」とあるが、これは「光センサが黒を感知したら」という意味)

/* ラインチレースプログラム */

/* 定数を定義 */
#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);
	Wait(200);       /* 2秒間停止 */
	OnFwd(TWO_MOTOR);
	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,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++;               /* nに+1 */
			if (n % 3 != 0)  /* nが3の倍数(スタート地点の目印の反応時)以外ならば */
				move_stop(50);
			else              /* nが3の倍数ならば */
				Wait(20); /* 0.2秒待機 */
		}
                  /* nが9以上(コース3周以上)になったら */
		if (n >= 9){
			Off(TWO_MOTOR); /* マシン停止 */
			break;          /* ループか抜ける */
		}
                  /* 光りセンサ(左)が反応したら */
		else if(SENSOR_1 < LIGHT_JUDG){
			Off(OUT_A);   /* 左モータを停止 */
			OnRev(OUT_A); /* 左モータを逆回転 */

                           /* 光りセンサ(左)が反応しなくなるまで */
			while(SENSOR_1 < LIGHT_JUDG){
				if(SENSOR_2) /* もしタッチセンサが反応したら */
					move_stop(0);
				if(SENSOR_3 < LIGHT_JUDG) /* もし光センサ(右)が反応したら */
					break; /* ループか抜ける */
			}
			Wait(2); /* 予備動作 */
			OnFwd(OUT_A); /* 左モータを正回転 */
		}
                  /* 光りセンサ(右)が反応したら */
		else if(SENSOR_3 < LIGHT_JUDG){
			Off(OUT_C);   /* 右モータを停止 */
			OnRev(OUT_C); /* 右モータを逆回転 */
			
                           /* 光りセンサ(左)が反応しなくなるまで */
			while(SENSOR_3 < LIGHT_JUDG){
				if(SENSOR_2) /* もしタッチセンサが反応したら */
					move_stop(0);
				if(SENSOR_1 < LIGHT_JUDG) /* もし光センサ(左)が反応したら */

					break;
			}
			Wait(2); /* 予備動作 */
			OnFwd(OUT_C); /* 右モータを正回転 */
		}
	}
 }

苦労した点

コースについて

  • RCXの性質上、取り付けられるセンサーの上限が3つしかないうえ(付けようと思えば付けられそうだが、マイナスにしかならなそう?)、タッチセンサーも付けなくてはいけないため、光センサーの数が2個しか付けられないので、コースが複雑だとプログラムも難しくなる。
  • 私たちの描いたコースが複雑なため、2個しかない光センサーではプログラムで対応をさせようとしても、複雑かつそのコースに特化しすぎたプログラムになってしまった。他のコースでもあまり複雑でない限り、ライントレースができるマシンとプログラムにしたかったので、その両立ができないことがわかった。

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

  • コースが複雑なため、プログラムで対処するには難しいと判断し、やむなくコースを修正。修正前のコースでは、光センサーを増やさないと、そのコース専用のプログラムになってしまう。コースによって多少のプログラム修正は必要なものの、このコースの場合、かなり大きな修正が必要になってしまうため(個人的にそれは好きではない)、コース自体の修正を選択した。
  • 修正は魔の8の字カーブ地帯を、マシンがラインをトレースしやすいようショートU字カーブを大きなU字を描くようにした。
  • しかし、修正しても交差点に対して垂直に入らず、課題通りの動作ができなかった。これ以上修正するぐらいなら、書き直した方が良いと判断して、下図の修正前から書き直し後にコースを変更した。

プログラムについて

  • 途中でマシンを変更してしまったので、そのための調整が難しかった。
  • 交差点を渡る際にコースアウトしてしまい、その調整が最後まで必要になり、今回の課題で最もむずかしかった。

製作日誌

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

皆さんのコメント

よろしければコメントをどうぞ

  • テスト -- タキさ? 2008-12-01 (月) 12:05:44
  • よくできています -- なかむら? 2008-12-11 (木) 15:24:22

書くべきことはきちんと書けています。

過去のホームページを参考にしてより良いレポートを目指してください。考察したり、説明をわかりやすく詳しくしたり等 FI


添付ファイル: fileaim_light3.jpg 108件 [詳細] filekosu00.jpg 264件 [詳細] filekyasuta.jpg 236件 [詳細] filetyokanzu3.jpg 259件 [詳細] filesokumannzu3.jpg 251件 [詳細] filesokumennzu1.jpg 238件 [詳細] filetyoukanzu2.jpg 131件 [詳細] filetyoukanzu1.jpg 244件 [詳細] filesokumennzu2.jpg 118件 [詳細] filesokumennzu1jpg.jpg 118件 [詳細] file081203_1523~0001.jpg 114件 [詳細] file8nozi.jpg 247件 [詳細] filezentaizu.jpg 249件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-01-23 (金) 14:55:08