2019a/Member 目次

課題2

下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ.

2019a-mission2.png

コース

黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには、長さ15または16のブロックおく.

ミッション

A地点を出発し、次のいずれかの経路を黒い線にそって動くロボットを作成する (他のメンバーとは別の経路になるようにする).

A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E → F → G(一時停止の後、右折) → H → I → J(右折) → K(左折) → L(ピンポン玉をつかむ) → K(直進) → M(一時停止) → シュート→ A地点に入る(ゴール)

A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(右折) → J(一時停止の後、左折) → I(直進) → H(直進) → G(左折) → F → E → D(一時停止の後、直進) → C(直進) → B(一時停止) → シュート→ A地点に入る(ゴール)

交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること.

ロボットの説明

ロボットのサイズやアームについて工夫した.

ロボットのサイズ

タイヤ間をモーター分だけにして小回りが利くようにした.

ロボサイズ

アーム

モーターで開閉でき向きを変えればシュートを打てるアームを作った.(正面)

IMG_0197.JPG

モーターで開閉でき向きを変えればシュートを打てるアームを作った.(上)

IMG_0199.JPG

プログラムの説明

defineの設定

RUN_TIMEや旋回について以下のように定義した.

#define RUN_TIME1 800
#define RUN_TIME2 500
#define RUN_TIME_GHIJ 480
#define RUN_TIME_LM 1500
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);

subルーチン の設定

交差点を判断するために黒を検知する時間をとった.まずラインとレースに支障が出ず,その後の直進や曲がるときに大きな動きにならない時間を測った.その時間より長くセンサーが黒を感知すると一秒停止するようにした.

D地点までのプログラム

sub line_trace1()  //Dの交差点で止まるまでライントレースし続けるプログラム
 { SetSensor(SENSOR_2,SENSOR_LIGHT);
 ClearTimer(0);
 while(FastTimer(0)<=RUN_TIME1){
     if(40<SENSOR_2){
        OnFwd(OUT_A);Off(OUT_C);ClearTimer(0);
     }else if(35<SENSOR_2<40){
        Off(OUT_A);OnFwd(OUT_C);
     }else{
        OnRev(OUT_A);OnFwd(OUT_C);
      }
   }
  Off(OUT_AC);Wait(100);
}

DからGまでのラインとレースのプログラム

sub line_trace2()  //DからG(交差点)までライントレースするプログラム
 { SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);
  while(FastTimer(0)<=RUN_TIME2){
     if(40<SENSOR_2){
        OnFwd(OUT_A);Off(OUT_C);ClearTimer(0);
     }else if(35<SENSOR_2<40){
        Off(OUT_A);OnFwd(OUT_C);
     }else{
        OnRev(OUT_A);OnFwd(OUT_C);
      }
   }
  Off(OUT_AC);Wait(100);
}

GHI間のラインとレースするプログラム

sub line_trace_GHIJ()  //GHIJ間のライントレース(内側)
  {SetSensor(SENSOR_2,SENSOR_LIGHT);
   ClearTimer(0);
       while(FastTimer(0)<=RUN_TIME_GHIJ){
         if(40<SENSOR_2){
            OnFwd(OUT_A);Off(OUT_C);
         }else if(35<SENSOR_2<40){
            Off(OUT_A);OnFwd(OUT_C);
         }else{
            OnRev(OUT_A);OnFwd(OUT_C);
           }
  }
      Off(OUT_AC);Wait(100);
}

LM間のラインとレースするプログラム

sub line_trace_LM()  //LM間のライントレース
  {SetSensor(SENSOR_2,SENSOR_LIGHT);
   ClearTimer(0);
       while(FastTimer(0)<=RUN_TIME_LM){
         if(40<SENSOR_2){
            OnFwd(OUT_A);Off(OUT_C);
         }else if(35<SENSOR_2<40){
            Off(OUT_A);OnFwd(OUT_C);
         }else{
            OnRev(OUT_A);OnFwd(OUT_C);
           }
  }
}

全体のプログラム

task main(){
 OnFwd(OUT_AC);Wait(100);//Aからライン上(外側)まで動かす
 line_trace1();//D地点の交差点までライントレース
 turn_right;Wait(45);OnFwd(OUT_AC);Wait(15);
          //停止後、右に旋回して位置調整し、少し前に進んで次のライントレースに備える
 line_trace2();//DEFGのライントレース
 turn_right;Wait(45);OnFwd(OUT_AC);Wait(25);//内側をライントレースするために位置調整
 line_trace_GHIJ();//
 turn_right;Wait(100);OnFwd(OUT_AC);Wait(15);
                                 //J点で右に90度旋回し、まっすぐ進んで黒線を超える
 line_trace2();//交差点用ライントレース
 OnFwd(OUT_AC);Wait(15);//外側を通りたいので、少しまっすぐ動く
 turn_left;Wait(70);OnFwd(OUT_AC);Wait(100);
                            //左に旋回しKLのセント車体を平行に、その 後L地点まで移動
 OnFwd(OUT_B);Wait(15);//バンパーを閉じ、たまをキャッチ
 turn_right;Wait(200);//180度旋回
 line_trace_LM();//
 turn_right(15);Off(OUT_AC);//車体を真っ直ぐにし、停止
 OnRev(OUT_B);Wait(15);//バンパーを開く
 OnRev(OUT_AC);Wait(300);//車体を後ろに下げる
 OnFwd(OUT_B);Wait(15);//バンパーを閉じる
 OnFwd(OUT_AC);Wait(300);//直進してたまをシュートする
}

まとめ

今回の課題では交差点の判断をうまくしてくれなかったり,直角や急カーブをうまく曲がり切れなかったりして難しかった.最後は成功したがなぜ失敗するか考えるのが難しかった.ロボットやプログラムの改良をもっとスムーズにできるようにしたい.


添付ファイル: file2019a-mission2.png 126件 [詳細] fileIMG_0198.JPG 133件 [詳細] fileIMG_0197.JPG 159件 [詳細] fileIMG_0199.JPG 200件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 11:27:09