2009a/MemberOnly/進行状況A

目次 

課題3

懐中電灯に向かってブロックを投げるロボットを作ること。

インストの「top secret」を参考にして、白いホイールを投げるロボットを作成し、以下の動きをするようにプログラムを作成せよ。 (重複しないように一人一つ以上のプログラムを作成すること)

1.全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。 方向を定めたのち、懐中電灯の30cm以内に近づかない範囲で必要な距離を移動してもよい。 懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。

2.懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、 懐中電灯の動きを止めれば一定の距離(懐中電灯から30cm以上離れた距離)まで近づいて 懐中電灯を狙ってブロックを投げる。

3.懐中電灯を動かしたとき懐中電灯に向かって進み、 見失った時には再び全方向から懐中電灯を探しだす。 7秒以上追尾できたら懐中電灯に向かってブロックを投げる。

懐中電灯の代わりに携帯のライトなどを利用してもよい。 モータ、光センサ、タッチセンサはそれぞれ2個まで使用可。 ただし、平面的な方向だけでなく懐中電灯の高さまで含めた方向を探す場合にはモータを3個使用してもよい。

ロボットについて

ロボットの構造

『全体』

コピー.jpg

『アーム部分』

CIMG0628.JPG

今回のアームは、遠心力をつかってブロックを投げるタイプを採用した。投げる長さの調整が少し難しかった。

『内部構造 〜ディファレンシャル ギア〜』

CIMG0625.JPG

少ないパーツで多くの部分を動かすためギアが複雑になったが、きれいに収まった。

『タイヤ 〜ギア部〜』

CIMG0626.JPG

タイヤ装着後↓

CIMG0623.JPG

プログラム

とさ犬のプログラム

動かないライトを探し出しブロックを投げる

#define  THRESHOLD 60

task main()
{
 SetSensor( SENSOR_1,SENSOR_LIGHT );           //センサー1が光ライトであることを定義
 SetSensor( SENSOR_3,SENSOR_LIGHT );           //センサー3が光ライトであることを定義

 while( true ){
  
    if ( SENSOR_1 > THRESHOLD ){             //センサー1が光を感知したら左に回る          
                   OnFwd(OUT_C);
                    
              }else{
                if ( SENSOR_3 > THRESHOLD ){   //センサー3が光を感知したら左に回る 
                   OnRev(OUT_C);
              }else{                          //光を感知しなければ右に回り続ける
                         OnFwd(OUT_C);}
  
    if ( (SENSOR_1 > THEREHOLD)&&(SENSOR_3>THEREHOLD)){              //センサー1と3が定義した閾値より大きくなったら少し前進してブロックを投げる
                         Off(OUT_C);
                         Wait(50);
                         OnRev(OUT_C);Wait(20);  
                         OnFwd(OUT_C);Wait(20);
                         Off(OUT_C);
                         OnFwd(OUT_A);
                         Wait(100);
                         Off(OUT_C);
                         break;
                         Off(OUT_C+OUT_A);
                             
     }
   }
}

Fe2+のプログラム

動く光に向かってブロックを投げる(課題3の2)

#define t 50 //閾値を定義
#define t2 60
task main()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1,3をライトセンサーにセット
 SetSensor(SENSOR_3,SENSOR_LIGHT);
  while (true) {//センサー1,3が定義した閾値より大きいとき前進//
      if((SENSOR_1> t)&&(SENSOR_3> t)){ 
      OnRev(OUT_C);Wait(20);  
      OnFwd(OUT_C);Wait(20);
      }//センサー1が定義した閾値より大きく、センサー3が定義した閾値より小さいとき左に//
     if ((SENSOR_1>t)&&(SENSOR_3<t)){
     OnRev(OUT_C);   
     }//センサー1が定義した閾値より小さく、センサー3が大きいとき右に//
     if((SENSOR_1< t)&&(SENSOR_3> t)){
     OnFwd(OUT_C); 
      }//センサー1,3が定義した閾値より大きくなったらブロックを投げて止まる//
      if((SENSOR_1> t2)&&(SENSOR_3> t2)){
      Off(OUT_C);
      Wait(13);                 
      OnFwd(OUT_A);
      Wait(15);
      OnRev(OUT_A);
      Wait(5);
      Off(OUT_A);
      break;
      Off(OUT_A+OUT_C);
      }
      if((SENSOR_1<t)&&(SENSOR_3<t)){//センサー1,3が定義した閾値より小さいとき右に
      OnRev(OUT_C);
      }
      }
}

感想

とさ犬

課題2の応用に頼ったところが多くあった。なので、新しい発見はあまりなかったけれど、このプログラミングをほぼ理解できたと思う。

Fe2+

前回はプログラミングに時間がかかったのに対し、今回はプログラミングが割とはやくた。しかし逆にロボットは、ディファレンシャルギアを使ったり、ロボットの面で工夫しなければならないことが、たくさんあり、その部分を改良するのに、特に時間がかかった。しかし今回の知識は、ロボコンに活かせる知識がたくさんあったのでぜひつぎは、つかってみたい。

コメント

コメントをどうぞ


本日の訪問者1
昨日の訪問者0
今日までの訪問者&counter([total|today|yesterday]);

添付ファイル: fileコピー.jpg 395件 [詳細] file090724_164940.JPG 237件 [詳細] fileCIMG0629.JPG 245件 [詳細] fileCIMG0628.JPG 444件 [詳細] fileCIMG0626.JPG 417件 [詳細] fileCIMG0625.JPG 419件 [詳細] fileCIMG0624.JPG 230件 [詳細] fileCIMG0623.JPG 408件 [詳細] fileCIMG0622.JPG 245件 [詳細] fileCIMG0609.JPG 231件 [詳細]

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