2016a/Member

ロボティクス入門ゼミ 課題2

課題の説明

?plugin=attach&refer=2016a%2FMission2&openfile=2016a-mission2.png

幅2cmの黒い線をなぞります。今回はB地点からC地点までのコースに挑戦しました。

概要

黒の線をライントレースします。光センサーを使って白と黒を認識させ、プログラム通りに動かします。
主にこのプログラムは交差点を認識させるのがミソになっていると思います。
やり方は大きく2つあり、時間を測ってやるやり方と、回数を測ってやるやり方です。

ro1.jpg

逆さになってしまいましたが、、、、

ro2.jpg

プログラム

sub cross_right()
{
 SetSensor(SENSOR_2,SENSOR_LIGHT);
   int n=0;
   while (n<10) {
     if (SENSOR_2 < THRESHOLD -8) {
       turn_left1; n=0;
     } else if (SENSOR_2 < THRESHOLD -3) {
       turn_left0; n=0;
     } else if (SENSOR_2 < THRESHOLD +3) {
       turn_right1; n++;   
     } else if (SENSOR_2 < THRESHOLD +8) {
       turn_right0; n++;
      }
   } 
    Off(OUT_AC); Wait(100); turn_right1;
}
sub cross_left()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
   int n=0;
   while (n<10) {
     if (SENSOR_2 < THRESHOLD -8) {
       turn_left1; n++;
     } else if (SENSOR_2 < THRESHOLD -3) {
       turn_left0; n++;
     } else if (SENSOR_2 < THRESHOLD +3) {
       turn_right1; n=0;   
     } else if (SENSOR_2 < THRESHOLD +8) {
       turn_right0; n=0;
      }
   }
    Off(OUT_AC); Wait(100); turn_left1;
}
sub cross_stop()
{
 SetSensor(SENSOR_2,SENSOR_LIGHT);
  {
     if (SENSOR_2 < THRESHOLD -8) {
       turn_left1; 
     } else if (SENSOR_2 < THRESHOLD -3) {
       turn_left0; 
     } else if (SENSOR_2 < THRESHOLD +3) {
       turn_right1;   
     } else if (SENSOR_2 < THRESHOLD +8) {
       turn_right0; 
      }
   }
   Off(OUT_AC); 
}
void line_follow(int t)
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);
 
  while (Timer(0)<t) {
  if (SENSOR_2<THRESHOLD -8){turn_left1;}
  else if (SENSOR_2<THRESHOLD -3){turn_left0;}
  else if (SENSOR_2<THRESHOLD +3){turn_right1;}
  else if (SENSOR_2<THRESHOLD +8){turn_right0;}
  Wait(100);
  }
 Off(OUT_AC);
}
task main()
{
  line_follow(30);  //BからRまで
  cross_right();    //R
  line_follow(800); //RからQ
  cross_fwd();      //Q
  line_follow(150); //QからQ
  cross_fwd();      //Q
  line_follow(800); //QからP
  cross_right();    //P
  line_follow(800);  //PからSまで
  cross_right();    //S 
  line_follow(400);  //SからCまで
  cross_stop();      //停止
}

感想

交差点を認識させるのが難しく、思ったとおりに動いてくれないのが残念でした。
時間をかけて作ったつもりですが、毎回やるたびに違うタイミングでコースを走るので、
時間を指定したりする時、とても苦労しました。
最終的にちゃんと動いてくれなかったのですが、友達に教えてもらったりして、
ある程度の形ではプログラムを作ることが出来ました。
小さい頃遊んだ自分にとって親しみ深いレゴにこんなに苦戦するとは思っても見ませんでした。
いろいろ失敗して、原因も自分でわかったものもありますが、ほとんど周りの人に教えて
もらって作りました。チームの友達や周りで助けてくれた人にはとても感謝しています。


添付ファイル: filero1.jpg 236件 [詳細] filero2.jpg 255件 [詳細] filero2 125件 [詳細] filero1 145件 [詳細]

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