目次

課題

黒い線に沿って動くロボット

各チームで作成したコースに沿って動くロボットを作成せよ。ただし、

速さと正確さを追求すること
交差点で優先側を走っていない場合には、一時停止すること
前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと
コースを3周したら自動的に止まること

課題を行うにあたって

以下の動作をするロボットを製作する

・光センサーを用い、進行状況に応じて方向を変える

・タッチセンサーによって他のロボットとの接触を感知する

・交差点の数を認識し、3周すると自動で停止する


コース

TS3H0076.JPG

ロボットの説明

全体

TS3H0073002.JPG

今回の課題は小刻みの方向転換を繰り返すことを想定してタイヤを用いた。
「三輪」という案もでたが他のセンサーのスペースを考慮し、
「四輪」が最も安定すると判断した。

前から見た状態

TS3H0074001.JPG

ラインを挟むように光センサーを取り付けた。
これによってロボットがラインから外れるのを防止しスムーズにカーブを曲がることができる。
マジックによる光の反射を考慮して光センサーを限界まで本体に近づけ光が入ってこないようにした。

下から見た状態

TS3H0073001.JPG

写真より、光センサーの幅は約4.0センチ。
ラインの幅にあわせ、若干の余裕をもたせた絶妙な距離である。
今回の課題のなかでは光センサーの幅の調節が特に難しかった。
広すぎると隣のコースのラインを読み取ってしまう。
逆に狭すぎると2つともラインを読み取ってしまった。


光センサー

TS3H0073.JPG

写真の赤丸で囲ったのが光センサーである。
製作する過程で何度も光センサーの高さ・幅を変更しなければならず
その度、光センサーを組み替えるのは手間がかかった。
そのため「光センサーの高さ・幅を自由に変えられる設計にすればよかった」と後悔している。

タッチセンサー

TS3H0074.JPG

今回のロボットは前方に光、タッチセンサーを取り付けなければならなかった。
そのため二つのセンサーうまい具合に取り付けることができず、タッチセンサーの小型化に努めた。
またプログラムの性質上、曲がるときなどに機体が激しく揺れてしまうので、アーム部分も必要最低限まで軽量化を図ったが、結局、誤作動するときはするのでてっとり早く、バネ的な役割をするゴムを強くした。


プログラム

プログラムの概略

図1修正.png

ラインに沿って進むプログラム

task main ()
{
   SetSensor(SENSOR_1, SENSOR_LIGHT);            //センサー1に光センサーをセット
   SetSensor(SENSOR_2, SENSOR_TOUCH);                        //センサー2にタッチセンサーをセット
   SetSensor(SENSOR_3, SENSOR_LIGHT);                        //センサー3に光センサーをセット
while(true)
{
while (SENSOR_2==0)
{
     if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD))    //左右の光センサーがどちらもラインを感知しない場合
         {   OnFwd(OUT_A+OUT_C);                             //前進
         }
     if(SENSOR_3 < THRESHOLD)                                //右側の光センサーがラインを感知した場合
         { OnFwd(OUT_A);                                     //右に進路変更
           OnRev(OUT_C);
         }
     if(SENSOR_1 < THRESHOLD)                                //左側の光センサーがラインを感知した場合
         { OnFwd(OUT_C);                                     //左に進路変更
           OnRev(OUT_A);
         }
     if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))    //左右の光センサーがラインを感知した場合(交差点)
         {   Off(OUT_A+OUT_C)  ;                             //一時停止
              Wait(50);
             OnFwd(OUT_A+OUT_C) ;                            //前進&交差点を渡る
             Wait(70);
         }
   }

他のロボットと接触した時のプログラム

while(SENSOR_2==1)                                           //タッチセンサーが押される(他のロボットと接触)
{
  Rev(OUT_A+OUT_C);                                          //後進
  Wait(30);
  Off(OUT_A+OUT_C);                                          //相手が過ぎ去るのを待つ
  Wait(255);
  OnFwd(OUT_C+OUT_A);                                        //移動再開
 }

3周すると停止するプログラム

task main()
{
int count;                                                   //変数として「count」を定義
count=0;                                                     //「count」の初期値を0とする
int count_max=X;                                             //[X]には任意の値を代入(3周するなかでの交差点の総数)
   while (count<count_max);                                         //X以下のときの動作
   { if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))
         {   Off(OUT_A+OUT_C)  ;
             Wait(50);
             OnFwd(OUT_A+OUT_C) ;
             Wait(70);
             count=count+1;                                  //交差点を通過するたびに「count」の値が1ずつ増加
         }
   }
Off(OUT_A+OUT_C);                                            //「count」の値がXに達すると停止
}

改善点

課題中に浮かんだが実際には使われなかったアイデアを紹介する

光センサーを可動式に

改善点.jpg

光センサーをシャフトに取り付けラインの幅に応じて移動させる。
これにより光センサーの幅を変えやすくなり、
短時間で自分たちの作ったコース以外にも対応させることができる。
つまり汎用性が格段に上がる

タッチセンサーを2つ使う

コードの有効活用.jpg

今回は光センサーを2個使うためセンサーを3つまでしか使えないこのロボットでは1つのタッチセンサーしか使えない。
そのためダブルセンサーを使うことができずにいた。
だが、上の図を方法を使うことで2つのタッチセンサーを使うことに成功した。
同様の方法で光センサーも一本のコードで接続できる。

欠点は1本のコードにつないだ2つのセンサーはそれぞれを異なるプログラムで動かせないことだ

コメント

コメントをお願いします



添付ファイル: fileコードの有効活用.jpg 160件 [詳細] file改善点.jpg 168件 [詳細] fileTS3H0073002.JPG 197件 [詳細] fileTS3H0075.JPG 77件 [詳細] fileTS3H0076.JPG 228件 [詳細] file図1修正.png 157件 [詳細] file図1.png 77件 [詳細] fileTS3H0074001.JPG 220件 [詳細] fileTS3H0073001.JPG 146件 [詳細] fileTS3H0074.JPG 145件 [詳細] fileTS3H0073.JPG 152件 [詳細]

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