今回の課題

コース

下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。

課題2のコース

ミッション

次のコースで黒い線に沿って動き、紙コップを移動させるロボットを製作せよ。 自分は以下の第1コースを担当した。

  1. Aをスタート
  2. Bを直進
  3. Cを右折
  4. Fを直進
  5. Rを左折(一時停止)
  6. Pを直進
  7. X地点の紙コップを取得してコースに戻る
  8. Qを左折
  9. Sを直進(一時停止)
  10. Y地点に紙コップを置いてコースに戻る
  11. Sを直進(一時停止)
  12. Fを左折(一時停止)
  13. Cを右折(一時停止)
  14. D地点へ(ゴール)

ロボット本体の説明

コップをつかむアームを図のように作った。片方のアームにギアをつけてモーターにつなぐことで動かし、挟むようにした。

im2.jpg

コップをつかむアーム部分を車体の前に出し、取りやすくした。

im1.jpg

トレースのための光センサは車体とアームの間につけ、小回りが利くようにした。

im3.jpg

トレースが安定する光センサの位置を探し、図の高さにつけることにした。

im4.jpg

プログラム

  #define rightSENKAI OnFwd(OUT_A);OnRev(OUT_C);//右旋回
  #define rightMAGARU OnFwd(OUT_A);Off(OUT_C);//右折
  #define leftSENKAI OnFwd(OUT_C);OnRev(OUT_A);//左旋回
  #define leftMAGARU OnFwd(OUT_C);Off(OUT_A);//左折
  #define middle 41 //閾値                                
  #define ch OnFwd(OUT_B);Wait(10);Off(OUT_B);//コップをつかむ
  #define re OnRev(OUT_B);Wait(5);Off(OUT_B);//コップを放す
  #define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);//t秒前進
  #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);//t秒後退
  #define cross_stop Off(OUT_AC);Wait(100);//交差点停止

基本的なラインの右側トレースを以下のように定義した。また、左右を逆にしたものをl()として左側トレースも定義した。また、連続して黒線上の右旋回の経過時間を測定し、0.2以上になった時には交差点と判断させた。

 sub r()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT); //光センサを端子2にセット
   ClearTimer(0);       //タイマーリセット
   while(FastTimer(0)<=20)  //0.2秒以内黒の線を連続して感知した場合ループ、それ以上は次の動作へ
  {
     if(SENSOR_2>middle+5)      //閾値より5大きい時左旋回 
  {
     leftSENKAI
     ClearTimer(0);              
  }
    else if(SENSOR_2>middle+3)    //閾値より3大きい時左折
  {
     leftMAGARU
     ClearTimer(0);       
  }
    else if(SENSOR_2>middle)    //閾値の時直進
  {
     OnFwd(OUT_AC);
     ClearTimer(0);       
  }
    else if(SENSOR_2>middle-3)    //閾値より3小さい時右折
  {
    rightMAGARU
    ClearTimer(0);      
  }
    else    
  {
    rightSENKAI         //上記の条件以外の時右旋回
   }              //この時タイマーをリセットしていないので右旋回の時間が0.2以上で交差点と判断。
 }
    Off(OUT_AC);         
}
task main ()
{r();     //AB間
cross_stop;  //一時停止
go(35);    //位置合わせ
r();      //BC間
cross_stop;  //一時停止
leftSENKAI;  //位置合わせ
Wait(30); 
r();      //CF間
cross_stop;  //一時停止
go(35);    //位置合わせ
r();      //FE間
cross_stop;  //一時停止
go(25);    //ラインの左側へ移動
l();     //ER間
cross_stop;  //一時停止
rightSENKAI; //位置合わせ
Wait(30);
l();      //RP間
cross_stop;  //一時停止
ch;     //コップをつかむ
go(25);   //位置合わせ
l();         //PQ間
go(20);      //ラインの右側へ移動
r();        //QS間
cross_stop;  //一時停止
go(30);      //位置合わせ
r();         //円Yの外周
cross_stop;  //一時停止
go(50);      //位置合わせ
leftSENKAI;  //ラインの左側へ移動
Wait(65);
l();       //SF間
cross_stop;  //一時停止
ch;          //コップの持ち直し
leftSENKAI;  //コップを円に入れる
Wait(160);
re;      //コップを放す
back(45);   //後退
rightSENKAI; //元に戻す
Wait(160);
r();     //FC間
cross_stop;  //一時停止
rightSENKAI; //Dに入るため回転
Wait(90);
go(90);   //ゴール

}

反省と結果

ライントレースにおいて重要な役割を果たす光センサーの位置調整に苦労したが、本番ではうまくいった。アームの力が少し弱かったため何度かつかむプログラムを入れたが途中で放してしまって残念だった。ミッションを成功させることができてよかった。


添付ファイル: fileim4.jpg 47件 [詳細] fileim3.jpg 55件 [詳細] fileim2.jpg 40件 [詳細] fileim5.ipg 38件 [詳細] fileim1.jpg 53件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-17 (土) 19:36:13 (553d)