[[2019a/Member]]
#contents
*課題2 [#x90f493c]
下の図のようなコースを書くチームで作成し、「ミッション」を遂行するためのロボットを作成せよ。

黒い線にそって動くロボットを作成する。

交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。

二つのコースがあり、私は

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

というコースを選んだ。
#ref(2019a/Member/www/Mission2/keiro.jpg,50%)

下の図で青→緑の矢印の順で動き、緑の矢印はピンポン玉を運んでいる。
#ref(2019a/Member/www/Mission2/keiro2.jpg,50%)

*ロボットの説明 [#g78a6f3b]
**全体像 [#v29e5613]
&ref(2019a/Member/www/Mission2/kawai.jpg);&ref(2019a/Member/www/Mission2/ura.jpg);
#ref(2019a/Member/www/Mission2/zentai_uekara.jpg)

タイヤを4つではなく、3つにすることで、旋回しやすく動きやすくした。摩擦を少なくするために、ゴムを外したホイールのみを取り付けた。車軸を固定しなことで、さらに摩擦を減らすことができた。
#ref(2019a/Member/www/Mission2/zentai'.jpg)

ピンポン玉をつかむ機構を取り付けたことで、RISの本体を後ろに下げることになったが、ロボットの重心が後ろにさがらないようにするために、RISを横向きに取り付けた。

**アーム部分 [#h40ada04]

ピンポン玉をつかむ機構を取り付けたことで、RISの本体を後ろに下げることになったが、RISを横向きに取り付けることでロボットのバランスをとった。

**光センサー [#na9121e3]
#ref(2019a/Member/www/Mission2/hikari'.jpg,30%)
光センサーはタイヤのすぐ前に設置した。センサーをタイヤに近づけることで、ロボットが、正確にライントレースするようにした。

**タイヤ [#h40ada04]
#ref(2019a/Member/www/Mission2/ura.jpg)
タイヤを4つではなく、3つにすることで、旋回しやすく動きやすくした。摩擦を少なくするために、ゴムを外したホイールのみを取り付けた。車軸を固定しなことで、さらに摩擦を減らすことができ、スムーズに動くようになった。

**アーム [#u102f2d2]
#ref(2019a/Member/www/Mission2/te_uekara.jpg)
アームはピンポン玉を挟むような形にした。
#ref(2019a/Member/www/Mission2/hasamu'.jpg)
異なる方向にアームが回転し、動くようにするために、ギアの配置を工夫した。
また、コンパクトに見えるように、ギアを上下に配置し、アームの位置の調整のため、二つ並んだギアの下にグレーのパーツをかませた。
#ref(2019a/Member/www/Mission2/te_yokokara.jpg)
また、前回同様、アームの開き具合の微調節のために、青いパーツを取り付けて、簡単に閉じたり開いたりできるようにした。

*プロブラムについて [#r8e9cc5d]
**ライントレースの仕組み [#zdbb814b]
コースの関係上右側のふちをライントレースするようにした。
光センサーの下の明るさを値として検知して、検出された値によって決められた動作を行わせることで、ライントレースをする。

私たちは、以下のように5段階に値を決めた。
#ref(2019a/Member/www/Mission2/michi.jpg,50%)
以下が、その値で行う動作である。
#ref(2019a/Member/www/Mission2/atai1.jpg,30%)

**プログラムの説明 [#p2fa6173]
***ライントレースのプログラム [#nb0dcaff]
上で説明した動作を行うために以下のマクロを定義した。

-グローバル変数
 int t;

-光センサーの値
 #define kuro 41     //真っ黒
 #define kurohai 43  //黒
 #define hai 46    //灰
 #define shirohai 48 //白

-ライントレースの動作のための定義
 #define go_ahead OnFwd(OUT_AC);   //直進
 #define turn_left SetPower(OUT_AC,3);Off(OUT_A);OnFwd(OUT_C);     //左曲がり
 #define  turn_right SetPower(OUT_AC,3);Off(OUT_C);OnFwd(OUT_A);   //右曲がり
 #define Uturn_left SetPower(OUT_AC,3);OnRev(OUT_A);OnFwd(OUT_C);   //左旋回
 #define Uturn_right SetPower(OUT_AC,3);OnRev(OUT_C);OnFwd(OUT_A);  //右旋回

-一時停止
 #define kyukei Wait(100);  //1秒停止
 
-一つの動作の継続時間
 #define STEP 1


下にライントレースに使用したサブルーチンを示す。


 sub follow_line1()
 {
     SetSensor(SENSOR_2,SENSOR_LIGHT);
 
     ClearTimer(0);        //タイマー0をリセット
     while(FastTimer(0)<t)     //タイマーの値がt未満の時に繰り返す
         {
         if(SENSOR_2<kuro)  
             {
             Uturn_right;     //真っ黒なら右旋回せよ
             }
         else if(SENSOR_2<kurohai)
             {
             turn_right;ClearTimer(0);  //黒なら右に曲がれ
             }
         else if(SENSOR_2<hai)
             {
             go_ahead;ClearTimer(0);   //灰なら直進せよ
             }
         else if(SENSOR_2<shirohai)
             {
             turn_left;ClearTimer(0);   //白なら左に曲がれ
             }
         else
             {
             Uturn_left;ClearTimer(0);  //真っ白なら左旋回せよ
             }
         Wait(STEP);
         }
     Off(OUT_AC);   //止まれ
     kyukei;     //一秒停止
 }


 sub follow_line2()
 {
     SetSensor(SENSOR_2,SENSOR_LIGHT);
 
    ClearTimer(0);
    while(FastTimer(0)<t)
        {
        if(SENSOR_2<kuro)
            {
            Uturn_right;
            }
        else if(SENSOR_2<kurohai)
            {
            turn_right;
            }
        else if(SENSOR_2<hai)
            {
            go_ahead;
            }
        else if(SENSOR_2<shirohai)
            {
            turn_left;
            }
        else
            {
            Uturn_left;
            }
        Wait(STEP);
        }
    Off(OUT_AC);
 }


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS