目次

課題

risを使い光センサーによりライントレースを行う。

コースは模造紙にマジックペンで以下のように描いて作る。

2016a-mission2.png

私がロボットを走らせるコースは

A地点からB地点へ

   A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点

である

本体について

attachment00(3).jpg

課題1のときから大きく構造は変えていないがいくつか工夫はした。まずはタイヤである。2つ取り外し、スムーズに移動できるようになった。

attachment01(2).jpg

ふたつ目は光センサーの取り付け位置である。遠すぎると、少しの小回りで大きく動いてしまうため誤動作が多かった。そのため最初はなるべく本体に近づけて固定しようと工夫した。課題1のときはあったでっぱりを取り外しそこにセンサーを取り付けた。すると誤動作は少なくなったが今度は微調整が増え、なかなか進まなくなった、そこで「多少は離さないとセンサーが動かなすぎて進んでいかない」という先生の助言に従い適度に本体から離してみたところ、大幅にスピードアップできた。

プログラミング

定義

初めに以下の定義をした

#define turn_left Off(OUT_A); OnFwd(OUT_C);//左折

#define turn_leftS OnRev(OUT_A); OnFwd(OUT_C); //左旋回

#define turn_right OnFwd(OUT_A); Off(OUT_C);//右折

#define turn_rightS OnFwd(OUT_A); OnRev(OUT_C);//右旋回

#define go_forward OnFwd(OUT_AC);//直進

サブルーチン

メインのタスクを簡単にするためにいくつかサブルーチンを作った

ラインを辿るために

私たちの班は、黒線と白い部分の境目をトレースするという方法をとった。 境目の明るさを測り。それよりも明るくなったら黒線の方へ、暗くなったら白い方へ微調整し、進んで行く。

これがそのサブルーチンである  sub line_follow()  {

     ClearTimer(0);   // まずはタイマーをリセットする(理由は後述)
     while(FastTimer(0)<25)//whileのカッコで囲まれた動作は
      {          //タイマーが一定の時間を超えるまで行われる
              if(SENSOR_2<45){//もし、センサーがラインの境目よりはるかに暗いと判断した時
                 turn_leftS;// 左旋回→これが交差点判別に使われる(後述)
                }
              else if(SENSOR_2<47){//もし、センサーがラインの境目より少し暗いと判断した時
                 turn_left;//  左折
                 ClearTimer(0);//タイマーをリセットする
		 }
		 else if(SENSOR_2<54){//もし、センサーがラインの境目の明るさだと判断した時
	           go_forward;    //直進
		    ClearTimer(0);//タイマーをリセットする
		 }
	 	 else if(SENSOR_2<57){//もし、センサーがラインの境目より少し明るいと判断した時
		    turn_right;     //右折
		    ClearTimer(0);//タイマーをリセットする
                }
		 else {   //もし、センサーがラインの境目よりかなり明るいと判断した時 
                 turn_rightS;  //右旋回
		    ClearTimer(0);//
                }
      }
     Off(OUT_AC);//whileの範囲を超えたら電源が落ちる
            

 }

ラインの左側をトレースしたため暗くなったら左折、明るくなったら右折をすればよい。

どこからが明るく、どこからが暗いのか具体的な値を決めるために、試行錯誤を繰り返した。

交差点を認識するために

私達の班では、交差点では比較的長く左折してもセンサーが明るく反応しなくなると考えた

そこでタイマーを用い、一定時間左旋回(交差点はかなり暗いため)をしたら交差点と認識するようにプログラミングした、そのため上のサブルーチンを見れば分かる通り、左旋回以外の動作をしたあとにはタイマーをリセットしている。左旋回が連続して長く続くとタイマーの数字が増え、一定の値を超えたら停止するようにした。

交差点を超える

交差点上ではライントレースができないそのため以下のサブルーチンを作った  sub go_forwardS()//交差点を直進  {

     turn_rightS;//右旋回(僅かに左に傾いているため)
     Wait(10);  
     go_forward;//直進
     Wait(30);
     

 }

 sub turn_leftSS()//交差点を左折  {

     while(SENSOR_2<47)//明るくなるまで左折
      {
        turn_leftS;
      }

 }

     

task main

いよいよメインの動作についてだ

task main()
{
     SetSensor(SENSOR_2, SENSOR_LIGHT);//光センサーをセット
     line_follow();                    //AP間のラインを辿る
     PlaySound(SOUND_LOW_BEEP);        //交差点を認識したらサウンドを鳴らす
     Wait(100);                        //交差点では一秒停止
     PlaySound(SOUND_CLICK);           //出発前にもう一回サウンドを鳴らす
     go_forwardS();                    //交差点を直進
     line_follow();                    //PQ間のラインを辿る
     PlaySound(SOUND_LOW_BEEP);        //交差点を認識したらサウンドを鳴らす
     Wait(100);                        //交差点では一秒停止
     PlaySound(SOUND_CLICK);           //出発前にもう一回サウンドを鳴らす
     go_forwardS();                    //交差点を直進
     line_follow();                    //QQ間のラインを辿る
     PlaySound(SOUND_LOW_BEEP);        //交差点を認識したらサウンドを鳴らす
     Wait(100);                        //交差点では一秒停止
     PlaySound(SOUND_CLICK);           //出発前にもう一回サウンドを鳴らす
     go_forwardS();                    //交差点を直進
     line_follow();                    //QR間のラインを辿る
     PlaySound(SOUND_LOW_BEEP);        //交差点を認識したらサウンドを鳴らす
     Wait(100);                        //交差点では一秒停止
     PlaySound(SOUND_CLICK);           //出発前にもう一回サウンドを鳴らす
     turn_leftSS();                    //交差点を左折
     line_follow();                    //RB間のラインを辿る
     go_forward;                       //最後の枠を超える
     Wait(100);
     Off(OUT_AC);                      //停止
     PlaySound(SOUND_UP) ;             //クリア時のサウンド。所要時間41秒
}

サブルーチンのおかげでかなり簡略化されている。が、サウンド→停止→サウンドがセットの動作になっているので、これも交差点での動作としてサブルーチンを作れば更にtask mainを短くできたのではないかと今更思った。

まとめ

きちんとゴールまでたどり着くことができた。

センサーの位置でスピードが劇的に変わったので驚いた。

ただしまれに誤動作をおこし、ゴールにたどりつけないこともあった。10回に1回程度なのでなかなk原因を探れず改善に至れなかったのが心残りだ。そして課題1のときと同じくロボットの脆さも問題だ。 しかし課題1のときよりも楽しんで取り組めたと思う。


添付ファイル: fileattachment01(2).jpg 101件 [詳細] fileattachment00(3).jpg 122件 [詳細] fileattachment01(1).jpg 58件 [詳細] fileattachment01.jpg 54件 [詳細] fileattachment00(2).jpg 65件 [詳細] fileattachment00.jpg 50件 [詳細] file2016a-mission2.png 122件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-11 (木) 12:31:29