2007a/MemberOnly/進行状況A

課題3:懐中電灯に向かってブロックを投げるロボット †

1.全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。

2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

3.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

ただし、モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。懐中電灯の代わりに携帯のライトなどを利用してもよい。

メンバー

 ARX-8/エルモ

ロボット

 今回は『一つのモーターで前進と方向転換をしなければならない』と『物を投げる部分の力が弱いため、力をいかにうまく伝達させるか』が非常に難しかった。また、前回と同様にデザインがうまくまとまるように努めた。

試作 1号機

SN330114.jpg

 試作なので外見や細かい部分は大して気にせずに思いつくがまま作った。車体の部分はHPの資料を参考にしたら割と簡単にできた。アームの部分は最初ギアをかませようと思ったがパワー不足だと思ったので直接モーターに接続した。

試作 2号機

SN330116.jpg

 試作 1号機では車体が低すぎて補助輪を付けると体勢が傾くため、タイヤをモーターより下に移動させてバランスをとった。アームの部分はタイヤを投げられるがあまり飛ばず、正直パワー不足だと思っている。

正式採用機

SN330118.jpg

 試作 2号機を動かしてみたところ、スピードが出過ぎていたのでタイヤの部分のギア比を変更し、遅くした。アームの部分のパワー不足はモーターから直接力を伝えるのではなく、てこの原理を応用することで解決した。

各部分の変化の詳細

*車体の変化

  HPの写真を参考にして、一つのモーターで直進と回転する構造を作成した。最初は、HPを真似して制作したので補助輪などの付属品を付けるとバランスが悪くなった。このため、モーターを上にずらしスペースを空けた。実際に動かしてみると動きが速すぎるためギアをかませ速度を落とした。

  SN330110.jpg→→→SN330115.jpg→→→SN330133.jpg

*アームの部分の変化

  最初はギアをかませてみたが力不足だったためモーターに直接接続した。それでも、力不足だったため、試行錯誤を繰り返し、最終的にはてこの原理を利用したような形になった。その他にも、投げると言うより打ち出すタイプや車体の横に取り付けたりするタイプも考えたが全体のバランスやデザイン、実現性を考慮したところ、この形になった。

  SN330111.jpg→→→SN330112.jpg→→→SN330122.jpgSN330121.jpg

*光センサー

  最初は光センサーを1個しか搭載してなかったが、光を探知しやすくするため2個に増やした。また、調整がしやすいように光センサーの角度を0〜90度変化できるようにした。実際に動かしてみると明暗を区別するのが非常に難しかった。そのため、光センサーにカバーをかけてみたが、ほとんど変化がなかった。 SN330134.jpgSN330131.jpg   

プログラミング(光センサー1個用)

担当:エルモ

(1)全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。

task main ()
  {
      SetSensor(SENSOR_1,SENSOR_LIGHT) ;    //光センサーを搭載
          
      while(true)
         {               
                if (SENSOR_1 < 50) ; //光が50よりも小さいとき 
              {
                 OnFwd (OUT_A) ;  //光を見つけるまで旋回する
                 Off (OUT_C) ;  //物を投げるモーターは停止
              }  
               
                if (SENSOR_1 >= 50) //光が50以上のとき
              {
                  OnRev (OUT_A) ; //直進する
                  Wait (200) ;
                  OnFwd (OUT_C) ;  //物を投げる 
                  Wait  (50) ;
                    
              }
             
        } 
    Off (OUT_A+OUT_C) ;       
  }                              

(2)懐中電灯をゆっくり動かしたとき懐中電灯に向かって進む。

task main ()
  {
      SetSensor(SENSOR_1,SENSOR_LIGHT) ; //光センサー搭載
          
      while(true)
         {               
                if (SENSOR_1 < 50) ; //光が50より小さい時
              {
                 OnFwd (OUT_A) ; //旋回 
                 Off (OUT_C) ;  //物を投げるモーターは停止
              }  
               
                if (SENSOR_1 >= 50) //光が50以上の時
              {
                  OnRev (OUT_A) ; //光を追いかけるために直進
                  Off (OUT_C) ; //物を投げるモーターは停止のまま   
              }
             
        } 
    Off (OUT_A+OUT_C) ;       
  } 

(3)懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

task main ()
  {
      SetSensor(SENSOR_1,SENSOR_LIGHT) ; //光センサー搭載
          
      while(true)
         {               
                if (SENSOR_1 < 50) ; //光が50より小さい時
              {
                 OnFwd (OUT_A) ; //旋回 
                 Off (OUT_C) ; //物を投げるモーターは停止 
              }  
               
                if (SENSOR_1 >= 50) //光が50以上の時
              {
                  OnRev (OUT_A) ; //光を追いかけ直進
                  OnFwd (OUT_C) ; //光に向かって物を投げる  
                  Wait  (50) ;
              }
             
        } 
    Off (OUT_A+OUT_C) ;       
  }              

初め光を追いかけて物を投げるロボットのプログラミングなんて全く検討もつかなかった。

何にも分からない状態からのプログラミングは本当に悩みました。何とかできたらから良かった。。。

プログラミング(光センサー1個用)

担当者:ARX-8

 task main()
  {
    SetSensor(SENSOR_1, SENSOR_LIGHT);//光センサー1搭載
    while (true) 
    {
        if (SENSOR_1 < 40 ){                                             //センサー1が40以下の光を感知
            OnRev(OUT_A) ;                                                //光を探して回転
        } else if((SENSOR_1 < 80 )&&(SENSOR_1 > 40 )){ //センサー1が40以上80以下の光を感知
           OnFwd(OUT_A);                                               //前進
        } else if(SENSOR_1 > 80 ){                                   //センサー1が80以上の光を感知
           Off(OUT_A);Wait(50);OnFwd(OUT_C);Wait(50);}   //止まって物を投げる
       
       
}
    }
 }

プログラミング(光センサー2個用)

(1)担当:エルモ

task main ()
  {
      SetSensor(SENSOR_1,SENSOR_LIGHT) ; //光センサー1搭載
      SetSensor(SENSOR_3,SENSOR_LIGHT) ;  //光センサー2搭載
              
      while(true)
         {               
                if ((SENSOR_1< 50) && (SENSOR_3< 50)) ; //センサー1もセンサー2も反応しない時
            {
                  OnRev (OUT_A) ; //旋回
                  Wait (200) ;
               Off (OUT_C) ; //物は投げない
             }     
                if ((SENSOR_1 >= 50) && (SENSOR_3 < 50)) ; //センサー1が反応、センサー2は反応しない時
              {
                 OnRev (OUT_A) ;  //旋回
                 Wait(200) ;
              Off (OUT_C) ; //物は投げない
             }  
                
                if ((SENSOR_1 < 50) && (SENSOR_3 >= 50)) ; //センサー1が反応せず、センサー2が反応する時
              {
                  OnRev (OUT_A) ; //旋回
                  Wait (200) ;
                  Off (OUT_C) ; //物を投げない  
               }
               
             if ((SENSOR_1 >= 50) && (SENSOR_3 >= 50)) ; //センサー1もセンサー2も反応する時
           {
              OnFwd (OUT_A) ; //直進
               Wait (200) ;
              OnFwd (OUT_C) ; //物を投げる
              Wait (50) ;
           }           
        } 
    Off (OUT_A+OUT_C) ;       
  }   

*工夫した点

モーターを2つしか使ってはいけないという規制がかけられたため、タイヤが同時に進むのでどうすればいいか分かりませんでした。まず光を見つけるために旋回するには普通に「OnFwd」なのか「OnRev」なのかを試行錯誤の上決めました。またもう一つのモーターは物を投げる用で、いいぐあいの勢いで物が投げれるようにするためモーターを0,5秒で止まるように工夫してみました。

担当者:ARX-8

task main() {

   SetSensor(SENSOR_1, SENSOR_LIGHT); //光センサー1搭載
   SetSensor(SENSOR_3, SENSOR_LIGHT); //光センサー1搭載 
  while (true) 
   {
      
        if((SENSOR_3 > 70 )&&(SENSOR_1> 70 )){           //センサ−1とセンサー3が70以上の光を感知
          Off(OUT_A);Wait(50);OnFwd(OUT_C);Wait(50);  // 0.5秒停止して、物を投げる
       } else if((SENSOR_1<45 )&&(SENSOR_3 <45)){      //センサ−1とセンサー3が45以下の光を感知
          OnRev(OUT_A);                //回転して光を探す。
       } else {                                                                //それ以外   
          OnFwd(OUT_A);               //前進
          }
       
       }
   

}

*工夫した点

 even if を多く使っていたが、else を使って一つにまとめた。光センサーの数値の設定が難しかった。

反省点

ARX-8

 プログラムについて相方からいくつか質問を受けたが、いくつか自分でもはっきりしない箇所があったので、自分も勉強不足だということに気付かされた。  プログラム自体はできたが、光センサーが明暗を判別しずらかったのでロボットを改良してはっきり区別できるようにさせたかった。今回は使う余裕が無かったが、サブルーチンやifをうまく使ってプログラムをより短く簡単にしたいと思った。  ロボットに関しては上でも述べた様に多くの改良すべき点が残っている。  

エルモ

 光を追いかけるプログラムが分からないので、昨年のレポートを参考にしていると、「go_light ; 」というっプログラミングがあると判明。さっそく自分たちのロボにも試してみたが、、結果上手くいかず。どうすればいいかわからなくなり、普通にひたすら直進するようにプログラミングをしました。

 他のグループのプログラミングを見てみると自分のとは比べ物にならないぐらい複雑な所があり焦りました。でも何とかこのプログラミングでも走るので。。。毎回毎回走らせてみると回転が早いとか光に反応しないなどの問題が発生し、そのたびに相方には良く助けてもらいました。

 課題が1、2、3とあり、それぞれプログラミングをしたが、なぜか2個目以降のプログラミングでは光が当たるとモーターの回転が遅くなり。。光を見つけてからの直進も進むには進むけれどなぜか徐々にしか前に進まず今だ原因は不明。分からなくてしばらく止まった時も。

 今回は主にプログラミング担当でロボットの作成にあまり関与できなかったのが相方に申し訳ない。

コメントをどうぞ


添付ファイル: fileSN330133.jpg 300件 [詳細] fileSN330134.jpg 280件 [詳細] fileSN330131.jpg 299件 [詳細] fileSN330116.jpg 289件 [詳細] fileSN330122.jpg 309件 [詳細] fileSN330121.jpg 287件 [詳細] fileSN330118.jpg 294件 [詳細] fileSN330115.jpg 282件 [詳細] fileSN330114.jpg 310件 [詳細] fileSN330112.jpg 296件 [詳細] fileSN330111.jpg 289件 [詳細] fileSN330110.jpg 308件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-09 (木) 23:22:28