はじめに

今回の課題は黒いラインをトレースしてゴールにシュートするロボットをつくるというもので、私はBからAのコースを移動するロボットを作成しました。

コース.png

ロボットの概観

タイヤを支えている棒にブロックを取り付け、車体の正面に取り付けられるようにしました。センサーが車体から遠くにあると曲がり切れないので車体自体を改良し、なるべく近くに取り付けることで細かいカーブも曲がることができました。しかし、アームとセンサーが接着面積が小さく簡単に取れてしまうので走らせるたびにつけなおさなければいけませんでした。アームに関しては、モーターをアームに直接つなぐと動きが速すぎて部品が外れてしまったので、ゆっくり動かすために間に歯車をつなぎ、らせん状のパーツを使うことでモータが動くと歯車が連動するようにしました。画像のようにピンポン玉を移動させるために横から挟み込めるようにしました。

1437033944047.jpg

プログラム

#define go OnFwd(OUT_AC);//直進
#define right OnFwd(OUT_A);//右にゆるやかに進む
#define left OnFwd(OUT_C);//左にゆるやかに進む
#define turnright OnRev(OUT_C);OnFwd(OUT_A);//右に旋回
#define turnleft OnRev(OUT_A);OnFwd(OUT_C);//左に旋回
#define open OnRev(OUT_B);Wait(100);//アームを開く
#define close OnFwd(OUT_B);Wait(100);//アームを閉じる


task main()
{
        SetSensor(SENSOR_3,SENSOR_LIGHT); 
        ClearTimer(0);
        while (FastTimer(0) < 23) {
                if(SENSOR_3>50){
                        turnleft;
                        ClearTimer(0);
                }
                else if(SENSOR_3>46){
                             left;
                             ClearTimer(0);
                     }
                     else if(SENSOR_3>39){
                                  go;
                                  ClearTimer(0);
                          }
                          else if(SENSOR_3>35){
                                       right;
                               }
                               else{
                                       turnright;
                               }
        }
        Off(OUT_AC);
        Wait(200);
        close;Off(OUT_B);
        left;Wait(30);
        ClearTimer(0);
        while (FastTimer(0) < 31) {
                if(SENSOR_3>50){
                        turnleft;
                        ClearTimer(0);
                }
                else if(SENSOR_3>46){
                             left;
                             ClearTimer(0);
                     }
                     else if(SENSOR_3>39){
                                  go;
                                  ClearTimer(0);
                          }
                          else if(SENSOR_3>35){
                                       right;
                               }
                               else{
                                       turnright;
                               }
        }
        Off(OUT_AC);
        Wait(200);
        left;
        Wait(30);
        ClearTimer(0);
        while (FastTimer(0) < 25) {
                if(SENSOR_3>50){
                        turnleft;
                        ClearTimer(0);
                }
                else if(SENSOR_3>46){
                             left;
                             ClearTimer(0);
                     }
                     else if(SENSOR_3>39){
                                  go;
                                  ClearTimer(0);
                          }
                          else if(SENSOR_3>35){
                                       right;
                               }
                               else{
                                       turnright;
                               }
        }
        Off(OUT_AC);
        OnRev(OUT_A);
        Wait(25);
        Off(OUT_AC);
        open;
        Off(OUT_AC);
        go;
        Wait(25);
        Off(OUT_ABC);	 
}

説明

全体として

今回のプログラムはラインの右側を沿って動くようにしました。ライントレースに関しては、光センサーの値が>50のときは左に旋回、>46のときは左にカーブ、>39のときは前進、>35のときは右にカーブ、35>のときは右に旋回、というように条件を4つ設けることで滑らかに走行できるようにしました。カーブに緩急があったので、交差点を認識するのに必要な時間を調整しました。交差点では、右に曲がる以外の動作の時に時間をリセットすることで、連続で右に曲がる時間を計って交差点を認識させました。

無題.png

,砲弔い

while (FastTimer(0) < 23) {
        if(SENSOR_3>50){
                turnleft;
                ClearTimer(0);
        }
        else if(SENSOR_3>46){
                     left;
                     ClearTimer(0);
             }
             else if(SENSOR_3>39){
                          go;
                          ClearTimer(0);
                  }
                  else if(SENSOR_3>35){
                               right;
                       }
                       else{
                               turnright;
                       }
}
Off(OUT_AC);
Wait(200);
close;
Off(OUT_B);
left;
Wait(30);
ClearTimer(0);

タイマーで交差点を認識させた後2秒停止し、左方向に動かすことで交差点を直進しました。その後もう一度タイマーをリセットし次のライントレースに影響が出ないようにしました。交差点の手前に直角に曲がる場所があるため交差点に入る角度が浅くなり交差点と認識しないことがありました。解決策として交差点と認識する時間を短くすることで成功させることができました。

△砲弔い

while (FastTimer(0) < 31){
        if(SENSOR_3>50){
                turnleft;
                ClearTimer(0);
        }
        else if(SENSOR_3>46){
                     left;
                     ClearTimer(0);
             }
             else if(SENSOR_3>39){
                          go;
                          ClearTimer(0);
                  }
                  else if(SENSOR_3>35){
                               right;
                       }
                       else{
                               turnright;
                       } 
}
Off(OUT_AC);
Wait(200);
left;
Wait(30);
ClearTimer(0);

途中のカーブが急だったので交差点の認識時間を長くしました。その他は,汎韻犬任后

とい砲弔い

while (FastTimer(0) < 25) {
        if(SENSOR_3>50){
                turnleft;
                ClearTimer(0);
        }
        else if(SENSOR_3>46){
                     left;
                     ClearTimer(0);
             }
             else if(SENSOR_3>39){
                          go;
                          ClearTimer(0);
                  }
                  else if(SENSOR_3>35){
                               right;
                       }
                       else{
                               turnright;
                       }
}
Off(OUT_AC);
OnRev(OUT_A);//三叉路に垂直に向かうために
Wait(25);
Off(OUT_AC);
open;
Off(OUT_AC);
go;
Wait(25);
Off(OUT_ABC);

い離轡紂璽箸鬚垢襪箸は三叉路を認識した後左の車輪を後転させることで三叉路に垂直に向かい合ってアームを開き前進することでシュートをしました。

感想・まとめ

プログラミングに関しては難しくグループ内で教えてもらいながらなんとか成功させることができた。初めの置き場所や動力の差などの小さな変化の影響で成功率は50%ぐらいだった。特に,猟廠僂剖覆った後の交差点の認識ができないことが多かった。つぎはもっと安定感のあるロボットを作りたいと思った。授業外の時間も多く利用したこともあって、成功したときはとてもうれしかった。今後も仲間と協力して頑張っていきたいと思う。


添付ファイル: file無題.png 83件 [詳細] fileコース.png 94件 [詳細] file1437033947092.jpg 44件 [詳細] file1437033944047.jpg 95件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-12 (水) 14:25:58 (1475d)