2016a/Member 目次

課題

 今回の課題は、下図を制作し、経路を黒い線にそって動くロボットを制作することだ。

2016a-mission2.png

 私は、A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点、を経路とするものを作った。
 (2016年前期/課題2より)

ロボットの説明

 これが、機体の全体像。

image1 (6).JPG

 前回のものより、小回りがききやすいよう機体を小さくした。
 光センサーをタイヤと近くすることで、センサーの左右のふれを小さくした。

image3 (1).JPG

 前輪を取り、代わりに球面を帯びたパーツをつけ、滑らかに動くようにした。

プログラムの説明

基本の定義

 以下がサブルーチンを作る上での基本的な定義である。

#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

サブルーチン

 黒の線上をたどっていくプログラム。交差点で一時停止し、音が鳴るようになっている。
 交差点を判断するためにはタイマーを使い、黒が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);
}

メインプログラム

task main()
{
 SetSensor (SENSOR_2, SENSOR_LIGHT);
 go_fwd(110);
 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();
}

反省・感想

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


添付ファイル: file2016a-mission2.png 245件 [詳細] fileimage4.JPG 131件 [詳細] fileimage2 (1).JPG 132件 [詳細] fileimage3 (1).JPG 250件 [詳細] fileimage1 (6).JPG 217件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-07-07 (木) 22:22:30