目次

課題

今回の課題はライントレースをするロボットを作ることである。
ロボットがトレースするコースはA地点→P直進→Q直進→Q直進→R左折→B地点のコースである。
2016a-mission2

詳しくはこちら

ロボット本体の説明

2つのモーター(A,C)を用いて本体の前後、旋回、回転の動作を行っている。
また、本体の真下に付いている光センサー(2)でライントレースの操作を行っている。
sensa zentaizou

プログラムの説明

サブルーチンの説明

基本的にライントレースするサブルーチン。
黒にいる時間が0.5秒を超えるまで(交差点まで)whileの中のプログラムを繰り返す。
黒にいるときは右に旋回、回転する。 白にいるときは左に旋回、回転する。 それ以外のときは直進する。
交差点で止まったときに音がなる。

sub line_trace()
{
  ClearTimer(0); 
   while(FastTimer(0) <50){
    if (SENSOR_2 <= BLACK) {         //黒
         RIGHT_H;
      } else if (SENSOR_2 < BLACK ) {   //黒よりのグレー
         RIGHT_L;
      } else if (SENSOR_2 > WHITE ) {   //白よりのグレー
         LEFT_L;
         ClearTimer(0);
      } else if (SENSOR_2 >= WHITE) {     //白
         LEFT_H ;
         ClearTimer(0);
      } else {                            //それ以外
      OnFwd(OUT_AC);
      ClearTimer(0);
      }
      Wait(STEP);
   }
   Off(OUT_AC);
   ClearTimer(0);
   PlaySound(SOUND_UP);
   Wait(100);
} 

左に1.4秒間曲がるサブルーチン

sub line_left()
 {
  while (FastTimer(0) <  140 ) {
      LEFT_L;
    }
    ClearTimer(0);
 }

左に2.5秒間旋回するサブルーチン

sub line_left_H()
{
   while (FastTimer(0) < 250) {
     LEFT_H;
   }
   ClearTimer(0);
}

実際に使ったプログラム

#define BLACK 41  //これより小さかったら黒
#define WHITE 50  //これより大きかったら白
#define RIGHT_H OnFwd(OUT_A); OnRev(OUT_C);//右旋回
#define RIGHT_L OnFwd(OUT_A); Off(OUT_C);//右回転
#define LEFT_H OnFwd(OUT_C); OnRev(OUT_A);//左旋回
#define LEFT_L OnFwd(OUT_C); Off(OUT_A);//左回転
#define go_forward(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//まっすぐ
#define STEP 1

sub line_trace()
{
  ClearTimer(0); 
   while(FastTimer(0) <=50){
    if (SENSOR_2 < BLACK) {         //黒
         RIGHT_H;
      } else if (SENSOR_2 < BLACK ) {   //黒よりのグレー
         RIGHT_L;
      } else if (SENSOR_2 > WHITE ) {   //白よりのグレー
         LEFT_L;
         ClearTimer(0);
      } else if (SENSOR_2 >= WHITE) {     //白
         LEFT_H ;
         ClearTimer(0);
      } else {                            //それ以外
      OnFwd(OUT_AC);
      ClearTimer(0);
      }
      Wait(STEP);
   }
   Off(OUT_AC);
   ClearTimer(0);
   PlaySound(SOUND_UP);
   Wait(100);
} 
sub line_left()
{
 while (FastTimer(0) <  140 ) {
     LEFT_L;
   }
   ClearTimer(0);
}
sub line_left_H()
{
   while (FastTimer(0) < 250) {
     LEFT_H;
   }
   ClearTimer(0);
}

task main()
{
 SetSensor(SENSOR_2, SENSOR_LIGHT);
 go_forward(120);
 line_trace();
 line_left();
 line_trace();
 line_left();
 line_trace();
 line_left();
 line_trace();
 line_left_H();
 go_forward(120);
 line_trace();
}

感想・反省点

交差点を認識させるのが難しかった。
交差点を認識させた後は行かせたい方向を考えて秒数や左右を考えなくてはいけなかったので大変だった。
なんとかA地点からB地点までライントレースさせることはできてよかった。


添付ファイル: file2016a-mission2.png 221件 [詳細] fileimage2.JPG 209件 [詳細] fileimage1.JPG 169件 [詳細]

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