2016a/Member

1.目次

2.はじめに

  今回の課題は、ライントレースです。下図の黒線に沿ってロボットを動かします。

コース

  私はC地点からA地点へ移動するプログラムを作成したので、

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

  のルートを通ります。

3.本体の説明

  本体は比較的シンプルなものにしました。光センサーをなるべく本体・地面に近くなるようにしています。

本体1
本体2

  本体を引きずらないように、裏面は写真のように滑りやすくしました。(黒い円形のパーツです。)

本体3

4.プログラム

 …蟲訴

  光センサーの境界は4つ設けました。nMAXは交差点判定時に、TURN_TIMEW90・180は交差点を渡るときに使用します。

  右(左)旋回は、右(左)回転よりも急に曲がります。

#define BLACK 35                //境界顱35以下は黒
#define B_GLAY 38                //境界髻35〜38の間は黒寄りの灰色
#define W_GLAY 42                             //境界鵝42〜45の間は白寄りの灰色
#define WHITE 45                              //境界堯45以上は白
#define go_forward OnFwd(OUT_AC);             //前進
#define turn_right1 OnFwd(OUT_A);OnRev(OUT_C);//右旋回(右回転よりも急に曲がる)
#define turn_right2 OnFwd(OUT_A);             //右回転
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A); //左旋回(左回転よりも急に曲がる)
#define turn_left2 OnFwd(OUT_C);              //左回転
#define nMAX 5                                //nが5以上で交差点と判定
#define STEP 1                                //小休憩(次のプログラムへ移行への準備)
#define TURN_TIME90 50                        //90度曲がる場合の回転時間
#define TURN_TIME180 80                       //180度曲がる場合の回転時間

 ▲薀ぅ鵐肇譟璽后淵汽屮襦璽船鵝

  基本はラインの左側をトレースします。

  交差点は、続けて黒になる回数が何回続くかによって判断する方法を採択しました。

  「nOnBLACK」は何回連続で光センサーの値が35以下(黒と判定した時)になったかを示す値です。光センサーの値が35以下のときにカウントを増やし、「nMAX」(定義文よりnが5)になったとき交差点と判断して音を鳴らします。

  「X」は交差点と判断したときにライントレースを止めさせるための値です。交差点と判断したとき(上記)にカウントを1つ増やし、whileの括弧内が成り立たないようになるようにしました。

sub line_trace()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   int nOnBLACK=0;                         //nOnBLACKを定義する(上記)
   int X=0;                                //Xを定義する(上記)

   while(X == 0){                          //Xが0の間以下の動きを繰り返す
     while(nOnBLACK < nMAX){
     if (SENSOR_2 < BLACK) {               //黒のとき、左旋回
       turn_left1;
       nOnBLACK++;                         //OnBLACKのカウントを1増やす
       } else {
       if (SENSOR_2 < B_GLAY) {            //黒寄りの灰色のとき、左回転
         turn_left2;
       } else if (SENSOR_2 < W_GLAY) {     //黒寄りの灰色と白寄りの灰色の間のとき、前進
         go_forward;
       } else if (SENSOR_2 < WHITE) {      //白寄りの灰色のとき、右回転
         turn_right2;
       } else if (SENSOR_2 > WHITE) {      //白のとき、右旋回
         turn_right1;
       }
       nOnBLACK=0;                         //OnBLACKのカウントをリセットする
     }
     Wait(STEP);                           //小休憩
   }
   Off(OUT_AC);
   Wait(100);
   PlaySound(SOUND_FAST_UP);               //音を鳴らす
   Wait(300);
   nOnBLACK=0;                             //OnBLACKのカウントをリセットする
   X++;                                    //Xのカウントを1増やす
  }
  X=0;                                     //Xのカウントをリセットする
}

 8鮑硬世鮑言沺淵汽屮襦璽船鵝

  交差点と判定したときのロボットの位置にはばらつきがあるので、白になるまで回転させ、交差点に対するロボットの向いている角度を固定します。

  左折の場合は、回転させた後小休憩をはさみそのまま再度ライントレースを開始します。

sub turn_left()
{
   while(SENSOR_2 < WHITE){   //光センサーが白と判定するまで左回転
   turn_left1;
   }
   Wait(STEP);          //小休憩
}

 じ鮑硬世鯆梢福淵汽屮襦璽船鵝

  左折の場合と同様に白になるまで右回転させます。

  その後90度その場で回転させ、前進してラインを超えます。

sub advance()
{
   while(SENSOR_2 < WHITE){      //光センサーが白と判定するまで左回転
   turn_left1;
   }
   Wait(STEP);                   //小休憩
   turn_right1;                  //90度曲がる
   Wait(TURN_TIME90);
   go_forward;                   //ライン上を通過
   Wait(20);
}

 ジ鮑硬世魃折(サブルーチン)

  左折の場合と同様に白になるまで右回転させます。

  その後180度その場で回転させ、前進してラインを超え、再びライントレースを開始します。

sub turn_right()
{
   while(SENSOR_2 < WHITE){      //光センサーが白と判定するまで左回転
   turn_left1;
   }
   Wait(STEP);                   //小休憩
   turn_right1;                  //180度曲がる
   Wait(TURN_TIME180);
   go_forward;                   //ライン上を通過
   Wait(20);
}

 Ε魁璽垢鳳茲辰謄薀ぅ鵐肇譟璽

  2.はじめに で記述したように

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

  のルートを進みます。最後の直進はA地点の枠の中に入るためのものです。

task main()
{
   line_trace();    
   turn_left();
   line_trace();
   turn_left();
   line_trace();
   advance();
   line_trace();
   advance();
   line_trace();
   turn_right();
   line_trace();
   turn_left();
   line_trace();
   advance();
   go_forward(OUT_AC);
   Wait(100);
   Off(OUT_AC);
}

5.結果と感想

  スタートからゴールまでにかかった時間は1分10秒でした。

  まれに途中でコースを見失うことがありましたが、その場合以外は概ね良好に動かす事がでました。

  前回の似顔絵は完成させることが出来ませんでしたが、今回は比較的余裕をもって完成させることが出来たので良かったと思います。


添付ファイル: fileS_4574108066090.jpg 100件 [詳細] file2016a-mission2.png 119件 [詳細] fileS_4573649592503.jpg 91件 [詳細] fileImage_514cd12.jpg 104件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-04 (木) 18:00:03 (1114d)