2009a

目次

課題3 懐中電灯に向かってホイールを投げるロボットの作成

課題内容

 (1)、全方向から懐中電灯の方向を探しだし、懐中電灯を狙ってブロックを投げる。懐中電灯は動かさないが、いろいろな距離や方向にある懐中電灯に対応できるロボットにすること。

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

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

僕たちは課題(1),(2)を選びました。

ロボット作成

車輪部分

三輪ということで、非常に悩みましたが、結果的に先生の紹介をもとに作り上げました。

090715_1801~01.jpg

本体

車体に合わせた結果、非常にシンプルな形に仕上げました。

そのためスムーズな動きが可能となりました。

光センサーは車体の前方に2個つけました。

090715_1802~03.jpg

投射部分

重量を考えた上で、あまりロボットに負担のかからない形に仕上げました。

090715_1802~01.jpg

ストッパーの位置や大きさに悩み、微調整が大変でした。

090715_1802~02.jpg

投げる様子はこんな感じです。最高点で飛ばせるようにしました。

090715_1857~01.jpg

プログラム紹介

Y.Y作成(1)

#define round_time 120  //一周に要する時間

 task main()
 {
 SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ−1を光センサーと定義
 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサ−3を光センサーと定義
 ClearTimer(0);
 int n ; //光の最大値
 n=0;
 
 while(Timer(0) < round_time)  //一周するまでの間
  {
      OnFwd(OUT_A); //右に旋回する
         if(SENSOR_2 > n) 
         { 
	       n=SENSOR_2;  //光の最大値を記憶する
         }
  }
 if(SENSOR_2 < n)  //光の最大値より暗いとき
  {
      OnFwd(OUT_A);  //右に旋回する
  }
 if(SENSOR_2 >= n-10)  //光の最大値とほぼ同等のとき
  {
      OnFwd(OUT_C);  
      Wait(30);
      Off(OUT_C);  //投げる
  }

 

Match作成(2)

#define light 60    //光の方向を探すための光の大きさを定義
#define round_time 120    //一周する時間を定義
#define move_time 400    //光停止後の動く時間を定義

task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);      //センサー1を光センサーと定義
SetSensor(SENSOR_3,SENSOR_LIGHT);    //センサー3を光センサーと定義
 ClearTimer(0);    //タイマーを初期化
  until(Timer(0)>round_time)    //一周するまでに光があれば追跡し、なければ次へ
 {
  until((SENSOR_1>light)&&(SENSOR_3>light))
   {
    OnFwd(OUT_A);
    ClearTimer(0);
   }
  until((SENSOR_1>light)&&(SENSOR_3>light))
   {
    OnRev(OUT_A);
    ClearTimer(0);
   }     
 }
    ClearTimer(0);    //タイマーを初期化
    while(Timer(0)<move_time)
  {
    OnRev(OUT_A);Off(OUT_A);      //直進し、懐中電灯に近づきホイールを投げる
    OnFwd(OUT_C);Wait(30);Off(OUT_C);    
  }

工夫した点

ライトセンサーを2個つけることで、光の感度をよくしました。

上記のようにストッパーの微調整に力を入れ、うまくホイールが飛ばせるようにしました。

感想

今回は期間が短かったので大変でしたが、先輩のプログラムや先生の紹介のおかげでどうにか作り上げることができました。

ロボコンでもこれまでと同様に頑張りたいです。

コメント欄

ご自由にどうぞ^^

  • ループについて、nが1より小さいという条件でまわすループでなく、無条件で繰り返すループで、現在「n=n+1;」があるところに「ループを抜ける」という意味の命令を書いたほうが、楽な気がします(何回も投げる場合は別ですが)。それと、光センサーはロボットのどこにつけたのでしょうか? -- こさか? 2009-07-17 (金) 04:15:29
  • •松本先生曰く、今回の課題は絶対的に明るい方向を探すのではなく、変数を用いて相対的に最も明るい方向を探す課題だそうです。つまり、一つ目のプログラムだと、懐中電灯に近い方向にも投げてしまう恐れがあります。また、二つ目では懐中電灯は左右に動きながら逃げていきます。たとえば、懐中電灯が右に来たときどう追跡するのでしょうか? -- FI? 2009-08-05 (水) 13:47:41
  • 一つ目はセンサの番号について混乱しています。課題2では懐中電灯は左右に逃げていくのではないでしょうか -- FI? 2009-08-12 (水) 20:45:10


添付ファイル: file090715_1857~01.jpg 284件 [詳細] file090715_1802~03.jpg 246件 [詳細] file090715_1802~02.jpg 286件 [詳細] file090715_1802~01.jpg 273件 [詳細] file090715_1801~01.jpg 271件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-12 (水) 20:45:10 (3662d)