2019a/Member

目次

課題について

詳しくはこちらを参照2019a/Mission2

経路について

下図のオレンジの線のような経路に沿って動くロボットを作成する。

課題の経路

詳細(Aから出発→Bを直進→Cを直進→Dを一時停止後、直進→Eを右折→Fを右折→Gを一時停止後、右折→Hを直進→Iを直進→Jを右折→Kを左折→Lで球をつかむ→Kを直進→Mで一時停止→シュート)

ロボットについて

kiko

・コンパクトにするため、車部分はマニュアルに掲載されているものを採用した。それに光センサをなるべく地面に近くなるように取り付けた。

jolo

・アームは、ボールの上からかぶせてゴールまで引きずっていくような仕組みになっている。

プログラムについて

ライントレース

・光の明るさを5段階に分け、それらに対応する動作を振り分ける。以下はそのプログラムである。

#define SPEED 25
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_fwd  OnRL(SPEED, SPEED);    //直進
#define turn_Lc OnRL(SPEED, -SPEED);   //左旋回
#define turn_Lt OnRL(SPEED, 0);        //左折
#define turn_Rc OnRL(0, SPEED);        //右折
#define turn_Rt OnRL(-SPEED, SPEED);   //右旋回

・明るさの判断の基準としては、「閾値より値がどれくらい離れているか」とし、閾値を定義した。

#define THRESHOLD 45

左側のライントレース

#define THRESHOLD 45

#define SPEED 25

#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);

#define go_fwd OnRL(SPEED, SPEED);

#define turn_Lc OnRL(SPEED, -SPEED);

#define turn_Lt OnRL(SPEED, 0);

#define turn_Rc OnRL(0, SPEED);

#define turn_Rt OnRL(-SPEED, SPEED);

#define short_break Off(OUT_BC);PlaySound(SOUND_CLICK);Wait(1000);

#define catch OnFwd(OUT_A,50);Wait(500);Off(OUT_A)

#define release OnRev(OUT_A,50);Wait(500);Off(OUT_A);

void followline_L(int d) {

   long t0=CurrentTick();
   while(CurrentTick()-t0<d){
       if (SENSOR_1 < THRESHOLD -12) {
           turn_Lc;
       } else if (SENSOR_1 < THRESHOLD -7) {
           turn_Lt;
       } else if (SENSOR_1 < THRESHOLD +7) {
           go_fwd;
           t0=CurrentTick();
       } else if (SENSOR_1 < THRESHOLD +12) {
           turn_Rc;
           t0=CurrentTick();
       } else {
           turn_Rt;
           t0=CurrentTick();
        }
   }
   short_break;

}

void followline_R(int k) {

   long t0=CurrentTick();
   while(CurrentTick()-t0<k){
       if (SENSOR_1 < THRESHOLD -12) {
           turn_Rc;
       } else if (SENSOR_1 < THRESHOLD -7) {
           turn_Rt;
       } else if (SENSOR_1 < THRESHOLD +7) {
           go_fwd;
           t0=CurrentTick();
       } else if (SENSOR_1 < THRESHOLD +12) {
           turn_Lc;
           t0=CurrentTick();
       } else {
           turn_Lt;
           t0=CurrentTick();
        }
   }
   short_break;

}

void followline_R2(int m) {

   long t0=CurrentTick();
   while(CurrentTick()-t0<m){
       if (SENSOR_1 < THRESHOLD -12) {
           turn_Rc;
           t0=CurrentTick();
       } else if (SENSOR_1 < THRESHOLD -7) {
           turn_Rt;
           t0=CurrentTick();
       } else if (SENSOR_1 < THRESHOLD +7) {
           go_fwd;
           t0=CurrentTick();
       } else if (SENSOR_1 < THRESHOLD +12) {
           turn_Lc; 
       } else {
           turn_Lt;
        }
   }
   Off(OUT_BC);
   Wait(2000);

}

void stride() {

   while(SENSOR_1 < THRESHOLD -7){
       go_fwd;
   }
   Off(OUT_BC);

}

void stride_L() {

   while(SENSOR_1 < THRESHOLD +7){
       turn_Lc;
   }
   Off(OUT_BC);

}

void stride_R() {

   while(SENSOR_1 < THRESHOLD +7){
       turn_Rc;
   }
   Off(OUT_BC);

}

task main() {

   SetSensorLight(S1);
   followline_L(100);
   stride();
   followline_L(150);
   stride_R();
   followline_R(100);
   stride_R();
   followline_R(150);
   stride_R();
   followline_R(150);
   stride_R();
   followline_R(150);
   stride();
   followline_R2(100);
   catch;
   turn_Lc;
   followline_R(150);
   stride();
   followline_R();
   stride_L();
   followline_R(150);
   release;

}


添付ファイル: filerobotics&23.png 178件 [詳細] filerobotics&22.png 197件 [詳細] filerobotics&21.png 159件 [詳細]

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