#contents

*課題の内容 [#id2761c6]

相手のロボットに向かってブロックを投げるロボットを製作せよ。

**ルール [#g2606a81]

 ・一つのロボットで、ライントレースをする、ライントレースをするロボットにブロックを投げる、ライントレースをするロボットを追尾した後ブロックを投げる、以上の3種類のプログラムを作る。
 ・タイヤを動かすためのモーターは一つのみ。

*メンバー [#fcadf1f1]

 ・ヒカル
 ・竹園

*ロボットについて [#id2145ce]

**本体 [#o15b0364]

今回の課題ではギア一つで進む作りにしなくてはいけなかったので、少し複雑な作りになりました。そのおかげで、ホイールを投げる動作を簡単にできるようになりました。しかし、その代わりに馬力が少なくなったのでロボット反対の重さをできるだけ均等にしなければ、重さに負けてギアがずれてしまうのでできるだけ軽いシューターを作りました。シューターの部分はバッティングセンターのトスバッティングの機械をモデルにした作りにしました。そのおかげで真っすぐに遠くまで飛び、次弾を装填するプログラムも作る必要はありませんでした。

#ref(201101211823001.jpg)

**工夫点・苦労した点[#l981f87f]

このロボットで工夫した点は、一つのギアでいかにスムーズに進めるか考えて作りました。しかし、ロボット自身の重さでギアの位置がずれてきてしまうので、ゴムを使ってギアの位置を固定して安定した走りをできるようにしました。
次に工夫した点は自動的に次弾を装填できるようにしたところです。これによりプログラムの量を少なくすることができました。
最後の工夫は発射台の設置です。これにより、ホイールの飛距離を伸ばすことが可能になりました。

#ref(201101211825000.jpg)

#ref(12345.jpg)

*コースの紹介 [#wead8338]
~・課題2で使用したものと同じです。
#ref(20110108133531.jpg)

*プログラム [#md91cc51]

**ヒカル(追尾なし) [#l02ae0d1]

 int light_max; 
 int t_max;
 int x;
 
 #define TURN_TIME 50	// トレースする時間(単位 1/10 秒)
 #define SHOT OnFwd(OUT_C);Wait(30);Off(OUT_C);OnRev(OUT_C);Wait(30);Off(OUT_C);
 
 task main ()
 {
 	SetSensor(SENSOR_1, SENSOR_LIGHT);
 
 	ClearTimer(0);                    // Timer(0) をリセット
 	light_max = 0;			  // light_max初期化
 	x = 4;
 
 	while(x >= 1){
 		while ( Timer(0) <= TURN_TIME ) {  // タイマー0がTURN_TIME以下の時に繰り返す
 			OnFwd(OUT_A);
 			if (SENSOR_1 < light_max) {   
 				light_max = SENSOR_1;
 				t_max = Timer(0);
         		}
 		}
 		ClearTimer(0);
 		while ( Timer(0) <= t_max) { 
 			OnFwd(OUT_A);
 		}
 		Wait(30);
 		SHOT; //弾を発射する
 		x--;  //残りの弾数に合わせる
 	}
 }

**竹園(追尾あり) [#k3c54d6a]
~
 #define TURN_TIME 200          //一周する時間
 
 sub go_straight()          //前進する
 {
    OnFwd(OUT_A);
    Wait(030);
    OnRev(OUT_A);
    Wait(030);
 }
 
 sub fire()          //弾発射
 {
    OnFwd(OUT_C);
    Wait(020);
    OnRev(OUT_C);
    Wait(020);
    Float(OUT_C);
    Wait(060);
 }
 
 task main()
 {
    SetSensor(SENSOR_1,SENSOR_LIGHT);          //センサ1は光センサ
 
    int light_max = 0;          //光の最大値を記録する変数
 
    ClearTimer(0);          //タイマー(0)をリセット
 
    while(Timer(0)<=TURN_TIME)          //一周するまで
    {
       OnFwd(OUT_A);          //右に回る
       if(SENSOR_1>light_max)          //センサ1の値が光の最大値より明るいとき
       {
          light_max = SENSOR_1;          //センサ1の値を光の最大値に更新する
       }
     }
 
    OnFwd(OUT_A);          //右に回る
    until(SENSOR_1 == light_max);          //センサ1の値が光の最大値になるまで
    repeat(9)
    {
       go_straight();          //前進する
    }
    Float(OUT_A);          //止まる
    repeat(2)
    {
       fire();          //弾発射
    }
 }
*感想 [#h3157b89]

**ヒカル [#x0ef6e56]

今回のプログラムは今までとは違い、ギア一つで動いているので前進の仕方も変わってくるので少し勝手が違いました。今回のプログラムでは変数を多く使っているので、できるだけわかりやすくするように心がけました。そのため、できるだけ行数を少なくしました。最低限の動きできちんと作動するようにするには少し考えさせられましたが、結果的にはうまく作動するようになりました。これは、今までの経験をうまく生かすことができたおかげだと思います。次はロボコンなので悔いのないように自分が学んできたことを生かし、きちんとした結果を出したいと思います。

**竹園 [#c4f5d4fc]

今回のプログラミングはわりと簡潔にまとまっていてよかったです。ただロボットの製作はディファレンシャルギアを作っただけでした。このあとはロボコンで終わりなので、授業で得た知識・技術の集大成にできるように頑張ろうと思います。

*コメント [#c39788d3]

意見・感想等がありましたらご自由にお書きください
#comment

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