**目次 [#y08cbcb4]
#contents


**ロボットの紹介 [#oa32e9f0]
 授業で組み立てたロボでは光センサーと地面との距離があると感じたので、図1の様に前方部分のブロックを外して出来るだけ光センサーが地面に近づけるようにした。この場合ではNXT本体がモーターの上についた穴に入れることができないので、図2の様にNXT本体を横向きにしブロックで囲むことで安定性を強化した。またボールを運ぶために図3の様に左右に細長いブロック(以後枠と呼ぶ)をつけた。&br;
図1&ref(./image.jpeg,50%,Mission1用ロボット);
図2&ref(./image2.jpeg,50%,Mission1用ロボット);
図3&ref(./image3.jpeg,50%,Mission1用ロボット);~

   ロボの全体図                              NXT本体の固定部分                        ロボ前方にある枠

**プログラム [#v9c4ae75]
 #define THERHOLD 42  
 task main()
 { 
 
 	int countN = 0;
	
	SetSensorLight(S3);
	OnFwd(OUT_BC,75);//スタート地点でライントレースしてしまうのを防ぐため
	Wait(300);	
  
  
 	
	while(true){//境界の値よりも低くなったら右折し、値より高くなったら左折するようにした。
	  if(SENSOR_3 < THERHOLD){
 
            OnFwd(OUT_B,40);
            Off(OUT_C);
            //左右でスピードが違うのは最後のカーブが作図の際に失敗してしまって
                         ライントレースが上手くいかなかったため、 スピードの違いを利用して
                         強引に曲がって問題を解消させるため
          
            }else{                
            OnFwd(OUT_C,30);          
            Off(OUT_B);             
            }
 
	  if(SENSOR_3 < 32){//交差点で一番低い数値が出た時を交差点とカウント
                              10番では数値が違う可能性が高いので微調整が必要	     
            countN = countN + 1;
 		
	  if(countN == 4){//ゴール地点に入った事を意味する4回目を検知するため
		
            Off(OUT_BC);//ゴールにシュートするため
   
	    }
	  }
           
        } 
   
 }


**攻略方法 [#n531d5fe]
 今回は授業で学んだライントレーサーを活用した。進行中に通った交差点をの数を検知していく。交差点の検知の方法は、交差点でのライントレースの値が通常の線の値よりも低くなるのを利用して、交差点で一番低い数値を割り出し、その値より数値を1高く(今回は32)プログラミングに書き込んで、交差点をカウントするようにした。ただこれは走行前の数値なので走行中でのロボの動きを見て調整する必要がある。直角での曲がり方だが交差点において通常のライントレースでも直角と混同せずに上手くいったのでそのままのプログラミングで実行した。ゴールにシュートを打つ方法だが、スタート地点からゴール地点まで合計で4回交差点を通る。4回目に交差点を通ればゴールの目の前のため、4回目の交差点を検知した時、ロボを止める。しかしボールは慣性が働くのでボールは前に進み、それがシュートになってゴールするという形にした。 


**今後の課題 [#qeca12e9]
 境界の数値は条件によって変わってしまうので本番までの最終調整が必要。最終調整では10番教室での境界と交差点の数値を割り出し、今までのプログラミングに書き込む。

**反省点 [#g102976c]
 まずは枠の中にボールを入れる事が出来なかったが、それは枠の間が短すぎた事とボールを取るのは半円のカーブの部分であり、ボールをロボの正面からではなく側面から取らなければならない事を考慮せずに枠の長さを長くしてしまった事が原因だと考えられる。次にボールが枠の中に出てしまったのは作ったロボはボールを取った後に光センサーの上の部分に当たってしまうためにボールが進行方向の向きに回転してしまうために、枠の外に蹴りだしてしまったのだと考えられる。これに対しては先生のアドバイスのようにロボがボールの下の部分を蹴ることでゴールまでボールを反回転させ続ける事が成功のカギでった。&br;
図3&ref(./image3.jpeg,50%,Mission1用ロボット);&br;
 ゴール地点に入った後に止まらずにライントレースを続けてしまったのは、スタートからゴールまでロボを進ませようと考えすぎてしまい、数値が32より低くなる交差点を通っていないのにライントレースを続けさせてしまい、交差点を4回検知させる事が出来なかった原因だと考えられる。そのため次の課題でははロボの組み立ての時点で一連の操作に安定性を持たせることが必要であると分かった。
 また、交差点検知において、今回我々が行った方法は交差点の一番低い値を割り出し、その値となったら交差点をカウントするというものであったが、プログラムは高速でループしているので動作中は動作前に一番低かった値であっても同じ交差点内で複数回カウントしてしまう。さらに通常の線上をライントレースしていても交差点と検知してしまうことがある。今回のやり方で成功するには交差点において一番低い数値が動作中に何回検知したかを数え、交差点内で何回以上検知したら交差点としてカウント、という風にするべきであった。
 最後にゴール地点に入った後に止まらずにライントレースを続けてしまったのは、スタートからゴールまでロボを進ませようと考えすぎてしまい、交差点の端という通常の線のとほぼ同じ数値が出てしまう場所を通っていたのにライントレースを続けさせてしまい、交差点を4回検知させる事が出来なかった原因だと考えられる。そのため次の課題ではは交差点検知の方法を変更する、ロボの組み立ての時点で一連の操作に安定性を持たせることが必要であると分かった。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS