#contents
*課題について [#b8e3bfb0]
#ref(2017a-mission2.png)
今回の課題は図のようなコースを下の2つの経路のうちどちらかを選択しその経路を辿っていくというものであった。自分はE地点直進コースを選択した。
**E地点直進コース [#o4765664]

◦Aスタート

◦E直進

◦F(SOUND_UP)

◦Q一時停止(SOUND_DOWN)&左折

◦R直進(SOUND_UP)

◦S左折(SOUND_UP)

◦G(SOUND_UP)

◦H(SOUND_UP)

◦T一時停止(SOUND_DOWN)&直進

◦T一時停止(SOUND_DOWN)&直進

◦R一時停止(SOUND_DOWN)&左折

◦S直進(SOUND_UP)

◦P左折(SOUND_UP)

◦E一時停止(SOUND_DOWN)&左折

◦A停止(SOUND_DOWN)

**E地点右折コース [#j5216039]

E地点右折コース

◦E右折(SOUND_UP)

◦P一時停止(SOUND_DOWN)&左折

◦Q(SOUND_UP)&直進

◦R(SOUND_UP)&左折

◦T一時停止(SOUND_DOWN)&直進

◦T一時停止(SOUND_DOWN)&直進

◦H(SOUND_UP)

◦G(SOUND_UP)

◦S一時停止(SOUND_DOWN)&左折

◦P直進(SOUND_UP)

◦Q左折(SOUND_UP)

◦F(SOUND_UP)

◦E直進
 
◦A停止(SOUND_DOWN)

*ロボットについて [#b76ab9f1]
**ロボット全体 [#yf59ae0e]
#ref(車体改.jpg)
ロボット自体は基本的な形の車体とした。また、右車輪をCへ、左車輪をBへと接続し、光センサーは1番へと接続した。
**工夫した点 [#dcc92d55]
#ref(工夫改.jpg)
急なカーブを曲がることが出来るように光センサーをできるだけ車体に近づけた。
*プログラム [#jce51b18]
**定義 [#bdddc194]
 #define tmax 180
 #define goS OnFwd(OUT_BC,100);//直進
 #define turnL OnFwd(OUT_C,100);//左折
 #define turnR OnFwd(OUT_B,100);//右折
 #define spinL OnFwd(OUT_C,200);OnFwd(OUT_B,-200);//左旋回
 #define spinR OnFwd(OUT_B,200);OnFwd(OUT_C,-200);//右旋回
 #define run   while(CurrentTick()-t0<tmax){\//ライントレース
     if(SENSOR_1<=39){\
         spinR;\
         t0 = CurrentTick();\//タイマーリセット
          }else if(SENSOR_1<=45){\
         turnR;\
         t0 = CurrentTick();\//タイマーリセット
          }else if(SENSOR_1<=52){\
         goS;\
         t0 = CurrentTick();\//タイマーリセット
          }else if(SENSOR_1<=55){\
         turnL;\
          }else{\
         spinL;\
            }\
       }\
     Off(OUT_BC);
 
 #define traverse Wait(1000);turnL;Wait(200);PlaySound(SOUND_DOWN);t0 = CurrentTick();//交差点
 #define ignore turnR;Wait(200);PlaySound(SOUND_UP);Off(OUT_BC);t0 = CurrentTick();//T字路等を無視して直進
 #define corner turnL;Wait(200);PlaySound(SOUND_UP);Off(OUT_BC);t0 = CurrentTick();//角
 #define tightturn  spinL;Wait(350);Off(OUT_BC);turnL;Wait(300);//急カーブ
 #define goal turnR;Wait(200);Off(OUT_BC);//ゴール
**メインタスク [#ld76a55f]
 task main()
 {
    SetSensorLight(S1);//光センサーを定義
    long t0 = CurrentTick();//時間を定義
    run;
    corner;//F地点
     run;
     traverse;//Q地点
     run;
     ignore;//R地点
     run;
     corner;//S地点
     run;
     corner;//G地点
     run;
     tightturn;
     run;
     corner;//H地点
     run;
     traverse;//T地点
     run;
     traverse;//T地点
     run;
     traverse;//R地点
     run;
     ignore;//S地点
     run;
     corner;//P地点
     run;
     corner;//E地点
     run;
     goal;//A地点
 }
*感想 [#wf7f6d92]
前回と比べて自分で考えなければいけないことが多くなり、どのようにすればうまくいくかなどなかなか自分で考えることが出来ず、とても苦労した。具体的に言えば、T字路をどのようにして無視して直進すべきか、急カーブのところで、どうしても左折が続きタイマーリセットがされずに停止してしまうのをいかにすべきかということに悩まされた。次回はもっと柔軟な思考を出来るようにし、もっと早く完成させたい。また、たまにうまくいかないときがあるから、そういうところも分析できるようにしたい。

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