課題3の目次

課題内容

半径1m以内にある懐中電灯を探して、懐中電灯にピンポン玉を当てるロボットを製作しなさい。

ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよい。

ロボット本体の説明

ロボット全体の写真 アームの写真 前方から見たロボットの写真

ロボット本体はアーム以外課題2のものを流用している。

アームはモータBを使いロボット前面のタイヤが回転するようになっており、シュートの際にはタイヤを回転させることでボールを前方に押し出し、ボールが転がって進むことでシュートをするという形になるよう作成した。

プログラムの説明

マクロ

ロボットが懐中電灯の明かりを探すために必要となる動作を右旋回と左旋回として定義した。

そして、懐中電灯に向けてボールをシュートする動作を定義した。

#define turn_right OnFwd(OUT_A); OnRev(OUT_C);          //右旋回
#define turn_left OnFwd(OUT_C); OnRev(OUT_A);           //左旋回
#define shoot OnFwd(OUT_B); Wait(50); Off(OUT_B);       //ボールをシュートする

メインタスク

タイマー0を使ってロボットが1周するだけの時間右旋回を続けさせ、光センサーが最も明るい場所を見つけるたびにタイマー1をリセットする。

1周したのちタイマー1の時間だけ左旋回をすることでロボットが最も明るい場所に向くようにし、最後に懐中電灯の明るさが一定以上になるまで前進してシュートをする。

task main()
{
    SetSensor(SENSOR_2, SENSOR_LIGHT);
    int light_max = 0;
    int run_time = 300;
    int time_max = 0;
    ClearTimer(0);                             
    while(FastTimer(0) < run_time) {          
        turn_right;                               //run_timeの時間だけ右旋回
        if(SENSOR_2 > light_max) {
            light_max = SENSOR_2;                 //一番明るい値を記録する
            ClearTimer(1);                        //最も明るい地点まで進む時間を計る                           
        }
    }
    turn_left;
    time_max = FastTimer(1);
    Wait(time_max);                               //タイマー1の時間だけ左旋回
    Off(OUT_AC);                                  //一番明るい場所で止まる
    Wait(100);
    until(SENSOR_2 > light_max+5) {               //一定の明るさになるまで前進し懐中電灯に近づく
        OnFwd(OUT_AC);
    }
    shoot;
}

まとめ

今回の課題では前回と違ってボールをシュートする際にボールが直進して目標地点に到達するようにしなければならなかったのでそのためのロボットを製作することに多くの時間を使い大変苦労した。プログラムは例として示されたものに自分なりの工夫を入れ、目標地点になるべく近づいてからシュートすることで課題達成の確実性を上げることに成功した。最終的にはシュートの際、ボールを直進させ続けることは難しくシュートする場所を近づけることしかできなかったのでロボコンではまっすぐボールをシュートするロボットを作成していきたい。


添付ファイル: file1438149974069.jpg 91件 [詳細] file1438149971623.jpg 115件 [詳細] file1438149968394.jpg 96件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-11 (火) 23:47:07