2011a

目次

今回の課題

画用紙の上に置かれているテニスボールをランタンの元へ送る(手段は問わない)

MEMBER

ROBOTTO

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

アームが上がる前。

sugata.jpg

アームが上がった後。

ude.jpg

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

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

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

 緑のブロックがセンサー部分に当たることによって、反応するようになっている。

c.jpg

光を集めやすいようにセンサーの回りを囲った。

b.jpg

PROGRAMs

#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){                                             //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);                                             //ここまで探すプログラム
}                                   //はじめに戻る(3回)
STOP;                              //終わり
}

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

#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;}

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

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

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

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

ゆっくり書き込んでいってね!!!



添付ファイル: filed.jpg 263件 [詳細] fileb.jpg 273件 [詳細] filec.jpg 266件 [詳細] filemitame.jpg 146件 [詳細] filesensor.jpg 154件 [詳細] fileude.jpg 275件 [詳細] filesugata.jpg 258件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-22 (金) 16:21:39