課題

2019a/Mission2

2019a-mission2.png

私は以下のルートで走行するロボットを作成した。

A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E → F → G(一時停止の後、右折) → H → I → J(右折) → K(左折) → L(ピンポン玉をつかむ) → K(直進) → M(一時停止) → シュート→ A地点に入る(ゴール)

ロボットの構造

ロボット全体の構造

レゴのクラフトガイドを参考にタイヤと光センサーを付け、そこにアームの部分を取り付けた。

image1.jpeg

アームの構造

ピンポン玉をすくい取るような機構にした。ピンポン玉まで進みアームを上げるとピンポン玉が持ち上がる。

image3.jpeg

プログラム内容

ライントレースの方法

図のように光センサーの取る値に対するロボットの動きを5段階に分けることでライントレースをできるようにした。

hikari3.png

交差点での止まり方

hikari5.png

△茲蠅皚,諒が長い時間、線上を通るので、光センサーの値が38を取る時間が一定以上になったらロボットが止まるようにした。

#define

5段階に分けた光センサーの取る値

#define BLACKS 38
#define BLACK 45
#define THRESHOLD 53
#define WHITE 60
#define WHITES 68

光センサーに対応したロボットの動き

#define left_s OnFwd(OUT_A,20);OnRev(OUT_B,20);
#define left OnFwd(OUT_A,20);Off(OUT_B);
#define right_s OnFwd(OUT_B,20);OnRev(OUT_A,20);
#define right OnFwd(OUT_B,20);Off(OUT_A);
#define forward OnFwd(OUT_AB,20);

サブルーチン

線の左側をライントレースするプログラミング

sub follow_line_left()
{
   SetSensorLight(S3);
  
   long t0=0,t1=0,time_max=2;

   while(t1-t0<time_max){
       if(SENSOR_3<BLACKS){
           t0=CurrentTick();
           left_s;until(SENSOR_3<THRESHOLD);
           t1=CurrentTick();
       }else if(SENSOR_3<BLACK){
           left;
       }else if(SENSOR_3<THRESHOLD){
           forward;     
       }else if(SENSOR_3<WHITE){
           right;
       }else if(SENSOR_3<WHITES){
           right_s;
       }
    }
    Off(OUT_AB);
    Wait(1000);
} 

線の右側をライントレースするプログラミング

sub follow_line_right()
{
   SetSensorLight(S3);
  
   long t0=0,t1=0,time_max=2;

   while(t1-t0<time_max){
       if(SENSOR_3<BLACKS){
          t0=CurrentTick();
           right_s; until(SENSOR_3<THRESHOLD);
           t1=CurrentTick();
       }else if(SENSOR_3<BLACK){
           right;
       }else if(SENSOR_3<THRESHOLD){
           forward;     
       }else if(SENSOR_3<WHITE){
           left;
       }else if(SENSOR_3<WHITES){
           left_s;
       }
   }
   Off(OUT_AB);
   Wait(1000);
}

メインプログラム

task main()
{
    long t=1000;
    forward;
    Wait(1000);     //Aから出る。
    follow_line_left();     //BからCを通りDで止まる。
    forward;
    Wait(t);     //Dの交差点を渡る。
    follow_line_left();     //DからEを通りFで止まる。
    right;
    Wait(t);     //Gで方向転回。
    follow_line_right();     //GからHまで移動。
    repeat(2){
        forward;
        Wait(t);
        follow_line_right();
    }     //HからIを通りJで止まる。
    right_s;
    Wait(t);
    follow_line_right();     //JからKまで移動。
    left_s;
    Wait(t);      //Kで方向転換。
    follow_line_left();      //KからLに移動。
    OnRev(OUT_C,20); 
    Wait(500);     //ボールをすくい取る。
    left_s;
    Wait(4000);      //Lで方向転換。
    follow_line_right();      //LからKに移動。
    forward;     
    Wait(2000);     //交差点を渡る。
    follow_line_right();     //KからMに移動。
    OnFwd(OUT_C,20);
    Wait(500);      //ボールを下ろす。
    OnRev(OUT_AB,20);
    Wait(500);
    OnFwd(OUT_AB,100);
    Wait(t);     //シュート。
    Off(OUT_AB);      //停止。
}

反省・感想

今回の課題ではライントレース、交差点で止まるなどの点で前回の課題1に比べて多くの点で難しさを感じた。今回の課題で多くのトライ&エラーを経験したことで問題解決の力を伸ばすことができた。この今回身につけた力を課題3に活かし、よりよいロボット、プログラムを作ろうと思った。


添付ファイル: filehikari5.png 6件 [詳細] filehikari3.png 4件 [詳細] fileimage3.jpeg 10件 [詳細] fileimage1.jpeg 8件 [詳細] file2019a-mission2.png 12件 [詳細]

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