目次

課題について

E地点右折コースを選択した。 詳しくは2017a/Mission2を参照

ロボットについて

プログラミングを工夫することによってロボットは基本の形にした。

syoumen.jpg

地面とセンサーを近づけることによってより値を正確にできた。

yoko.jpg

ロボットの通るコースについて

yajirusi.jpg

ラインどりを2種類つかう方法を採用した。

前半

zenzenzenzen.jpg

後半

koukoukou.jpg

プログラミングについて

交差点の判別

CurrentTick()がtimemaxを超えるとライントレースをやめるようになっている。また黒以外では、CurrentTick()がリセットされる。よって交差点は黒が続くので、CurrentTick()がリセットされることがなく、timemaxを超えて止まるという仕組みである。

定義

#define White 63
#define Gray 50
#define WhiteGray 58
#define BlackGray 43
#define go_st OnFwd(OUT_BC,50);
#define spin_left OnFwd(OUT_B,25);OnRev(OUT_C,25);
#define spin_right OnFwd(OUT_C,25);OnRev(OUT_B,25);
#define turn_left OnFwd(OUT_B,50);
#define turn_right OnFwd(OUT_C,50);
#define pose(int t) Off(OUT_BC);Wait(t)

サブルーチン

sub line_uchi(long timemax)//timemax秒間内側のライン取り
{
   long t0=CurrentTick();
   while(CurrentTick()-t0<timemax){
      if (SENSOR_1>White) {
        spin_left;
        t0=CurrentTick();
     } else if (SENSOR_1>WhiteGray) {
        turn_left;
        t0=CurrentTick();
     } else if (SENSOR_1>Gray) {
        go_st;
        t0=CurrentTick();
     } else if (SENSOR_1>BlackGray) {
        turn_right;
        t0=CurrentTick();
     } else {
        spin_right;
      }
     }
}
sub line_soto(long timemax)//timemax秒間外側のライン取り
{
   long t0=CurrentTick();
   while(CurrentTick()-t0<timemax){
      if (SENSOR_1>White) {
        spin_right;
        t0=CurrentTick();
     } else if (SENSOR_1>WhiteGray) {
        turn_right;
        t0=CurrentTick();
     } else if (SENSOR_1>Gray) {
        go_st;
        t0=CurrentTick();
     } else if (SENSOR_1>BlackGray) {
        turn_left;
        t0=CurrentTick();
     } else {
        spin_left;
      }
     }
    Off(OUT_BC);
}

前半(A~S)

ロボットの通るコースについての前半を参照

task main()
{
   SetSensorLight(S1);
   go_st;
   Wait(1100);
   line_uchi(230);
   OnFwd(OUT_BC,50);
   PlaySound(SOUND_UP);//E右折   
   Wait(20);
   line_soto(180);
   pose(100);
   PlaySound(SOUND_DOWN);//P一時停止
   line_soto(190);
   turn_right;
   PlaySound(SOUND_UP);//Q直進
   Wait(100);
   line_soto(110);
   OnFwd(OUT_BC,50);
   PlaySound(SOUND_UP);//R左折
   Wait(100);
   Off(OUT_BC);
   line_uchi(230);
   pose(100);
   PlaySound(SOUND_DOWN);//T一時停止
   turn_left;
   Wait(300);
   Off(OUT_BC);
   line_uchi(230);
   pose(100);
   PlaySound(SOUND_DOWN);//T一時停止
   turn_left;
   Wait(300);
   Off(OUT_BC);
   line_uchi(230);
   PlaySound(SOUND_UP);//H
   Off(OUT_BC);
   repeat(13){
      line_uchi(200);
   }
   OnFwd(OUT_BC,20);
   PlaySound(SOUND_UP);//G
   Wait(500);
   line_soto(180);
   pose(100);
   PlaySound(SOUND_DOWN);//S左折

後半(S~A)

ロボットの通るコースについての後半を参照

   line_soto(180);
   turn_right;
   PlaySound(SOUND_UP);//P直進
   Wait(100);
   line_soto(120);;
   OnFwd(OUT_BC,20);
   PlaySound(SOUND_UP);//Q
   Wait(500);
   line_uchi(200);
   PlaySound(SOUND_UP);//F
   Off(OUT_BC);
   line_uchi(180);
   pose(100);
   PlaySound(SOUND_DOWN);//A
}

工夫した点

HからGまでのルートの2つ目の急カーブを止まらず曲がりきろうとするとtimemaxの値が大きくなり、GでSOUND_UPを鳴らすことが出来なくなってしまったので、repeatを用いてtimemaxの値が短いものをいくつも繰り返すことで曲がりきりGでも止まることができた。しかし、まれに曲がりきれない場合もあり改善が必要だと感じた。


添付ファイル: fileyajirusi.jpg 220件 [詳細] filesyoumen.jpg 266件 [詳細] fileyoko.jpg 297件 [詳細] filekoukoukou.jpg 267件 [詳細] fileline.jpg 88件 [詳細] filezenzenzenzen.jpg 301件 [詳細]

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