[[2019a/Member]]
目次
#contents
*課題2 [#x8ff2dc5]
下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ.
#ref(2019a/Member/Matsui/Mission2/2019a-mission2.png)
**コース [#n7213d58]
黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには、長さ15または16のブロックおく。
黒線の幅は20mmでなるべく均等な濃さにすること。 ゴールには、長さ15または16のブロックおく.
**ミッション [#je2585f0]
A地点を出発し、次のいずれかの経路を黒い線にそって動くロボットを作成する (他のメンバーとは別の経路になるようにする)。
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秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること.
*ロボットの説明 [#r75924e2]
ロボットのサイズやアームについて工夫した.
**ロボットのサイズ [#udb43620]
タイヤ間をモーター分だけにして小回りが利くようにした.
#ref(2019a/Member/Matsui/Mission2/IMG_0198.JPG,ロボサイズ)
**アーム [#y5e1e00c]
モーターで開閉でき向きを変えればシュートを打てるアームを作った.(正面)
#ref(2019a/Member/Matsui/Mission2/IMG_0197.JPG)
モーターで開閉でき向きを変えればシュートを打てるアームを作った.(上)
#ref(2019a/Member/Matsui/Mission2/IMG_0199.JPG)
*プログラムの説明 [#fe750778]
**defineの設定 [#ff20c1c3]
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ルーチン の設定[#cdf814a1]
交差点を判断するために黒を検知する時間をとった.まずラインとレースに支障が出ず,その後の直進や曲がるときに大きな動きにならない時間を測った.その時間より長くセンサーが黒を感知すると一秒停止するようにした.

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

**全体のプログラム [#uca48c5d]
 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);//直進してたまをシュートする
 }
*まとめ [#n703b220]
今回の課題では交差点の判断をうまくしてくれなかったり,直角や急カーブをうまく曲がり切れなかったりして難しかった.最後は成功したがなぜ失敗するか考えるのが難しかった.ロボットやプログラムの改良をもっとスムーズにできるようにしたい.


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