2015a/MemberOnly

目次

ライントレース 移動中.JPG

課題

2015a-mission2 コース.png

ロボットの光センサーを利用して、図の「B」の地点から「A」の地点まで 黒線を追いながら移動するライントレース。

途中球をキャッチして最後、Aに設置してあるゴールに球をシュートする。

全体の流れ(問題へのアプローチの仕方)

2015a-mission2 コース 改.png

通常の直線、曲線では黒線と白紙の境界を行き来するプログラムによって移動するが、それでは越えられない問題のあった3つの難所についてはカウンターを用いて識別し、それぞれ別の方法で移動するように過程を分けることで進ませようとした。

…廠僖ーブ

黒線よりの境界を行き来するようにして極力

交差点を終えた部分からは通常のカーブと直線だけなので交差点終了後にタイマーを起動することで正確に起動するようになった。

ロボット及び制作の過程

全体 横から.JPG裏返し センサー.JPG

ロボットの作成は付属の説明書にあるライントレーサーにセンサーとモーターの距離を近くしてより正確に動くように改良を施し、アームを取り付けるための改造を施した。後ろに主機、モーター2つが集まっているため後方に重さが偏っている問題がある。これは走行に影響があるほどではなかったのでそのままにしたが前輪の固定が足りずたまに外れてしまう問題があった。この原因はパーツ不足だが後輪の動きが良く、頻度も低かったので放置した。

アーム

正面からのアーム.JPGアーム解説用.JPG

クワガタの顎のような形のアーム。もっとも苦労したのはこのアームの取り付けで主機を付け変え、そのスペースにモーターを入れて前に出すぎず固定できた。

このアームの利点はギアの噛み合わせがしっかりとしていて安定していることと、大きくはさみこむため少々ずれたとしても問題なく動作すること、縦に幅を持たせて球がすり抜けないようになっている事である。

後輪

IMG_0448.JPG

さまざまな方向に移動する主機の移動についていくための後輪。360度回転でき、どんな移動に対しても動作する事が出来る。難点としては特定のパーツを使いすぎ前輪不安定につながった点。

プログラム

様々な問題そして解決のための方法も多様化したため前回と比べ物にならない複雑さとなった。全体としてはサンプルの交差点を渡るプログラムを参考にしつつ、全体を

…廠僖ーブまで

交差点気泙

8鮑硬性兇泙

ず埜紊龍弊からシュートまで

の3つのセクションに分けて取り組んだ。

定義

長いプログラムとなったため以下のような多くの定義を用いた。

#define Lblack 30 //暗い黒
#define Sblack 38//薄い黒
#define Lwhite 60  //明るい白
#define Swhite 52 //暗めな白
#define SPEED_ST 40//直線での速度
#define SPEED_CR 25//曲線での速度
#define OnRL(sR,sL) OnFwd(OUT_B,sR);OnFwd(OUT_C,sL); //左速度sL、右速度sRでの移動
#define go_ST OnRL(SPEED_ST,SPEED_ST); //直進
#define turn_L0 OnRL(SPEED_CR,0);//左折
#define turn_L1 OnRL(SPEED_CR,-SPEED_CR); //左旋回  
#define turn_R0 OnRL(0,SPEED_CR);//右折
#define turn_R1 OnRL(-SPEED_CR,SPEED_CR);//右旋回
#define STEP 1
#define OTO PlaySound(SOUND_UP); //動作確認用の音
#define ARMOPEN RotateMotor(OUT_A,40,90); //アーム開
#define ARMCLOSE RotateMotor(OUT_A,-40,90);//アーム閉
#define KOUSATEN1 Off(OUT_BC);ARMCLOSE;RotateMotor(OUT_BC,40,100);OTO;//最初の交差点の動作
#define KOUSATEN2 Off(OUT_BC);RotateMotor(OUT_BC,40,100);OTO;//二番目の交差点での動作
#define SHOT OTO;OnFwd(OUT_BC,80);Wait(2500);//シュート

メインタスク

task main(){
    SetSensorLight(S3); //センサー起動
    int white=0;//白検出回数の変数定義
    while(white==0){
        if(SENSOR_3<Lblack){
            turn_R0;//線の内側まで来てしまったときちょっと右に
        }
        else if(SENSOR_3<Sblack){
            go_ST;//境界近くの黒線にあるときそのまま真っ直ぐ
        }
        else if(SENSOR_3<Swhite){
            turn_L1;//境界近くの白紙側にあるとき旋回して左に
        }
        else if(SENSOR_3<Lwhite){//明るい白を検出したら,瞭虻遒離廛蹈哀薀爐魑動
            go_ST;//1.直進
            Wait(100); 
            RotateMotor(OUT_B,40,100);//2,直角に合わせ旋回して方向転換
            RotateMotor(OUT_C,-40,100);
            white++;//3,変数の値を増やし次のプログラムが起動するようにする
        }
        Wait(STEP);
    }            
    while(white==1){//交差点気鯆眠瓩垢襪泙任瞭虻
        if(SENSOR_3<Lblack){//交差点と判断し動作を開始
            KOUSATEN1;//交差点気鯆眠瓩垢詁虻
            white++;//変数の値を増やし次のプログラムが起動するようにする
        }
        else if(SENSOR_3<Sblack){//線の内側近くなったとき右に旋回移動
            turn_R1;
        }
        else if(SENSOR_3<Swhite){//外側よりの境界を進む
            go_ST;
        }
        else if(SENSOR_3<Lwhite){//外側に反れたとき左に移動
            turn_L0;

  }

        Wait(STEP);

  }

    long t0=CurrentTick();//交差点気鯆眠瓩靴討らの時間を計測
    while(white=2){
        if(SENSOR_3<Lblack&&CurrentTick()-t0>11000){//気鯆眠瓩11秒経ち濃い黒を検出したら交差点兇箸澆覆
           KOUSATEN2;//交差点兇魄榮
           white++;//変数の値を増やし次のプログラムが起動するようにする
        }
       else if(SENSOR_3<Sblack){//white==1の時と同じ移動をする
           turn_R1;
       }
       else if(SENSOR_3<Swhite){//white==1の時と同じ移動をする
           go_ST;
       }
       else if(SENSOR_3<Lwhite){//white==1の時と同じ移動をする
           turn_L0;
       }
       Wait(STEP);
   }
    long t1=CurrentTick();//交差点兇鯆眠瓩靴討らの時間を計測
    while(white==3&&CurrentTick()-t1>10000){//10秒経つまで通常のライントレース
    if(SENSOR_3<Lblack){
        turn_R1;
    }
    else if(SENSOR_3<Sblack){
        turn_R0;
    }
    else if(SENSOR_3<Swhite){
        go_ST;
    }
    else if(SENSOR_3<Lwhite){
        turn_L0;
    }
    Wait(STEP);
    }
    SHOT;//シュート!
}
       

感想

前回とは逆に作成よりもプログラミングで非常に苦しんだ。

例で解決方法が色々示されていたもののそのままでは正確に動かず、最終的に全体を細かく区切って誤作動を少なく出来たものの長くなってしまったのが心残りだった、

しかし、新たなコマンドの方法を多く学べ、問題に対しても様々なアプローチが出来、他の班員と意見を交換し一緒に協力して取り組めたのはいい点だった。

  その点は次回にも引き続き取り組んでいきたい。

ライントレースアーム開け! (1).JPG


添付ファイル: fileアーム解説用.JPG 109件 [詳細] fileIMG_0448.JPG 126件 [詳細] fileアーム 上から.JPG 58件 [詳細] file裏返し センサー.JPG 114件 [詳細] file全体 俯瞰.JPG 52件 [詳細] file全体 横から.JPG 110件 [詳細] file正面上からのアーム.JPG 68件 [詳細] file正面からのアーム.JPG 124件 [詳細] file後輪.JPG 46件 [詳細] fileライントレースアーム開け! (1).JPG 110件 [詳細] fileライントレース 移動中.JPG 128件 [詳細] fileななめ向きからのアーム.JPG 122件 [詳細] file2015a-mission2 コース 改.png 129件 [詳細] file2015a-mission2 コース.png 155件 [詳細]

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