2016a/Member 目次

課題

2016a-mission2.png

C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A地点の順にライントレースをしながら進みA地点をゴールとする。

ロボット本体の説明

ロボットの前方に光センサーをつけた。タイヤは4つつけ安定感を保った。センサーの位置は地面からおよそ1cmの高さ、ロボットの重心からおよそ10cmのところへつけた。

プログラムの説明

定義

#define turn_right1 OnRev(OUT_C);OnFwd(OUT_A)//右旋回
#define turn_left1 OnFwd(OUT_C);OnRev(OUT_A)//左旋回
#define go OnFwd(OUT_AC)//直進
#define turn_right0 OnFwd(OUT_A);Off(OUT_C)//右折
#define turn_left0 OnFwd(OUT_C);Off(OUT_A)//左折

ライントレース(交差点の判断)

sub line_follow()
{ 
    ClearTimer(0);
    while(FastTimer(0)<=13)//0.13秒間ずっと黒と判断すると交差点と判断する
     { 
     if (SENSOR_2>51){//白と判断したとき
          turn_right1;
          ClearTimer(0); 
     } else if(SENSOR_2>48){//境界よりも白の割合が多いと判断したとき
          turn_right0;
          ClearTimer(0);
     } else if(SENSOR_2>40){//白と黒の境界と判断したとき
          go;
          ClearTimer(0);
     } else if(SENSOR_2>36){//境界よりも黒の割合が多いと判断したとき
          turn_left0;
          ClearTimer(0);
     } else {//黒と判断したとき
          turn_left1;
      }
    }
    Off(OUT_AC);
    Wait(100);
}

交差点を直進

sub crossing_fwd()
{
    go;
    Wait(40);
    Off(OUT_AC);
}

交差点を左折

sub crossing_left()
{
    turn_left0;
    Wait(200);
    Off(OUT_C);
}

交差点を右折

sub crossing_right()
{
    turn_right0;
    Wait(100);
    Off(OUT_A);
}

ゴールへ進む

sub crossing_stop()
{
    go;
    Wait(100);
    Off(OUT_AC);
}

急カーブ

sub kyu_curve()
{ 
    ClearTimer(2);
    while(FastTimer(2)<=550)//5.5秒間ライントレースをする
    {
       if (SENSOR_2>51){//白と判断したとき
            turn_right1; 
       } else if(SENSOR_2>48){境界よりも白の割合が多いと判断したとき
            turn_right0;
       } else if(SENSOR_2>40){白と黒の境界と判断したとき
            go;
       } else if(SENSOR_2>37){//白と黒の境界よりも黒の割合が多いと判断したとき
            turn_left0;
       } else {//黒と判断したとき
            turn_left1;
      }
    }
    ClearTimer(1);
    while(FastTimer(1)<=13)//5.5秒間ライントレースしたあと0.13秒間ずっと黒と判断すると交差点と判断する
     { 
     if (SENSOR_2>51){
          turn_right1;
          ClearTimer(1); 
     } else if(SENSOR_2>48){
          turn_right0;
          ClearTimer(1);
     } else if(SENSOR_2>40){
          go;
          ClearTimer(1);
     } else if(SENSOR_2>37){
          turn_left0;
          ClearTimer(1);
     } else {
          turn_left1;
      }
    }
    Off(OUT_AC);
    Wait(100);
}

交差点と急カーブの判断ができなかったので、急カーブを含むライントレースは時間指定をした状態で走らせてからライントレースをさせたところに気をつけた。

task main()
{
    SetSensor(SENSOR_2,SENSOR_LIGHT);

    line_follow();
    crossing_left();
    line_follow();
    crossing_left();
    line_follow();
    crossing_fwd();
    kyu_curve();
    crossing_fwd();
    line_follow();
    crossing_right();
    line_follow();
    crossing_left();
    kyu_curve();
    crossing_stop();
}

結果

ゴールまでたどり着くことはできなかった。

問題点としては、ライントレース中の左カーブを交差点と判断してしまうところ。 Qのわっかの部分と最後のP〜Aまでのカーブは判断できたが、Q〜Rまでの左カーブとR〜Pまでのカーブを交差点と判断するプログラムは時間の設定を変えなければならなかったのでその対応をする前に時間が経ってしまった。

感想

今回のセンサーを使ったロボットはロボットの判断が入ってきたので前回よりもかなり難しかった。

ゴールまでたどり着くことができなくて悔しかった。

次回の課題はクリアしたい。


添付ファイル: filerobotto2 262件 [詳細] filerobotto 235件 [詳細] file2016a-mission2.png 213件 [詳細]

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