[[2016a/Member]]
目次
#contents

*課題 [#wb6aa14b]
 今回の課題は、下図を制作し、経路を黒い線にそって動くロボットを制作することだ。~
#ref(2016a/Member/ryo/Mission2/2016a-mission2.png,100%)
 私は、A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点、を経路とするものを作った。~
 [[(2016年前期/課題2より):http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission2]]
*ロボットの説明 [#l52bd66c]
 これが、機体の全体像。
#ref(2016a/Member/ryo/Mission2/image1 (6).JPG,100%)
 前回のものより、小回りがききやすいよう機体を小さくした。~
 光センサーをタイヤと近くすることで、センサーの左右のふれを小さくした。
#ref(2016a/Member/ryo/Mission2/image3 (1).JPG,100%)
 前輪を取り、代わりに球面を帯びたパーツをつけ、滑らかに動くようにした。
*プログラムの説明 [#jfd21752]
**基本の定義 [#u5aef079]
 以下がサブルーチンを作る上での基本的な定義である。
 #define BLACK 42  //これ以下は黒
 #define WHITE 50  //これ以上は白
 #define RIGHT_S OnFwd(OUT_A);OnRev(OUT_C);  //右旋回
 #define RIGHT_K OnFwd(OUT_A);Off(OUT_C);    //右回転
 #define LEFT_S OnFwd(OUT_C);OnRev(OUT_A);   //左旋回
 #define LEFT_K OnFwd(OUT_C);Off(OUT_A);     //左回転
 #define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);  //t秒間前進
 #define STEP 1
**サブルーチン [#o741bbc7]
 黒の線上をたどっていくプログラム。交差点で一時停止し、音が鳴るようになっている。~
 交差点を判断するためにはタイマーを使い、黒が0.5秒以上続いた時、交差点と判断するようにした。~
 また、線の左側をたどるようになっており、黒では右に、白では左に回転するようになっている。~
 その他では直進する。
 sub line_trace()
 {
   ClearTimer(0);
    while(FastTimer(0) < 50) {
      if  (SENSOR_2 < BLACK) {
            RIGHT_S;
          } else if (SENSOR_2 < BLACK ) {
            RIGHT_K;
          } else if (SENSOR_2 > WHITE ) {
            LEFT_S;
            ClearTimer(0);
          } else if (SENSOR_2 >= WHITE ) {
            LEFT_K;
            ClearTimer(0); 
          } else {
          OnFwd(OUT_AC);
          ClearTimer(0);
           }
          Wait(STEP);
        }
       Off(OUT_AC);
       ClearTimer(0);
       PlaySound(SOUND_UP);
       Wait(100);
 }
~~
 上のプログラムで黒の時、右回転するため、交差点で右に傾いた状態で止まる。~
 機体を正常な傾きに戻すことと、交差点を通過することを目的としている。
 sub turn_left_i()
 {
  while (FastTimer(0) < 142) {
         LEFT_K;
         }
        ClearTimer(0);
 }
~~
 上のプログラムと使用用途は一緒だが、最後の直角を左回転するため判断の時間を長くしている。
 sub turn_left_ii()
 {
  while (FastTimer(0) < 252) {
         LEFT_S;
         }
        ClearTimer(0);
 }
**メインプログラム [#e5c43893]
 task main()
 {
  SetSensor (SENSOR_2, SENSOR_LIGHT);
  go_fwd(110);
  line_trace();
  turn_left_i();
  line_trace();
  turn_left_i();
  line_trace();
  turn_left_i();
  line_trace();
  turn_left_ii();
  line_trace();     // AからPへ
  turn_left_i();    // Pを通過
  line_trace();     // PからQへ
  turn_left_i();    // Qを通過
  line_trace();     // 一周回ってQへ
  turn_left_i();    // Qを通過
  line_trace();     // QからRへ
  turn_left_ii();   // Rを左折
  go_fwd(110);
  line_trace();
 }

*反省・感想 [#be89c822]
 ゴールにたどりつくこともあったが、たどりつかないことも多かった。~
 交差点で止まった後の、通過するところでうまくいかないことが多かった。~
 もっと時間調節を慎重にやらなければいけなかったと思う。~
 また、サブルーチンやタイマーに対する理解が遅かったために、作業が遅れてしまったことも~
 達成しきれなかった要因だったと思う。サブルーチンを使うことですっきりとしたプログラムを~
 書くことができることがわかった。次回の課題では、今回のことを生かして、~
 課題を達成できるよう頑張りたい。
 

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS