2010b

メンバー

  • 仁野
  • 伊吹

課題

  • コース上を走る相手のロボットを見つけ、そのロボットを5秒追尾し指定されたホイールを相手のロボットめがけて投げる。
  • 車輪を動かすためにはモーターをひとつしか使えない。
  • ライントレースには光センサーをひとつしか使えない。
  • ホイールは2以上投げる。

コース

課題2に使ったコースを使います。

ロボット

全体像

4.jpg3.jpg

発射装置

5.jpg

レール上に押し出されたブロックは、レールを転がっていき高速で回り続けるタイヤの回転に巻き込まれ加速し、発射される。バーで打ち出す方法より優れている点はブロックが高速で発射され飛距離が長いこと。悪い点は、装置が大がかりになってブロックを消費しすぎ車体が重くなること。ブロックを装填する方法が、打ち出す方式ならば位置エネルギーを使えば簡単にできるが、回転するタイヤでは、静止しているブロックをタイヤに巻き込ませてもスピードが足りずにブロックがとまってしまう。そのためレール上を転がらせる必要があったので、レール上にブロックを押し出す方式を使わないといけなくなりとにかく面倒くさい。

装填装置

6.jpg

ラックギヤが写真左に動きブロックをレールに押し出す。最初はレールの上のほうにブロックを待機させておいて、上下するバーでブロックを1つずつ転がせようとしたが、ブロックが思ったより速く動きだしてしまい1度に2,3個同時に転がってしまった。押し出したブロックを上手くレール上に入れるのも大変で、レールに入る角度がきつくて詰まってしまったりしたので、台形のブロックで斜めの壁を作り、その壁を滑ってレールに入るようにした。

ディファレンシャルギヤ

7.jpg

今回はロボットが進むのに使えるモーターが一つに限られているのでディファレンシャルギヤを使用した。左右のタイヤにバーのブロックのストッパーがつけられており、それぞれ後ろに回転することのないようになっている。その結果左右いづれかの回転しかできず、前進するときはそれらを交互に繰り返すことによってジグザグに進む。

プログラム

ライントレースするプログラム

#define THRESHOLD 50
#define turn_left(t) OnFwd(OUT_A);Wait(t);Off(OUT_A);
#define turn_light(t) OnRev(OUT_A);Wait(t);Off(OUT_A);
#define RUN_TIME 75

task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);  
	ClearTimer(0);                       //タイマー0をリセットする

	While(ture){
	if(SENSOR_1<THRESHOLD){              //黒色の上にいるときは
	turn_left(3); }                        白色の方にすすむ
	else_if(SENSOR_1<THRESHOLD){         //白色の上にいるときは
	turn_light(3);}                        黒色の方にすすむ

	}
	off(OUT_A);
}

追尾するプログラム(仁野)

#define TURN_TIME 150

sub shot()                  //ブロックを発射するプログラム        
{
   OnFwd(OUT_C); Wait(50);
   OnFwd(OUT_B);Wait(100);
  
   Off(OUT_C+OUT_B);

}


task main()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー1が光センサー
   
   ClearTimer(0);                     //タイマーをリセット  
 
  int LM = 0;                         //光の明るさを変数でおく

  while(Timer(0)<=TURN_TIME)          //時間になるまで繰り返す 
     {
      OnFwd(OUT_A);
        if (SENSOR_2>LM)              //光の最大値を測る
           { LM = SENSOR_2;}
     }

  OnFwd(OUT_A);
     until(SENSOR_2 == LM);

  ClearTimer(1);                      //タイマーをリセット

  while(Timer(1)<=50)                 //時間になるまで繰り返す         
    {
     OnFwd(OUT_A);                    //前進
     Wait(030);                       
     OnRev(OUT_A);
     Wait(030);
    }
 
       shot()                        //ブロックを発射する

   }

追尾しないプログラム(伊吹)

#define turn_left(t) OnFwd(OUT_A);Wait(t);Off(OUT_A); //左に回る

sub shot()
{                                                  //ブロックを発射するプログラム
	OnFwd(OUT_C);Wait(50);                      //ボールを押し出す              
	OnFwd(OUT_B);Wait(100);                     //車輪を回転させる
	Off(OUT_C+OUT_B);
}
task main()
{
	SetSensor(SENSOR_1,SENSOR_LIGHT);           //センサー1が光センサー
	int light_max=0;                            //光の明るさを変数でおく
	if(SENSOR_1>light_max){                     //光の最大値を測る
	light_max=SENSOR_1;

	turn_left(380)                              //回転する
	
	OnFwd(OUT_A);
	until(SENSOR_1>=light_max);                 //光がもっとも明るくなるところまで回転する
	Off(OUT_A);

	shot();                                     //ブロックを発射する
}

感想・反省

仁野

玉を一つずつ装填するのもプログラムも大変だったけど、ディファレンシャルギアを使って走らすのが得に大変だった。最初、車体が重いせいもあってギアがうまくかみ合わず、ギア比を調節したり苦労した。

伊吹

一番大変なのはディファレンシャルギアだった。と思います。でも、ディファレンシャルギアと発射する装置は隣の人がやってくれたから僕は比較的ラクなとこだけですみました。それでも装填するやつは後付けな感じだったので、できうるかぎりコンパクトにしなければならず、そのうえ耐久性も兼ね備えたものにするのは結構大変だった。でも苦労の末に出来上がったロボはとても愛着がわいていて、ブロックを発射するのなんかもー実に快感で、ちょっといい思い出だったりする。

コメント

  • 書くべき点を簡潔にまとめていると思います。ロボットがどういう動きをするかという説明だけではなく、どのような意図でその動きをさせるのかという点まで踏み込んだ説明があるとより良いレポートになると思います。 -- FI? 2011-02-08 (火) 01:13:37
  • 苦労した点、課題について詳しく述べられているとさらに良いと思います。 -- TAKA? 2011-02-08 (火) 13:22:55


添付ファイル: file7.jpg 173件 [詳細] file6.jpg 184件 [詳細] file5.jpg 199件 [詳細] file4.jpg 187件 [詳細] file3.jpg 209件 [詳細] file110121_1633~020001.jpg 102件 [詳細] file110121_1633~010002.jpg 113件 [詳細] file2.jpg 101件 [詳細] file1.jpg 93件 [詳細] filecouse.jpg 85件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-02-08 (火) 15:08:10 (2867d)