2011a

目次

課題3

内容

ボールを探し、ライトがあるところまで持っていくロボット。

ルール

周回コース(黒い線)上にあるボールを探し、運んでいく(又は飛ばす)ロボットを作成せよ。

周回コース(どのように進んでも良い)

メンバー紹介

ロボット紹介

<ロボット概要>

ライントレースをせず、紙の上を自由に動き回ってボールを探す。

ボールを見つけたらその場でライトを探し、持っていく(又は投げる)。

110721_145526.jpg

<センサー>

110721_145538.jpg

<車輪>

110721_145548.jpg

<上部>

110722_113713.jpg

<アーム部分>

110722_172417.jpg

<ギア>

プログラム紹介

安野

<ボールを蹴る>

#define GO(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define BACK(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_L(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_R(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);  
#define HOLD OnFwd(OUT_B); Wait(35);                                   //ボールを掴む
#define RELEASE OnFwd(OUT_B); Wait(35);Off(OUT_B);                     //ボールを離す 
task SEARCH()                                                        //ボールを探すプログラム
 {
  while(true)
    {
     GO(200);turn_L(50);
     }
  }
task MISSION()                                                       //ランタンにボール持っていくプログラム
 {
  int lmax=0;                                                                     //光の変数
  int tmax=0;                                                                     //時間の変数
  HOLD;                                                                           
  ClearTimer(0);                                                                  //タイマーをリセット
  while(FastTimer(0)<=400)         
    {
     OnFwd(OUT_A);
     OnRev(OUT_C);
     if(SENSOR_1>lmax)
       {
        lmax=SENSOR_1;tmax=FastTimer(0);                               //lmax、tmaxを随時更新
        }
      }
  turn_R(400-tmax);                                                  //ランタンがある方向に向く
  Wait(20);
  RELEASE;
  BACK(50);
  HOLD;
  GO(70);  
  }
task main()
 {
  SetSensor(SENSOR_1, SENSOR_LIGHT);
  SetSensor(SENSOR_2, SENSOR_TOUCH); 
  while(true)
    {
     start SEARCH;                                             //サーチプログラム始動
     until(SENSOR_2 == 1);
     stop SEARCH;                                              //サーチプログラム終了
     start MISSION;                                            //ミッションスタート
     Wait(1000);
     stop MISSION;                                             //ミッションコンプリート
     } 
   }

大庭

<ボールを掴んで持っていく>

#define MOVE(t) OnFwd(OUT_A+OUT_C); Wait(t);                    //直進  (関数を使う)
#define BACK OnRev(OUT_A+OUT_B); Wait(200);                     //2秒間後退
#define TURN(t) OnFwd(OUT_C);OnRev(OUT_A); Wait(t);             //右折
#define move(t) OnFwd(OUT_A+OUT_C); Wait(t);                    //直進
#define turn_R(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t);          //右折
#define turn_L(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t);          //左折
#define tomaru Off(OUT_A+OUT_C);                                //停止
#define tukamu OnFwd(OUT_B); Wait(50);                          //ボールをホールド
#define throw OnRev(OUT_B); Wait(50);                           //ボールを離す
task SEARCH()
{
 while (SENSOR_2==0){
    MOVE(200);                                     //タッチセンサーが押されてない間、自由に動き回ってボールを探す
    TURN(200);
    move(100);
    turn_R(100);
    MOVE(200);
    turn_L(100);
    move(100);
    TURN(200);
    }
}  
task MISSION()
{     
    tukamu;                                    //ボールをつかむ
    tomaru;
    Off(OUT_B);
    Wait(300);
  int lmax = 0;                                //光の変数
  int tmax = 0;                                //時間の変数
  ClearTimer(0);
  while(FastTimer(0)<800){                                //一周回り一番光の強い値を測定する(8秒間続ける)
          OnFwd(OUT_C);OnRev(OUT_A);                      //ランタンを見つける
          if(SENSOR_1>lmax){
          lmax = SENSOR_1;
          tmax = FastTimer(0);
           }
         }
    OnFwd(OUT_A); OnRev(OUT_C);                           //一番光の強い位置(ランタン)へ行く
    Wait(800-tmax);
    PlaySound(SOUND_UP) ;  Wait(20);
    MOVE(200);                                      //ランタンへ向かう
    throw;                                          //ボールを離す
    BACK;
}
task main()
{
   SetSensor(SENSOR_1,SENSOR_LIGHT);                //センサー1に光、2にタッチセンサーをセット
   SetSensor(SENSOR_2,SENSOR_TOUCH);
  while(true){
    start SEARCH;                                             //サーチタスクを開始
    until(SENSOR_2 == 1);                                     //タッチセンサが押されたら開始
    stop SEARCH;                                              //サーチタスクを終了
    start MISSION;                                            //ミッションタスクを開始
    Wait(1000);
    stop MISSION;                                             //ミッションタスクを終了
    }
}

まとめ

安野

今回の課題をやっていて気づいた問題は
タッチセンサーが上手く働かない
アームの動きを止めてしまうと、ボールを掴みきれない
の二点だった。
タッチセンサーの件は軽いタッチでも反応する様に、
かませる板とタッチセンサーの位置を工夫して解決。
アームの件はボールを掴んでいる間、常にモーター
を動かしつづける事で解決した。
今回は自分でも上手く出来たと思う。ロボット作りから
プログラムまでいろいろ大変だったけど、最終的にはス
ムーズに動いてくれて良かった。次はロボコン。頑張ります。

大庭

コメント



添付ファイル: file110722_172417.jpg 293件 [詳細] file110722_113713.jpg 263件 [詳細] file110721_145548.jpg 278件 [詳細] file110721_145538.jpg 245件 [詳細] file110721_145526.jpg 288件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-07-29 (金) 18:10:14