[[2011a]]

目次
#contents
*今回の課題 [#b4ba7f13]
画用紙の上に置かれているテニスボールをランタンの元へ送る(手段は問わない)
*MEMBER [#ffff6220]
-ばるす!
-TOKIO
*ROBOTTO [#sfccc0c9]
-お名前
デリケート
 デリケートなやつなんです
-特徴


・ ボールを打ち出す機能としてはブロックで作った壁(太い棒?)で押しだすことにした。しかし、タッチセンサーや、ランタンを探すための光センサーの邪魔をしないような構造になっている。

アームが上がる前。

#ref(sugata.jpg)

アームが上がった後。

#ref(ude.jpg)

この写真は、わかりやすいようにセンサーなどは外してあります。




・ ボールがタッチセンサーにしっかりと当たるように、ボールをセンサーへ誘導するためのサイドアームも、ボールを打ち出したときに連動するようになっている。また、タッチセンサーはより敏感に反応してもらうために、むき出しで使った。


・ 3つのそれぞれのセンサーを一か所にかためることにより、コンパクトなデザインのロボットに仕上がった。これにより、小回りのきくロボットになった。ただ、センサー部分がとても脆いことが最後まで課題だった(よほどの衝撃がなければ大丈夫)。

-お姿
#ref(sugata.jpg)
-腕が上がったところ
#ref(ude.jpg)
#ref(d.jpg)
-タッチセンサー部分

 緑のブロックがセンサー部分に当たることによって、反応するようになっている。
#ref(c.jpg)
-目(センサー)
#ref(sensor.jpg)

光を集めやすいようにセンサーの回りを囲った。
#ref(b.jpg)
*PROGRAMs [#o56ec15f]
-ばるす!

 #define THRESHOLD 45                                   // 閾値
 #define go OnFwd(OUT_A+OUT_C);                           //前進
 #define right OnFwd(OUT_A);Off(OUT_C);                   //右折
 #define left OnFwd(OUT_C);Off(OUT_A);                    //左折
 #define STOP Off(OUT_A+OUT_C);                          //止まる
 #define throught OnRev(OUT_B);Wait(100);Off(OUT_B);  //ボール投げる
 int T = 400 ;
 int lmax = 0 ;
 int tmax = 0 ;


 task main()                       //ラインをトレースするタスク
 {repeat(3){
 while(SENSOR_2 == 0 )
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT);                        // ライントレースのセンサー
 SetSensor(SENSOR_2,SENSOR_TOUCH);                        // タッチセンサー
 SetSensor(SENSOR_3,SENSOR_LIGHT);                        // ランタンを探すセンサー
 if(SENSOR_1<45){right;}
 else{left;}
 }
 STOP;
 PlaySound(SOUND_CLICK) ;        // ピッ
 
 ClearTimer(0);
 while(FastTimer(0)<T)
 {
 OnFwd(OUT_A);OnRev(OUT_C);
 if( SENSOR_3 > lmax )
 { lmax=SENSOR_3;tmax = FastTimer(0) ; }}
 STOP;
 OnFwd(OUT_C);OnRev(OUT_A);Wait(T - tmax );
 STOP;
 throught;
 OnFwd(OUT_A);OnRev(OUT_C);
 Wait(tmax); 
 }}


プログラムはこの上なくシンプルになったがシンプルすぎて複雑なコースに適応できてない気がする…が、一応一度だけ成功したからこのままで完成とする。せめてライントレース用にもう一つ光センサーがあればなぁ…

-TOKIO

 #define GO OnFwd(OUT_A+OUT_C);
 #define BACK OnRev(OUT_A+OUT_C);
 #define Tright OnFwd(OUT_A);OnRev(OUT_C); 
 #define Tleft OnFwd(OUT_C);OnRev(OUT_A);
 #define STOP Off(OUT_A+OUT_C);
 #define XX 60                            //目標となるランタンの光の閾値

 task main ()
 {
 SetSensor(SENSOR_2, SENSOR_TOUCH);  //タッチセンサー
 SetSensor(SENSOR_1,SENSOR_LIGHT);   //ライントレースする方
 SetSensor(SENSOR_3,SENSOR_LIGHT);  //目標を探す方
 repeat(3){                         //ボールの数だけ繰り返す
 while ( SENSOR_2 == 0 )           //ボールを発見するまで(しない間)
 {
 if (SENSOR_1 < 40)               //ライントレースをしながら進む
 {OnFwd(OUT_A);Off(OUT_C);}
 else 
 {Off(OUT_A);OnFwd(OUT_C);}
                  }
           
 STOP;
 
 int T = 450 ;                      //1周する時間
 int lmax = 0;                      //光の最大値の初期値
 int tmax = 0;                      //ランタンの方向を向くまでのまでの時間

 ClearTimer(0);
 while(FastTimer(0)<T)
 {Tright;if(SENSOR_3>lmax){lmax=SENSOR_3;tmax=FastTimer(0);}}  //光の最大値を探す
 
 STOP;Tleft;Wait(T-tmax);STOP;                               //光の方を向く


 int time= 0;
 ClearTimer(0);
 GO;until(SENSOR_3>XX);time=FastTimer(0);STOP;BACK;Wait(time);STOP;        //ランタンまでボールを押して、戻ってくる
 
 Tright;Wait(T-tmax);STOP;                               //向きを元に戻す
 
 GO;                                                    //再出発
 }
 STOP;}

○プログラミングなどを終えて(感想)

・初めは、ランタンを探す動作とボールを運ぶ動作をそれぞれ定義してプログラムを組もうとしたが、個人的に少し分かりにくかったので、ランタンを探してからボールを運ぶまでの一連の流れをリピートすることにした。
・初めは、ランタンを探す動作とボールを運ぶ動作をそれぞれ定義してプログラムを組もうとしたが個人的に、少し分かりにくかったので、ランタンを探してからボールを運ぶまでの一連の流れをリピートすることにした。

・ロボットがボールを押すとき、ボールが衝撃で綺麗に押せないのでそれを考慮して、ランタンの前ではちょっと早めに引き返すようにした。

・ランタンの前で止まるとき、どうするか迷ったが、閾値を与えることにより、ランタンに近寄ったら止まる方法にした。


*ゆっくり書き込んでいってね!!! [#z330cc96]

- あとはまかせた! -- [[ばるす!]] &new{2011-07-09 (土) 10:45:40};
- ごめん、特徴のとこ書き換えたw -- [[TOKIO]]

#comment



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