2008a/A5

目次

課題2:黒い線に沿って動くロボット

課題の内容

・速さと正確さを追求すること

・交差点で優先側を走っていない場合には、一時停止すること

・前方にあるもう一台のロボットに接触した場合には停止して相手のロボットが行き過ぎる、あるいは距離が離れるのを待つこと

・コースを3周したら自動的に止まること

作成したロボット

タッチセンサーと光センサーをロボットの前方に組み込んだ。光センサーは黒い線を挟むように2個用いた。

走らせたコース

cimg0784_Medium.jpg

交差点を3つつくった。

プログラム

#define THRESHOLD 40                      //閾値を32に設定
#define go OUT_A+OUT_C
#define RUN_TIME 1400
task main()
{
 start line_trace;                        //ライントレーススタート
 start check_touch;                       //衝突の感知のスタート
} 
task line_trace()
{
 SetSensor(SENSOR_1,SENSOR_LIGHT);        //センサ1に光センサを定義
 SetSensor(SENSOR_3,SENSOR_LIGHT);        //センサ3に光センサを定義
ClearTimer(0);
while( Timer(0) <= RUN_TIME){ 								  								{
    if(SENSOR_1 > THRESHOLD){
       if(SENSOR_3 > THRESHOLD){         //両方のセンサが白を感知
         OnFwd(go);                   //前進する
       } else{                            //左が白、右が黒を感知
        OnFwd(OUT_A);OnRev(OUT_C);
                //右に曲がる
       }
    }else{
       if(SENSOR_3 > THRESHOLD){         //左が黒、右が白を感知
           OnFwd(OUT_C);OnRev(OUT_A);
               //左に曲がる
       }else{                            //両方のセンサが黒を感知
           OnRev(go);Wait (80);       //0.8秒間 後進
           Off(go);Wait(100);         //1秒間停止する
           OnFwd(go);Wait (230);       //2.3秒間前進  
       }
     }
   }
}
task check_touch()
{ 
SetSensor(SENSOR_2,SENSOR_TOUCH);         //センサ2にタッチセンサを定義
while(true){
if(SENSOR_2 == 1){                        //バンパーが衝撃を感知
 stop line_trace;                         //ライントレース一時停止
 OnRev(go); Wait(100);
 Off(go);Wait(200);                    //2秒間停止する
 start line_trace;                        //ライントレース再開
}
}

苦労した点、がんばった点

・一時停止する前に一度バックをして、優先車両が走りやすいようにした。

・光センサーが正しく作動するような位置を考えるのに苦労した。

未解決な問題、今後の課題

・機体にもろい部分があり、分解しないように扱わなければいけなかった。

感想

・プログラムをつくるのに時間がかかった。あと面倒だった。 ・コースの幅が少し狭かったかもしれない。

コメントお願いします。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-26 (木) 16:14:26 (4075d)