2006a/C3/課題2右

ライントレースプログラム(中央線)

プログラム

#define blackline 35             //黒い線の値を定義
task main ()
{
    SetSensor (SENSOR_1, SENSOR_LIGHT); //センサーを定義
    SetSensor (SENSOR_2, SENSOR_TOUCH);
    SetSensor (SENSOR_3, SENSOR_LIGHT);

    while (true)             //繰り返し
    {
          while (SENSOR_2 == 0)     //タッチセンサーに何も触れていないときの動き(ラインを追う)
          {

                 OnFwd(OUT_A+OUT_C);
                 if ((SENSOR_1 < blackline) && (SENSOR_3 > blackline))    //もし自分の進行方向の左寄りに線があった場合
                 {
                 OnRev (OUT_A);
                 OnFwd (OUT_C);   //右に方向転換
                 }

                 else if ((SENSOR_1 > blackline) && (SENSOR_3 < blackline))   //そうでなかった(右よりに線のある)場合
                 {
                 OnRev (OUT_C);
                 OnFwd (OUT_A);   //左に方向転換
                 }
           }
           
           while (SENSOR_2 == 1)   //タッチセンサーにモノ(対向車)が触れた場合
           {
                 OnRev (OUT_A+OUT_C);   //後退
                 Wait(150);
                 Off(OUT_C);
                 OnFwd (OUT_A);   //右に方向転換
                 Wait(300);
                 Off(OUT_A);
                 OnFwd (OUT_C);   //左に戻る
                 Wait (300);
            }
    }
}

結果と感想

結果

ラインをトレースすることはできるがこのプログラムでは車体を蛇行させながら探すので滑らかな動きにはできなかった。コースに直角の部分があるのでどうしてもその部分で方向転換に梃子摺る。曲がり角の内側とどちらか一方のセンサーが急な角度で触れてしまうからだ。また、対向車とすれ違うには少しよける間隔が狭すぎた。一番の問題は、このプログラムでは取り付けてあるセンサーの幅よりコースの線同士が近づいている部分があると向こう側の線を読み込んで曲がってしまうため、何度やっても逆送してしまう場所があった。

感想

本当はプログラムに直線を組み込んでみたかったが、もしも線から外れてしまった場合に修正が利かなくなるので首を振って探すようにした。センサー一つでできないのか考えたが難しくて挫折した。線の部分での光センサーの値はころころ変わるので定義するのが難しかった。


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