2013b/Member

MISSION

基本ルール

ロボットの説明

route2.jpg

積み上げロボットが青のルートで缶を一つ持ってゴールで待機し、缶を運ぶロボットが赤のルートで缶を一つだけゴールに運ぶ

積み上げロボット

IMG_0696.JPG 缶を縦に二個掴みタイヤで押さえつける。 IMG_0698.JPG この二つのタイヤで缶を持ち上げる。 IMG_0689.JPG

モーターの出力が3つしかないため、直進しかできなくなりました。

収集ロボット

IMG_0687.JPG IMG_0693.JPG シンプルです。積むロボットとの関係上、缶一つだけしか運べないようにしました。

メンバー

プログラム

缶を積むロボット

定義

#define THRESHOLD 50 //閾値
#define HIPOWER 2 //高速
#define LOWPOWER 1 //低速
#define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速で動かす
#define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低速で動かす
#define go_forward(t) set_power_H; OnFwd(OUT_A); Wait(t); Off(OUT_A); //前進
#define go_back(t) set_power_L; OnRev(OUT_A); Wait(t); Off(OUT_A); //後進
#define can_hold(t)set_power_L; OnFwd(OUT_C); Wait(t);  //缶を掴む
#define can_up(t) set_power_L; OnFwd(OUT_B); Wait(t); Off(OUT_B); //缶を持ち上げる
#define can_down(t) set_power_L; OnRev(OUT_B); Wait(t); Off(OUT_B); //缶を下ろす
#define can_rerease(t) set_power_L; OnRev(OUT_C); Wait(t); Off(OUT_C); //缶を離す

サブルーチン(缶を積む)

 sub can_stack()
{    
   can_hold(100);
    go_back(30);
   go_forward(50);
   can_up(700);
   go_forward(200);
   can_down(200);
   can_rerease(60);
   go_back(1000);  
   
  }

メインのプログラム

task main()
{
 SetSensor(SENSOR_2, SENSOR_LIGHT);
       go_forward(600);
       Wait(3000); //缶を集めるロボットがいなくなるのを待つ。
       can_stack();
     }

缶を運ぶロボット

定義

#define THRESHOLD 40 //閾値
#define HIPOWER 3 //高速
#define LOWPOWER 2 //低速
#define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速で動かす
#define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低速で動かす
#define go_forward set_power_H; OnFwd(OUT_AC); //前進
#define turn_left1 set_power_L; OnFwd(OUT_C); OnRev(OUT_A); //左旋回
#define turn_left0 set_power_L; OnFwd(OUT_C); Off(OUT_A); //左折
#define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C); //右旋回
#define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT_C); //右折
#define time0 800
#define time1 700
#define time3 4000

サブルーチン

   sub line1() { 
             if (SENSOR_2 < THRESHOLD -5) { turn_right1; }
        else if (SENSOR_2 < THRESHOLD -3) { turn_right0; } 
        else if (SENSOR_2 < THRESHOLD +3) { go_forward; }
        else if (SENSOR_2 < THRESHOLD +5) { turn_left0; }
        else                              { turn_left1; } }
   sub line2() {
             if (SENSOR_2 < THRESHOLD +0) { turn_right1; }
        else if (SENSOR_2 < THRESHOLD +3) { turn_right0; } 
        else if (SENSOR_2 < THRESHOLD +5) { go_forward; }
        else if (SENSOR_2 < THRESHOLD +7) { turn_left0; }
        else                              { turn_left1; }  }
   sub uturn() { OnRev(OUT_AC); Wait(150); OnFwd(OUT_A); OnRev(OUT_C); Wait(100);} 
   sub line3() {  
             if (SENSOR_2 < THRESHOLD +0) { turn_left1; }
        else if (SENSOR_2 < THRESHOLD +3) { turn_left0; } 
        else if (SENSOR_2 < THRESHOLD +5) { go_forward; }
        else if (SENSOR_2 < THRESHOLD +7) { turn_right0; }
        else                              { turn_right1; }  }

メインのプログラム

   task main ()
   {
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     turn1();                                           //最初にターン
     ClearTimer(0);                                     
     while (FastTimer(0) <= time0) { line1(); }         //time0が終わるまでline1を実行
     ClearTimer(0);
     while (FastTimer(0) <= time1) { line2(); }         //time1が終わるまでline2を実行
     uturn();                                           //空き缶を運び終わり、Uターン
     ClearTimer(0);
     while (FastTimer(0) <= time3) { line3(); }         //time3が終わるまでline3を実行
     OnRev(OUT_AC); Wait(150);             //空き缶を置いて後退   
     Off(OUT_AC);   
   }

感想

 はじめは缶を掴み、そのアームごと持ち上げて積むロボットを作ったが、モーターが重すぎて持ち上げることができなかったため、断念せざるを得なかった。ロボットの製作に時間がかかってしまい、プログラミングがお粗末なものになってしまった。本来ならば、二台のロボットが通信して缶を積みたかった。ロボコン本番では収集ロボットがうまく動いてくれず残念ではあったが、積み上げロボットだけで15点を獲得できたのは嬉しかった。機械ロボット学系としてこの授業を受けることができたのは、近い将来にきっと役に立つと思う。


添付ファイル: fileroute2.jpg 322件 [詳細] fileIMG_0693.JPG 302件 [詳細] fileIMG_0687.JPG 294件 [詳細] fileIMG_0689.JPG 302件 [詳細] fileIMG_0698.JPG 302件 [詳細] fileIMG_0696.JPG 291件 [詳細] fileroute.JPG 315件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-02-06 (木) 18:04:21