[[2007a/MemberOnly/進行状況A]]
*ライントレースロボット [#caf425d0]
**ロボット紹介 [#q1df0495]
***製作者 ユウジ&ARX-8 LAEVATEIN [#f55849b0]
***名前  追跡者  [#scaca133]

 &ref(./SN330096.jpg,100%,);

 今まで使用していたキットが接触不良によって使用ができなくなったため、新たに標準的な車両を作り直した。前回のロボットは大きくなりすぎバランスもデザインも悪くなったため、今回は全体的にコンパクトになるように心がけた。その結果、光センサー2つとタッチセンサー1つを積んでいるが機動性とデザインは前回のロボットより格段によくなった。

**コース [#eabe7864]
 非常に簡単なコースである。特徴としては交差点に太線を加えているところである。これは、書かなくても課題はこなすことができたが、この太線により他のチームと違うプログラミングができたと思う。太線がない場合のプログラミングも下記にしるした。

カーブは比較的緩やかで、難なく曲がることができた。

また、交差点はほぼ直角であるため、センサの位置もあまり考慮しなくて済んだようだ。しかし、実際は直角の交差点でなくても、通過することができた。

#ref(./SN330094.jpg)

**製作過程 [#de2c5193]
***プロト01 [#z72804fa]
  試作なので、なるべく簡素で改造が簡単になるように作製した。光センサーの部分は簡素すぎて不安定になるのが不安だったが、簡単な補強程度で済んで助かった。タッチセンサーの部分は設計図をみて少しアレンジを加えただけなのでたいして難しくなかった。だが、実際に走らせてみると先端を振って走ってしまい、遅いしかっこ悪いしライントレースの精度もいまいちだった。
***プロト01改 [#l7c19177]
  上記より、光センサーが車体の中心から離れるほどセンサー部分の振れが大きくなるため、センサー部分をさらに小型簡略化しなるべく車体の中心に近づけた。このとき車体自体にも多少手を加えた。この結果、予測通りセンサーの部分の振れが減少しよりスムーズに動けるよりになった。また、コンパクトにまとまったため見栄えもよくなった。

        センサー部分の小型簡略化

&ref(./SN330100.jpg,50%,);⇒⇒⇒&ref(./SN330095.jpg,50%,);

           車体の変化

&ref(./SN330102.jpg,50%,);⇒⇒⇒&ref(./SN330098.jpg,50%,);

            全体像

&ref(./SN330101.jpg,50%,);⇒⇒⇒&ref(./SN330096.jpg,50%,);

*プログラム1(センサを2つ使用) [#ec7456c5]


task main ()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサ端子1に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ端子3に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_2,SENSOR_TOUCH); // センサ端子2に接続されたセンサがタッチセンサであると宣言
    
  
 
 while(true){        //無限ループ
  if (SENSOR_2 == 1)            
  {                                         //タッチセンサに触れた場合車体が止まる(ア)
      Off(OUT_A+OUT_C);
    }else{                                //(ア)以外のとき
  
      if (SENSOR_1>40){   //光センサ1が白を感知したとき(イ)
         if (SENSOR_3>40){  //光センサ3が白を感知したとき
             OnFwd(OUT_A);  //前進
             OnFwd(OUT_C);
          } else{        //(イ)のときで、光センサ3が黒を感知したとき
              OnFwd(OUT_A);  //右折
              Off(OUT_C);
          }
       } else{         //光センサ1が黒を感知したとき
           if (SENSOR_3>40){   //光センサ3が白を感知したとき
              Off(OUT_A);    //左折
              OnFwd(OUT_C);
           } else {        //光センサ1、3が黒を感知したとき
               Off(OUT_A+OUT_C); Wait(300);   //3秒間停止            
               OnFwd(OUT_A+OUT_C);Wait(100);//1秒間前進
              
              }   
           }
        }
     }                
 }


このプログラムは、センサが両方とも白を感知しているとき(a)は前進し、左のセンサ1が黒を感知したとき(b)は右折、また右のセンサ3が黒を感知したとき(c)は左折するようプログラムしてある。

このため、交差点では上記のコースのように太線を交差点に書き、センサ1,3の両方が黒を感知したら止まるという形式をとらなければならなかった。

交差点での一旦停止はセンサ1,3の両方が黒を感知したら3秒停止し、1秒間前進するというプログラムである。実際にはもっといいプログラムができる気がする。

**メリット [#q276c5a8]
●比較的きれいに線上を走ることができる。

●センサを1つだけ使用するのに比べスピードが速い。

**デメリット [#u948e2cd]
●交差点にコースのような太線を書かなければならない。

●黒線を追うのにセンサを1つ使用するのに対しぶれが大きい。

●急なカーブには対処できない。

      ↓

ギアを多く使用しスピードを下げたり、右左折のところのプログラミングで、[Off]を使用するのではなく、[OnRev]を使用することによって対処することができる。

(a)                                                     (b)                                                                  (c)

&ref(./200706201833000.jpg,25%,);
&ref(./200706201834000.jpg,25%,);
&ref(./200706201833001.jpg,25%,);



*プログラム2(センサを2つ使用) [#d265c386]

task main() {

 SetSensor(SENSOR_1,SENSOR_LIGHT);    //センサ端子1に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサ端子3に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_2,SENSOR_TOUCH);  // センサ端子2に接続されたセンサがタッチセンサであると宣言


 while(true) {                          //無限ループ
 if (SENSOR_2 == 1)            
 {                                         //タッチセンサに触れた場合車体が止まる(ア)
     Off(OUT_A+OUT_C);
   }else{                                //(ア)以外のとき
 
     if (SENSOR_1<40){       //光センサ1が黒を感知したとき(イ)
        if (SENSOR_3<40){    //光センサ3が黒を感知したとき
            OnFwd(OUT_A);    //前進
            OnFwd(OUT_C);
         } else{             //(イ)のときで、光センサ3が白を感知したとき
             Off(OUT_A);     //左折
             OnFwd(OUT_C);
         }
      } else{                //光センサ1が白を感知したとき
          if (SENSOR_3<40){  //光センサ3が黒を感知したとき
             OnFwd(OUT_A);   //右折
             Off(OUT_C);
          } else {           //光センサ1、3が白を感知したとき
              Off(OUT_A+OUT_C); Wait(300);  //3秒間停止            
              OnFwd(OUT_A+OUT_C);Wait(100); //1秒間前進
             
             }   
          }
       }
    }                
}


このプログラムは、プログラム1とは異なり下の写真のように、センサ1,3の両方が黒を感知したときに前進するというプログラムである。右左折の方法はプログラム1とは正反対である。

交差点ではセンサ1,3の両方が白を感知したときに止まるようになっている。


**メリット [#kf71168f]

●プログラム1のデメリットであった交差点での太線がいらない。


**デメリット [#o3996a25]

●今回のように、線を手書きで書く場合同じロボットを使用するなら線を太く書かなければいけばい。


&ref(./200706201835000.jpg,25%,);


**プログラム3(センサを1つ使用) [#aff182ac]

task main ()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサ端子1に接続されたセンサが光センサであると宣言
 
 SetSensor(SENSOR_2,SENSOR_TOUCH); // センサ端子2に接続されたセンサがタッチセンサであると宣言
    
  
 while(true){                      //無限ループ 
  :if (SENSOR_2 == 1)        //タッチセンサに触れた場合車体が止まる
  {
      Off(OUT_A+OUT_C);
    }else{
  
      if (SENSOR_1<40){        //センサ1が黒を感知したとき
         
             OnFwd(OUT_A);      //右折
             Off(OUT_C);
          } else{                        //センサ1が白を感知したとき
              Off(OUT_A);           //左折
              OnFwd(OUT_C);        
               
           }
        }
     }                
 }


&ref(./200706201831000.jpg,50%,);


このプログラムでは、ロボットは常に黒線の右側を走り続けるが、プログラムをかえることにより、常に黒線の左側を走るようにすることもできる。

**メリット [#qda3e320]

●脱線はなかなか起きない。

●車体のぶれが小さい。

●上記や下記のプログラミングと比べてプログラムが非常に楽である。

**デメリット [#t0fb8865]
●直角の交差点は通過することができるがそれ以外の交差点は通過できない。

              ↓

上の写真のように交差点での太線に細工を施すことにより、様々な交差点も通過できる。

●センサを1つ使用することで、今回の課題のである交差点での一時停止がクリアできない。

●直線では、右左折を連続して行うのでスピードが遅い。




*プログラム4(センサを2つ使用) [#w1bc69b4]

 task main(){

 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサ端子1に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_3,SENSOR_LIGHT);//センサ端子3に接続されたセンサが光センサであると宣言
 SetSensor(SENSOR_2,SENSOR_TOUCH); // センサ端子2に接続されたセンサがタッチセンサであると宣言
   
 

 while(true){                      //無限ループ
 if (SENSOR_2 == 1)            
 {                                //タッチセンサに触れた場合車体が止まる(ア)
     Off(OUT_A+OUT_C);
   }else{                         //(ア)以外のとき
 
     if (SENSOR_1<40){            //光センサ1が黒を感知したとき(イ)
        OnFwd(OUT_A);             //右折
        Off(OUT_C);
      }else{
         if (SENSOR_3<40);        //(イ)以外のときで、センサ3が黒を感知したとき
         {
             Off(OUT_A);              //左折
             OnFwd(OUT_C);
         }else{                            //センサ1,3が白ろ感知したとき
             Off(OUT_A+OUT_C); Wait(300);  //3秒間停止            
             OnFwd(OUT_A+OUT_C);Wait(100); //1秒間前進
             }
         }
      }
   }


このプログラムは、他のチームがやっていないんではないかと思い、プログラムだけ組んでみた。時間の都合上実際にやってみることはできなく、合ってるかどうかはわからない。

センサは、2つを縦につなぎ、前方のセンサで直進や右左折を行い、後方のセンサは交差点の一時停止のためだけにある。

これは、下の写真のときは前進する。カーブなどは、プログラム3のようなセンサを1つ使用するときと同じである。しかし、プログラム3とは異なり、交差点でセンサ1,3が白を感知したら止まることができる。



&ref(./200706201836000.jpg,25%,);



*感想 [#q5afc583]
***ロボット製作担当 ARX-8 LAEVATEIN [#g9393534]

 2回目の課題だけあって、前回よりもスムーズに作業を進めることができた。特に前回での失敗を反省して小さくシンプルに仕上げたことが功を奏したようだ。今回は車体の作成とプログラムの作成を分担したためそれぞれが効率よく作業ができた。ただ、このままだと自分の担当でない分野が疎かになるので次回は担当を交換しなければならないと考えている。
***プログラム作製担当 ユウジ [#p2228bf9]

いろいろなプログラムを組むことができよかった。最後のプログラムが実践できなく残念だった。タッチセンサの方は簡単にこなせた気がするが、やはり交差点の通過のプログラムは大変だった。どのプログラミングにもメリット、デメリットがあり一概にどれがいいとは言えない。他のチームのプログラミングを参考にして更にシンプルでいいプログラムを組みたい。

*コメントをどうぞ [#j6ed7f7c]
コメントをどうぞ [#j6ed7f7c]
#comment
-どこを改良したかを写真を使って説明しているので、とてもわかりやすいです。 -- [[ヒロヤ]] &new{2007-06-21 (木) 12:56:55};

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS