2016a/Member

目次

課題

【課題のコース】

課題のコース

今回の課題は指定されたコースをライントレースするロボットをつくること。ただし、交差点では一秒停止し、音を鳴らす。

B地点からC地点へ

B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点

ロボットの構造

【ロボットの側面】

ロボットの側面

【ロボットの前面】

ロボットの前面

【ロボットの後ろ】

ロボットの後ろ

ロボット本体の構造は課題1と大きく変わらないが、ロボット前面に光センサ(青い四角いもの)を取り付け、ライントレースができるようにした。

プログラム

【プログラムの定義】

#define turn_right1 OnRev(OUT_C);OnFwd(OUT_A);  //右旋回
#define turn_left1 OnRev(OUT_A);OnFwd(OUT_C);  //左旋回
#define turn_right2 OnFwd(OUT_A);Off(OUT_C);    //右折
#define turn_left2 OnFwd(OUT_C);Off(OUT_A);     //左折
#define go OnFwd(OUT_AC); //前進
#define TMAX 

TMAX(t)…連続して黒になってもライントレースを続ける時間の最大値。tを変えることで時間を指定できる。

Off…停止

Wait(t)…t秒間経過するまで、次のプログラムに移行しない

【道のりごとの手順】

.薀ぅ鵐肇譟璽后淵泪献奪で書かれた黒いコースの線上を移動すること)

task main()
{
       int t;     
       t = 0;

交差点を通った回数を調べるために変数tを使用した

t=t+1とプログラムすることで、交差点を通るたびにカウントを1増やす(下に記載)

       SetSensor(SENSOR_2, SENSOR_LIGHT);
       while(t <= 7)
       {
       ClearTimer(0);
       while(FastTimer(0) < TMAX)
           {
            if(SENSOR_2 > 54){       
               turn_right1;ClearTimer(0);
              } 
              else if (SENSOR_2 < 42){
               turn_left1;
            } else if (SENSOR_2 > 50){ 
               turn_right2;ClearTimer(0);                                  
            } else if (SENSOR_2 < 44){ 
               turn_left2;ClearTimer(0);
            } else { 
               go;ClearTimer(0);
              }
            }

while(t=○)…○の間、条件に従ってプログラムを繰り返す。

ClearTimer…ロボットに内蔵されたタイマーをリセットする。

if…ロボットが次に何をするかを判断するために必要な条件を指定できる。

else if …ifで指定した条件以外で、さらに条件を追加したい場合に使用する。

SENSOR2>50…光センサー2の値が50を超えた場合、条件に従って動作する。

■韻通椶慮鮑硬澄Rを右折)

                           t =  t+1;
                    if(t == 1){
                         PlaySound(SOUND_UP);
                         Off(OUT_AC);
                         Wait(100);            
                         turn_right2;
                         Wait(150);                                  
                         Off(OUT_AC);
                         Wait(100);

PlaySound(SOUND_UP)…音を鳴らす PlaySound(SOUND_DOWN)…音を鳴らす

2つ目の交差点(Qを直進)

                   } else if(t == 2){
                         PlaySound(SOUND_UP);
                         turn_left1;
                         Wait(100);
                   } else if(t == 3){
                         PlaySound(SOUND_UP);
                         Off(OUT_AC);
                         Wait(100);
                         go;
                         Wait(30);
                         Off(OUT_AC);
                         Wait(100);

ぃ海通椶慮鮑硬澄Qを直進)

                   } else if(t == 4){
                         PlaySound(SOUND_UP);
                         Off(OUT_AC);
                         Wait(100);
                         go;
                         Wait(30);
                         Off(OUT_AC);
                         Wait(100);

ィ瓦通椶慮鮑硬澄Pを右折)

                    } else if(t == 5){
                         PlaySound(SOUND_UP);
                         Off(OUT_AC);
                         Wait(100);
                         turn_right2;
                         Wait(100);
                         Off(OUT_AC);
                         Wait(100);

Γ気通椶慮鮑硬澄Sを右折)

                    } else if(t == 6){
                         PlaySound(SOUND_UP);
                         Off(OUT_AC);
                         Wait(100);
                         turn_right2;
                         Wait(100);
                         Off(OUT_AC);
                         Wait(100);

Ш埜

                    } else if(t==7){
                           PlaySound(SOUND_DOWN);
                           Off(OUT_AC);
                       }
             Off(OUT_AC);
       }
}

結果

百発百中でゴールにたどり着くわけではないが、課題通りに動かすことができた。

ゴールにたどり着くまでの時間は45秒だった。

問題点1

サブルーチン、その他のプログラミングの意味や使い方をよく理解していない。

【対策】

カウンターを利用した。しかし、まだ理解しきれていないので、次の課題を終えるまでに意味を覚えたい。

問題点2

コースの明るさがバラバラなのか光センサーが安定しない時がある。

【対策】

ところどころ色を塗り、光センサーの位置を変えることで対処した。それでも、完全に対処できたわけではないので、繰り返し調整することで対応した。

交差点の判断

交差点は次の手順で判別した。

TMAX(上に記載)を使用し、光センサーが連続で黒になった時間に制限を付けることで交差点かどうかを区別する。

[1]黒になった時間が最大値20以上の時

そこは交差点と判断して、別の動作へと切り替える。

[2]黒になった時間が20以下の時に白を計測した時

交差点ではなかった場合 プログラムに従って、ライントレースを続けて行う。

8鮑硬世犯獣任靴燭△箸瞭虻遒鮖慊

カウンターを利用することで、それぞれの交差点にたどり着いたあとの行動を指定した。

交差点を判断して、その場で右折しようとすると、右折後にラインを見失い、ライントレースができないことがあるので、判断後に1度交差点を通り過ぎ、その後に旋回することで、交差点を曲がれるようにした。

と獣埜紊老彗値をリセットし、次の交差点を探す

感想及び反省

今回の課題はプログラミングを重視したものであり、調整やプログラムが非常に難しく感じた。最初はサブルーチンを使用したプログラムを考えていたが、ロボットが思うように動作せず、カウンターを使用することにした。最終的に目的地にたどり着くことはできたが、正確さ・スピードを考えるとまだまだ改良できただろう。今回は時間の都合上、改良することはできなかったが、次は早く課題をクリアし、よりよくできるようにしたい。


添付ファイル: fileimage2 (1).JPG 166件 [詳細] fileimage3 (1).JPG 164件 [詳細] fileimage1 (1).JPG 175件 [詳細] fileimage1.JPG 84件 [詳細] file2016a-mission2.png 161件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-07-24 (日) 22:26:50