ライントレースをするロボット

プログラム

それぞれの動き方は下に図で解説します。説明文の中の数字に連動しています。

  • ぶつかると反転して進む場合
    1. 概要
      //作成者:たか
      task main() //メインプログラムです。
      {
      SetSensor(SENSOR_1,SENSOR_LIGHT) //センサー1をライトセンサーに設定します。
      SetSensor(SENSOR_2,SENSOR_TOUCH) //センサー2をタッチセンサーに設定します。
      SetSensor(SENSOR_3,SENSOR_LIGHT) //センサー3をライトセンサーに設定します。
      while(true) //ライントレースのプログラムを設定します。
       {
         if((SENSOR_1>40)&&(SENSOR_3>40))  //通常時の行動を設定します。
          {
            OnFwd(OUT_A+OUT_C); //前進します。
          }
         if((SENSOR_1>40)&&(SENSOR_3<40))  //左のセンサーが線上に来たときの行動を設定します。
          {
            OnFwd(OUT_A);Off(OUT_C); //左センサーが線から出るまで左に旋回します。
          }
         if((SENSOR_1<40)&&(SENSOR_3>40))  //右のセンサーが線上に来たときの行動を設定します。
          {
            OnFwd(OUT_C);Off(OUT_A); //右センサーが線から出るまで右に旋回します。
          }
         if(SENSOR_2==1)  //タッチセンサーに何かが当たったときの行動を設定します。     {
            OnRev(OUT_A+OUT_C);Wait(100); //(1)前の障害物にぶつからないようにバックします。
            OnFwd(OUT_A);OnRev(OUT_C);Wait(180); //(2)反転します。
          }
       }
      }
    2. 動き方
      反転.JPG
  • ぶつかるとよけて進む場合
    1. 概要
      //作成者:たか
      task main()
      {
      SetSensor(SENSOR_1,SENSOR_LIGHT) //センサー1をライトセンサーに設定します。
      SetSensor(SENSOR_2,SENSOR_TOUCH) //センサー2をタッチセンサーに設定します。
      SetSensor(SENSOR_3,SENSOR_LIGHT) //センサー3をライトセンサーに設定します。
      while(true)
       {
         if((SENSOR_1>40)&&(SENSOR_3>40))  //通常時の行動を設定します。
          {
            OnFwd(OUT_A+OUT_C); //前進します。
          }
         if((SENSOR_1>40)&&(SENSOR_3<40))  //左のセンサーが線上に来たときの行動を設定します。
          {
            OnFwd(OUT_A);Off(OUT_C); //左センサーが線から出るまで右に旋回します。
          }
         if((SENSOR_1<40)&&(SENSOR_3>40))  //右のセンサーが線上に来た時の行動を設定します。
          {
            OnFwd(OUT_C);Off(OUT_A); //右センサーが線から出るまで左に旋回します。
          }
         if(SENSOR_2==1)  //タッチセンサーに何かが当たったときの行動を設定します。     {
            OnRev(OUT_A+OUT_C);Wait(100); //(1)前の障害物にぶつからないようにバックします。
            OnFwd(OUT_A);OnRev(OUT_C);Wait(90); //(2)右に90°回転します。
            OnFwd(OUT_A+OUT_C);Wait(150); //(3)前進します。
            OnFwd(OUT_C);OnRev(OUT_A);Wait(90); //(4)左に90°回転します。
            OnFwd(OUT_A+OUT_C);Wait(150); //(5)前進します。
            OnFwd(OUT_C);OnRev(OUT_A);Wait(90); //(6)左に90°回転します。
            OnFwd(OUT_A+OUT_C);Wait(150); //(7)前進します。
            OnFwd(OUT_A);OnRev(OUT_C);Wait(90); //(8)右に90°回転します。
          }
       }
      }
    2. 動き方
      回避.JPG
  • ライントレースの動き方の簡単な図
    トレース.JPG

機体

  • 前回の機体をもとに、小回りしやすいように小型化しました。ライトセンサーは、ラインを挟み込む形で取り付けました。障害物にぶつかったかを確認するのにタッチセンサーを使用し、シングルバンパーを採用しました。ただ、このバンパーが飛び出しすぎてしまい、少し邪魔になってしまいました。(写真は下のものしかありません。すみません。)
    D1000008.JPG

コース

  • 最初は「正」のかたちにコースを描いたが、ヘアピンが急すぎたためロボットが曲がりきれず、「正」は断念しました。(下にイメージを貼り付けました。)代わりに「凹」の字を模したコースに変えました。(どちらかといえば、視力検査のあれ?)こちらはうまく移動できました。
    dscn2617_Medium.jpg
  • 旧コース
    旧コース.JPG

苦労した点

  • 先ほども述べたように、コースを作るのが手間取りました。いかに機体が移動しやすいコースになるのかを考えてしまいました。(本来なら、どのようなコースも進めるロボットを作ればよかったのかもしれないが・・・)
  • ライントレースをするための光センサーの位置、およびプログラムに苦労しました。はじめは、ぜんぜんスピードが出なかったのを、下の工夫した点のようにしたことで、スピードが前回よりも格段にあがりました。

工夫した点

  1. 機体のほうを小回りできるように小型化しました。
  2. プログラムのほうは、ライントレースについて工夫しました。センサーが線にかぶったときに、片方のタイヤは回したまま、もう片方は止めることによって、少しでも前に進むようにしました。(もう片方を逆回転させると、その場に止まってしまう。)下に簡単な図を貼り付けておきます。(とてつもなく汚い図なので、分かりにくいときは無視してください。)
  3. 障害物にぶつかったときに、旋回したりする前に少しバックさせるようにしました。これによって、回転したときに前の障害物にぶつかってしまうのを防ぎました。

改善したかった点・もっと工夫したかった点

  • タッチセンサーがかなり飛び出してしまっていたので、狭いところでは壁などにぶつかってしまったので、もっとコンパクトにしたかったです。
  • 今回は、モーターが二つのものしかできなかったので、ひとつのものも製作したかったです。

反省・感想

  • 今回のロボットは発表までこぎつけることができたのでよかったです。ただ、なかなか集まって作業ができなかったので、予定を決めて計画的にできるようにしたいです。

コメント

前回までのコメントは消してしまいましたが、何かコメントがあったらお願いします。

  • 「何かがずれるとすべてがずれるようだ」についてもう少し詳しく書いてみてください。具体的にどんな現象なのかがよくわかりません。 -- まいける(TA) 2006-07-25 (火) 19:12:54


添付ファイル: file旧コース.JPG 208件 [詳細] fileトレース.JPG 206件 [詳細] file反転.JPG 221件 [詳細] file回避.JPG 238件 [詳細] file無題2.bmp 93件 [詳細] file無題.bmp 253件 [詳細] filedscn2617_Medium.jpg 194件 [詳細] fileD1000008.JPG 219件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-19 (土) 00:01:44