課題の説明

今回は以下の図のようにな図を作り、経路を黒い線にそって動くロボットを作成するという課題だった。

99AA.jpg

そして、下に述べているように三つの経路がある。

  A地点からB地点へ (一人目)
   A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点
  B地点からC地点へ (二人目)
   B地点 → R右折 → Q直進 → Q直進 →P右折 → S右折 → C地点
  C地点からA地点へ (三人目)
   C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点

私はB地点からC地点への二つ目の経路をやった。

Bebo.png

ロボットの説明

光センサーで経路の黒い線と白いところをより読みやすくするため、本体の中にあるものを変更した。

このようなことをしてからよりよい位置に光センサーをつけたという工夫をした。 以下の写真のようにして、光センサーを本体に付け加えた

ALDOBBA.jpg
A99.jpg

プログラムの説明

マクロの定義

  #define turn_right OnFwd(OUT_A);SetPower(OUT_AC,1);Off(OUT_C)        // 右曲がり
  #define turn_left OnFwd(OUT_C);SetPower(OUT_AC,1);Off(OUT_A)     // 左曲がり
  #define Go OnFwd(OUT_AC)                      // 直進
  #define turn_right2 OnFwd(OUT_A);OnRev(OUT_C);SetPower(OUT_AC,1) // 右旋回
  #define turn_left2 OnFwd(OUT_C);OnRev(OUT_A);SetPower(OUT_AC,1)  // 左旋回
  #define intersection Off(OUT_AC);PlaySound(SOUND_FAST_UP);Wait(100); // 交差点
  #define Stop Off(OUT_AC); // 停止

左に曲がる時と右に曲がる時、Setpowerをつかい、スピードを減少したことでカーブでの曲がりを改善した。

そしてintersectionという定義を書き、これは交差点を認識した時にする動作である。 認識したら、停止し、音を鳴らして、そして一秒を待つという定義。

ライントレースの定義

ロボットの動きは上のような定義で、ロボットは黒い線の右に沿って動く。そして交差点だと判断させるため、FastTimerを使った。

  sub line_follow()                             //黒い線に沿って、ラインをトレースして動く定義
  {
 
      ClearTimer(0);                            //タイマーリセット
   
  
      while(FastTimer(0) <25){           // 黒と中間の間には0.25秒で右を曲がり続いた時、交差点を判断する
          if(SENSOR_2 < 45){          // 黒くなった時右旋回 
              turn_right2;
          } else{
              if(SENSOR_2 < 48){        // 少し黒くなった時右折
                  turn_right;
              }else if(SENSOR_2 < 53){     // 黒と白の間、直進
                  Go;
              }else if(SENSOR_2 < 56){     // 少し白くなったら左折
                  turn_left;
              }else{
                  turn_left2;         // 白くなった時左旋回
              }
              ClearTimer(0);
          }
      }
  
  } 

サブルーチンの定義

ミッションを完成するためにロボットは交差点を認識した後、 二つの動きが必要になっていた。

その動きは右折と直進だったので、以下のようにサブルーチンの定義を使い、その動きを書いた

  sub migi()         //右折
  {
      turn_right2;      //右旋回
      Wait(15);
  }

ロボットは黒い線の右側にそって動ぎ、交差点を認識したら右を曲がったままに停止をする。

Blue.jpg

そしてロボットを直進させるため、上の写真に書いてあるように少しまず左旋回して、そして次に直進

  sub mae()          //直進という定義
  {
      turn_left2;     //左旋回
      Wait(25);
      Go;       //直進
      Wait(20);
  }

メインプログラム

以上書いて来た定義を使い、メインプログラムを書いた。

  task main()
  {
      SetSensor(SENSOR_2,SENSOR_LIGHT);     
      Go;                  //コースのB地点のところから黒い線まで直進
      Wait(70);
      line_follow();               //黒い線に入ってからR地点までのライントレース
      intersection;             //R地点の交差点だと判断した後の動作
      migi();                //右折する
      line_follow();             //R地点からQ地点までのライントレース
      intersection;             //Q地点の交差点だと判断した後の動作
      mae();                                //直進する      
      line_follow();                        //Q地点からカーブしてまたQ地点までのライントレース
      intersection;                         //Q地点の交差点だと判断した後の動作
      mae();                                //直進する
      line_follow();                        //Q地点からP地点までのライントレース
      intersection;                         //P地点の交差点だと判断した後の動作
      migi();                               //右折する
      line_follow();                        //P地点からS地点までのライントレース
      intersection;                         //S地点の交差点だと判断した後の動作
      migi();                               //右折する
      line_follow();                        //S地点からC地点までのライントレース
      intersection;                         //C地点の交差点だと判断した後の動作
      mae();                                //直進する
      Go;                                   //C地点の中に入る動作
      Wait(100);
      Stop;
  }

最初のGoとWaitは図のB地点にロボットが止まっている時、直進し、黒い線に入るまでの定義である。

そして、コースの最後にC地点のところに入るため、またGo,Wait、Stopの定義を使った。

まとめ・感想

A9.jpg

59.55秒で二つ目のコースのゴールまでロボットを動かした。

明るさと暗さを測るのが大変で、センサーの位置を変えることでロボットの動きがずいぶん変わることに驚いた。

しかし、チームワークで少し楽になっていて、コースの最後までロボットを進めさせてよかった。これから次の課題に向かって頑張っていきたいと思います。


添付ファイル: fileBebo.png 94件 [詳細] file99AA.jpg 100件 [詳細] fileA9.jpg 19件 [詳細] fileA99.jpg 98件 [詳細] fileBlue.jpg 108件 [詳細] fileALDOBBA.jpg 83件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-07-27 (水) 20:19:19