#contents
*課題 [#j496acd3]
[[2019a/Mission2]]

&ref(./2019a-mission2.png,60%);

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

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

*ロボットの構造 [#kc253e0a]
**ロボット全体の構造 [#r52dd6c8]
レゴのクラフトガイドを参考にタイヤと光センサーを付け、そこにアームの部分を取り付けた。

&ref(./image1.jpeg,40%);
**アームの構造 [#a7ffc8ff]
ピンポン玉をすくい取るような機構にした。ピンポン玉まで進みアームを上げるとピンポン玉が持ち上がる。

&ref(./image3.jpeg,60%);
*プログラム内容 [#v7c13868]
**ライントレースの方法 [#na352db6]
図のように光センサーの取る値に対するロボットの動きを5段階に分けることでライントレースをできるようにした。

&ref(./hikari3.png,60%);
**交差点での止まり方 [#r0a1c5c8]
&ref(./hikari5,60%);
&ref(./hikari5.png,60%);

�△茲蠅皚,諒�が長い時間、線上を通るので、光センサーの値が38を取る時間が一定以上になったらロボットが止まるようにした。
**#define[#lab1035a]
***5段階に分けた光センサーの取る値 [#kf9da661]
 #define BLACKS 38
 #define BLACK 45
 #define THRESHOLD 53
 #define WHITE 60
 #define WHITES 68
***光センサーに対応したロボットの動き [#g27bc6bf]
 #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);
**サブルーチン [#wb67a32a]
***線の左側をライントレースするプログラミング [#x98e539a]
 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);
 } 
***線の右側をライントレースするプログラミング [#ja616424]
 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);
 }

**メインプログラム [#ne8b38c8]
 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);      //停止。
 }
*反省・感想[#d7a75c1d]
今回の課題ではライントレース、交差点で止まるなどの点で前回の課題1に比べて多くの点で難しさを感じた。今回の課題で多くのトライ&エラーを経験したことで問題解決の力を伸ばすことができた。この今回身につけた力を課題3に活かし、よりよいロボット、プログラムを作ろうと思った。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS