2006a/A5

目次

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

作成日 6月14日
作成者 モロ、毛利、トラ、ポロリ

ロボット 

200606151858001.jpg

プログラム

ベースのプログラム (ライントレース)(作成者:ポロリ)

task main ()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_TOUCH);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    
    while(true)
    {
        if(SENSOR_1<40)     //センサー1が黒い線にのると右に曲がる
        {
           OnFwd(OUT_A);
           Off(OUT_C);
        }else
        {
           Off(OUT_A);
           OnFwd(OUT_C);
        }
        if(SENSOR_3<40)     //センサー3が黒い線にのると左に曲がる 
        {
            OnFwd(OUT_C);
            Off(OUT_A);
        }else
        {
             Off(OUT_C);
             OnFwd(OUT_A);
        }
     }
}  

ライントレースのプログラム#2(作成者:モロ)

#define THRESHOLD 40        //黒線の閾値
task main ()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);

while(true)
 {
  if(SENSOR_1<THRESHOLD)      //はみでたら
   {
    OnRev(OUT_A+OUT_C);       //バックして
    Wait(3);
    OnFwd(OUT_A);OnRev(OUT_C);   //戻る
   }
   
  if(SENSOR_3<THRESHOLD)      //はみでたら
   {
    OnRev(OUT_A+OUT_C);       //バックして
    Wait(3);
    OnRev(OUT_A);OnFwd(OUT_C);      //戻る
   }
   
  else
   {
    OnFwd(OUT_A+OUT_C);
   }
 }
}

前方のロボットに接触したら反転して進むプログラム (作成者;トラ)

#define BLACK 40   //黒の閾値
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
SetSensor(SENSOR_3,SENSOR_LIGHT);
while(true){
if(SENSOR_1<BLACK){    //線を右にはみでたら左へ戻る 
OnFwd(OUT_C);
Off(OUT_A);
}else{
Off(OUT_C);
OnFwd(OUT_A);}
if(SENSOR_3<BLACK){   //線を左にはみでたら右へ戻る
OnFwd(OUT_A);
Off(OUT_C);
}else{
Off(OUT_A);
OnFwd(OUT_C);}
if(SENSOR_2==1){     //前方のロボに接触したら反転する
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(180);}}}

前方のロボットに接触したら右側から追い抜いて(あるいは避けて)、再びライン上にもどって進むプログラム (作成者:毛利)

task main ()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);
    SetSensor(SENSOR_2,SENSOR_TOUCH);
    SetSensor(SENSOR_3,SENSOR_LIGHT);
    
    while(true)
    {
        if(SENSOR_1<40)       //線を右にはみ出たら左に戻る
        {
           OnFwd(OUT_A);
           Off(OUT_C);
        }else
        {
           Off(OUT_A);
           OnFwd(OUT_C);
        }
        if(SENSOR_3<40)       //線を左にはみ出たら右に戻る
        {
            OnFwd(OUT_C);
            Off(OUT_A);
        }else
        {
             Off(OUT_C);
             OnFwd(OUT_A);
        }
         if(SENSOR_2==1)
         {
             OnRev(OUT_A+OUT_C);   //バックする
               Wait(25); 
               OnFwd(OUT_C);       //右に出て抜き始める
               Off(OUT_A);
               Wait(50);
               OnFwd(OUT_A+OUT_C);   //抜く
               Wait(75);
               Off(OUT_C);         //ラインにもどり始める
               OnFwd(OUT_A);
               Wait(75);
               OnFwd(OUT_A+OUT_C); //ラインにもどる
            }
       }
}                 
  

経過

1.ロボット本体は、順調に完成のつもりだった・・・
2.最初のプログラムはなぜかタッチセンサーも光センサーも反応しない・・・
3.片方が反応するともう一方が反応しないけど、少し進歩。
4.四苦八苦のすえようやく完成だったが、スピードが遅くて追い抜く抜けない。
5.いろいろロボットを調整して試行錯誤で一度もとに戻してみたら偶然にもすごくよくなって完成(笑)

考察

工夫した点

ギアなどをいろいろ調節してスピードを加減した。
けど適切なスピードを作るのに一苦労。
前輪と後輪の幅を短くし、カーブを曲がり易いようにした。
光センサーは、駆動輪の車軸に近づけて設置するとカーブが曲がり易い事が判明した。

反省点&改良すべき点

  • 障害物にぶつかったら反転して、ライントレースを続けるプログラムでは、駆動輪の幅が広いため、片側のタイヤを駆動させて反転するのではなく、両方を使って反転するプログラムにすれば良いと思われる。
  • カーブが急な場合回転の時間が固定されているので時間が足らないので、戻らないので、反転の際も光センサーを利用したかった。それが反省点でもある。
  • 何故かカーブのスピードが直線のスピードより速くなった。そのお陰で右の班のロボより周回のタイムが早くなり、右の班のロボに追いつく事が出来た。
  • しかし、前のロボットに接触した後に追い抜かすプログラムで、ロボットのスピードがあまりにも遅く、しっかりと追い抜かせなかった。
  • 追い抜かし時の高速化が必要だろう。

コメント欄

  • プログラムは一人一つか二人で一つを載せるようにしてください。プログラムは誰が作ったのかも書いておいてください。 -- いまい(TA)? 2006-06-23 (金) 13:34:34
  • ライントレースについての考察なども書いてみましょう。 -- まいける(TA) 2006-07-01 (土) 12:01:44

コメントをお願いします。


添付ファイル: file200606151858001.jpg 200件 [詳細]

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