2019a/Member 目次

課題3

ピンポン玉または青と赤のボールを運搬して、所定の容器の中に入れる。

コース説明

コース

フィールドの説明

ルール

基本ルール

基本得点の計算方法

技術点の計算方法

ロボットの説明

容器の中のボールを入れるロボットと置いてあるボールを入れるロボットに分けて作りました.

ロボット1

前のアームで容器をつかめるようにした.

IMG5.JPG

容器を持ち上げたとき.

IMG3.JPG

容器をさらに上げてゴールへシュートした.

IMG4.JPG

ロボット2

アームを下げて輪ゴムでボールをキャッチできるようにした,

IMG6.JPG

ボールをキャッチしたとき.

IMG2.JPG

アームを挙げて上の棒で押し出してシュートするようにした.

IMG1.JPG

プログラムの説明

ロボット1

defineについて

#define RUN_TIME 610
#define power(s) SetPower(OUT_B,s);
#define STEP 5
#define turn OnFwd(OUT_A);OnRev(OUT_C);Wait(148);Off(OUT_AC);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);Wait(120);Off(OUT_AC);

ラインとレースについてのサブルーチン

sub tores()
{ SetSensor(SENSOR_2,SENSOR_LIGHT);
    ClearTimer(0);
    while ( FastTimer(0) <= RUN_TIME ) {    
       if ( 48 < SENSOR_2 ){
           OnFwd(OUT_A); Off(OUT_C);    //白なら右へ
       } else if (45 <SENSOR_2 < 49) {
           Off(OUT_A); OnFwd(OUT_C);    //灰色なら左へ
       } else {
           OnRev(OUT_A);OnFwd(OUT_C);    //黒なら左へ旋回
        } 
       
    }
 }

アームを下すサブルーチン

sub down()    
{
        OnFwd(OUT_B);
        power(0);    
        Wait(50);
        Off(OUT_B);
        Wait(100);
}

アームを1段階上げるサブルーチン

sub up1()   
{ 
       OnRev(OUT_B);
       power(0);    
       Wait(30);
       Off(OUT_B);
       Wait(100);
}

アームをさらに上げてシュートするサブルーチン

sub throw()   
{ 
        OnFwd(OUT_B);
        power(0);   
        Wait(80);    //アームをゆっくりさげる
        Off(OUT_B);
        OnRev(OUT_B);
        Wait(50);    //アームを素早くあげる
        Off(OUT_B);
}

メインのプログラム

task main()
{
        
        OnFwd(OUT_AC);    //地点Bまで前進
        Wait(100);
        tores();    //BからCまでのライントレース
        turn;    //ピンポン玉の入った容器のある方に向けて右に90度旋回
        OnRev(OUT_AC);    //少し後退してアームが容器に当たらないようにスペースをとる
        Wait(120);
        Off(OUT_AC);
        down();    //アームをおろす
        OnFwd(OUT_AC);    //前進してアームの間に容器を挟む
        Wait(130);
        Off(OUT_AC);
        up1();    //容器を持ち上げる(アームをあげる)
        OnRev(OUT_AC);    //そのまま後退して位置調整
        Wait(415);
        turn_left;    //左に90度旋回
        OnRev(OUT_AC);    //後退
        Wait(140);
        Off(OUT_AC);
        throw();    //運んでいた容器からピンポン玉を取り出し、別容器に移す
}

ロボット2

defineについて

#define RUN_TIME 700
#define turn OnFwd(OUT_A);OnRev(OUT_C);
#define turn2 OnFwd(OUT_C);OnRev(OUT_A);
#define go OnFwd(OUT_AC);
#define power(s) SetPower(OUT_B,s); //モータのパワーをsにする

アームを下げるサブルーチン

sub down()   
{ 
        OnRev(OUT_B);
        power(2);
        Wait(50);
        Off(OUT_B); 
} 

アームを1段階上げるサブルーチン

sub up()   
{
        OnFwd(OUT_B);   
        power(1);
        Wait(50);
        Off(OUT_B);
}

アームをさらに上げてシュートするサブルーチン

sub up2()   
{
        OnFwd(OUT_B);
        power(2);
        Wait(20);
        Off(OUT_B);
}

メインのプログラム

task main()
{
   go;Wait(110);Off(OUT_AC);    //A地点を出発して旋回する位置まで直進
   turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
   go;Wait(210);Off(OUT_AC);    //K′地点まで直進
   turn;Wait(70);Off(OUT_AC);    //右に90度旋回
   go;Wait(30);Off(OUT_AC);    //L′地点まで直進
   down();Wait(30);    //ピンポン玉を掴む(アームをさげる)
   up();Wait(30);    //ピンポン玉を掴んで保持しながらアームをあげる
   turn2;Wait(70);Off(OUT_AC);    //左に90度旋回
   go;Wait(10);Off(OUT_AC);  //前進して容器に近づく
   up2();Wait(30);  //ピンポン玉を押し出して容器にピンポン玉を入れる
   OnRev(OUT_AC);Wait(1000);Off(OUT_AC);    //後退してコースから外れる
}

結果

ロボット1のほうは電池を変えて角度が変わってできなかった. ロボット2のほうは輪ゴムのところがボールに当たったがうまく取れなかった.

まとめ

このゼミでdefineやサブルーチンなどを使ってロボコンに挑戦したが思ったようにうまくいかず残念だった.今度やる機会があったらロボットとプログラムを改良してうまくいくようにしたい.


添付ファイル: fileIMG2.JPG 86件 [詳細] fileIMG1.JPG 61件 [詳細] fileIMG6.JPG 60件 [詳細] fileIMG4.JPG 82件 [詳細] fileIMG5.JPG 84件 [詳細] fileIMG3.JPG 78件 [詳細] filemission3.png 70件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 11:09:03