2014a/Member

メンバー

 tacchan    スタートからゴールへ向けてのプログラム担当  yukiyamaneko       ゴールからスタートへ向けてのプログラム担当

課題について

 今回の課題は2014a/Mission1にあるようにスタート(またはゴール)からライントレースをし、途中でピンポン玉を掴み反対側の地点まで運ぶというものである。(コース図は下のとおりである。)

?plugin=ref&page=2014a%2FMission1&src=2014a-mission1.png

課題攻略に向けて 

 コースの途中に置いてあるピンポン玉の運搬方法について考える。ピンポン玉をゴールまで運ぶ方法はいろいろ考えられるが、今回はモーターをつかい上から籠のようなものでピンポン玉を囲い運ぶことにした。この方法で運ぶためにはピンポン玉のある場所を感知して止まる必要があり、対象との距離を測ることのできる超音波センサーを使用することにした。課題に挑む機体は以下のようになった。

機体側面 機体上面

ライントレースをするためのライトセンサーをできるだけ車軸に近い位置に地面と垂直になるように取り付け、超音波センサーをが対象を感知しやすいように正面に配置し、その上部にピンポン玉を囲む籠を動かすモーターを取り付けた。

プログラム概要

 .好拭璽箸ら最初の交差点通過  ∈能蕕汎鵑通椶慮鮑硬清茣  その他 の三つにコースを分割しそれぞれの区間で行う動作や交差点での方向修正を加えたライントレースのプログラムを組んだ。 今回製作したプログラムは以下の通りである。

#define THRESHOLD 50
#define SPEED_H 35
#define SPEED_L 25
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);
#define go_forward OnRL(SPEED_H,SPEED_H);
#define turn_left1 OnRL(SPEED_L,-SPEED_L);//左旋回
#define turn_left0 OnRL(SPEED_L,0);//左折
#define turn_right0 OnRL(0,SPEED_L);//右折
#define turn_right1 OnRL(-SPEED_L,SPEED_L);//右旋回
#define STEP 1
#define nMAX 120//最初の交差点を渡りきるまでの黒線カウンターの最大値
#define nMAX2 175//ボールを取った後の黒線カウンターの最大値
#define short_break Off(OUT_BC);Wait(1000);
#define CROSS_TIME 450
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;
task main()
{
 SetSensorLight(S3);//端子3にライトセンサー
 SetSensorLowspeed(S4)//;端子4に超音波センサー
 int nOnline=0;//続けて黒になった回数
 int cross_number=0;//交差点を渡った回数
 int sensor_number=0;//センサーが反応した回数
  go_forward;
 Wait(1000);
 while(cross_number<1)//最初の交差点を渡るまでのライントレース
 {
  while(nOnline<nMAX)
  {
   if(SENSOR_3<THRESHOLD-15)
    {
     turn_right1;
      nOnline++;//黒線カウンターを追加
    }else{
          if(SENSOR_3<THRESHOLD-7)
               {
             turn_right0;
            }else if(SENSOR_3<THRESHOLD+7)
               {
                go_forward;
            }else if(SENSOR_3<THRESHOLD+15)
               {
             turn_left0;
            }else{
             turn_left1;
               }
            nOnline=0;
           }
    Wait(STEP);
      
  }
  short_break;
  turn_right1;Wait(nMAX*STEP+100);
  cross_line;
  PlaySound(SOUND_UP);
  nOnline=0;
  cross_number++;//交差点を渡るごとに交差点カウンターを追加
}
 while(sensor_number==0)//玉を認識して取るまでのライントレース
  {
    if(SENSOR_3<THRESHOLD-15)    {
     turn_right1;
      nOnline++;
      if(SensorUS(S4)<10)//玉をとる動作
       {
       Off(OUT_BC);
       turn_right0;//位置修正
       Wait(1000);
       Off(OUT_BC);
       OnFwd(OUT_A,20);//アーム降下
       Wait(1300);
       Off(OUT_A);
       Off(OUT_BC);
       sensor_number++;//センサーのカウンターを増やす
        }
    }else{
          if(SENSOR_3<THRESHOLD-7)
               {
             turn_right0;
            }else if(SENSOR_3<THRESHOLD+7)
               {
                go_forward;
            }else if(SENSOR_3<THRESHOLD+15)
               {
             turn_left0;
            }else{
             turn_left1;
               }
            nOnline=0;
   
           }
    Wait(STEP);
      
  }
 while(cross_number<=3)//玉をとった後のライントレース
 {
  while(nOnline<nMAX2)
  {
   if(SENSOR_3<THRESHOLD-15)
    {
     turn_right1;
      nOnline++;
    }else{
          if(SENSOR_3<THRESHOLD-7)
               {
             turn_right0;
            }else if(SENSOR_3<THRESHOLD+7)
               {
                go_forward;
            }else if(SENSOR_3<THRESHOLD+15)
               {
             turn_left0;
            }else{
             turn_left1;
               }
            nOnline=0;
           }
    Wait(STEP);
      
  }
  short_break;
  turn_right1;Wait(nMAX*STEP+300);
  cross_line;
  PlaySound(SOUND_UP);
  nOnline=0;
  cross_number++;
}
  Off(OUT_BC);//玉をゴールに入れる動作
  OnRev(OUT_A,20);
  Wait(400);
}

 

取り組み後の感想・反省点

今回の課題ではライントレースのプログラムはすぐに作ることはできたが、そこに超音波センサーでピンポン玉を感知するプログラムを入れた場合にうまくライントレースしなくなったり、ピンポン玉を掴む動作を含んだwhile文から抜け出さなくなるなどの問題があったためコースを分割するなどしてプログラムが互いに干渉しないように組むのが大変だった。また、センサー類とモーターが車体前方に集中し車体が大きくなってしまった。


添付ファイル: fileDSC_02381.jpg 240件 [詳細] fileDSC_02301.jpg 231件 [詳細] file2014a-mission1.png 57件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-07-04 (金) 00:15:07 (1874d)