目次

1.課題について
2.ロボットについて
3.プログラミングについて
4.感想

1.課題について

○今回の課題

・下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。

○コース

Screenshot_20190719-131723.png

○ミッション

・A地点を出発し、次の経路を黒い線にそって動くロボットを作成する。

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

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

2.ロボットについて

今回作ったロボット

DSC_0129.JPG

土台は三輪構造にし、スタート地点である20cm×19.4cmの四角形にロボット全体が収まる必要があったので、できるだけ部品を少なくかつシンプルなものにした。また。光センサーも正確に色を測定するために、地面に近づけるぎりぎりまで下げて設置した。

DSC_0132.JPG

また、ボールを保持するアームはかご型にした。はさむような型も考えたが、こちらの方がより確実にボールを確保できると思い、この形にした。

DSC_0130.JPG

3.プログラミングについて

#define BLACK 30                       //色の定義(黒 

#define B_GLAY 38                             黒と灰色の中間

#define GLAY 45       灰色(しきい値)

#define W_GLAY 53                             白と灰色の中間

#define WHITE 63                             白)

#define r_right OnFwd(OUT_C,50);Off(OUT_B); //右旋回

#define t_right OnFwd(OUT_C,75);OnFwd(OUT_B,10); //右折

#define go OnFwd(OUT_BC,40); //直進

#define t_left OnFwd(OUT_B,75);OnFwd(OUT_C,10); //左折

#define r_left OnFwd(OUT_B,20);Off(OUT_C); //左旋回

#define MOVE_TIME 500

#define up OnRev(OUT_A,50);Wait(500);b //アームを上げる

#define down OnFwd(OUT_A,50);Wait(500);                 下げる

#define u_turn OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(1000); //Uターン

#define short_break Off(OUT_BC);Wait(100); //一時停止 sub follow_line() //交差点を認識するまで黒線に沿って進むプログラム {

   SetSensorLight(S3);
   long t0 = CurrentTick();
   
   while(CurrentTick()-t0 <= MOVE_TIME){
       if (SENSOR_1 < BLACK){      //黒の時だけタイマーをリセットしない→交差点を判別する
           r_left;
       } else if (SENSOR_3 < B_GLAY){ t0=CurrentTick();
           t_left;
       } else if (SENSOR_3 < GLAY){ t0=CurrentTick();
           go;
       } else if (SENSOR_3 < W_GLAY){ t0=CurrentTick();
           t_right;
       } else if (SENSOR_3 > WHITE){ t0=CurrentTick();
           r_right;
       } else {go;}
    }
   Off(OUT_BC);            //黒の時間がMOVE TIMEを超えて交差点とわかれば止まる

} sub cross_line(){          //交差点を渡るプログラム

   SetSensorLight(S3);
   go;               //白を認識するまで進む
   until (SENSOR_3 > WHITE);    →follow_line()を後に続けることで交差点を渡る

}

task main() {

   follow_line();
   short_break;                     //Kで一時停止
   OnRev(OUT_B,50);Off(OUT_C);      //車体を黒線と平行に戻す
   Wait(100);
   go;
   Wait(2000);
   down;                            //アームを下げてボールを確保
   u_turn;
   follow_line();                   
   cross_line();
   follow_line();          //K地点の交差点通過
   short_break;                     //J地点の交差点で一時停止
   cross_line();                    //交差点を通過
   follow_line();
   cross_line();                    //I地点の交差点を通過
   follow_line();
   cross_line();                    //H地点の交差点を通過
   follow_line();              //G地点の交差点を認識
   follow_line();                   //cross_lineだと曲がれないのでfollow_lineで通過
   follow_line();                   //上記と同じ(F地点)
   follow_line();                   //上記と同じ(E地点)
   cross_line();                    //D地点の交差点を通過
   follow_line();
   cross_line();                    //C地点の交差点を通過
   follow_line();
   OnRev(OUT_B,50);Off(OUT_C);      //車体を黒線と平行に戻す
   Wait(100);
   short_break;
   up;                              //アームを上げる
   OnFwd(OUT_BC,75);                //シュート
   Wait(100);
   go;                              //A地点に入る
   Wait(1000);

}

4.感想


添付ファイル: fileDSC_0132.JPG 111件 [詳細] fileDSC_0130.JPG 128件 [詳細] fileDSC_0129.JPG 122件 [詳細] fileScreenshot_20190719-131723.png 161件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-07-19 (金) 17:01:17