2019a/Member

課題2

ミッション

A地点から出発→B→C(直進)→D(一時停止の後,直進)→E→F→G(一時停止の後,右折)→H→I→J(右折)→K(左折)→L(ピンポン玉をつかむ)→K(直進)→M(一時停止)→シュート→A地点に入る(ゴール)

ロボットの構造

ロボットの全体の仕組み

アームを前方につけ操作盤を後方につけた。光センサーはアームの下に取り付けた。

image1 (9).jpeg

アームの構造

ピンポン玉をすくいあげるようにして取るような構造にした。

image1 (10).jpeg

プログラミング

光センサーを五段階に設定

#define BLACKS 45
#define BLACK 53
#define THRESHOLD 61
#define WHITE 69
#define WHITES 75

光センサーに対応したロボットの動作

#define left_s OnFwd(OUT_A,20);OnRev(OUT_B,20);
#define left OnFwd(OUT_A,20);Off(OUT_B);
#define right_s OnFwd(OUT_B,20);OnRev(OUT_A,20);
#define right OnFwd(OUT_B,20);Off(OUT_A);
#define forward OnFwd(OUT_AB,20);

交差点の認識

BLACKの時間の長さで交差点であるかどうかを認識した

サブルーチン

線の左側をライントレースするプログラミング

sub follow_line_left() [#x3708656]
{
   SetSensorLight(S3);
 
   long t0=0,t1=0,time_max=2;
   while(t1-t0<time_max){
       if(SENSOR_3<BLACKS){
           t0=CurrentTick();
           left_s;until(SENSOR_3<THRESHOLD);
           t1=CurrentTick();
       }else if(SENSOR_3<BLACK){
           left;
       }else if(SENSOR_3<THRESHOLD){
           forward;     
       }else if(SENSOR_3<WHITE){
           right;
       }else if(SENSOR_3<WHITES){
           right_s;
       }
    }
    Off(OUT_AB);
    Wait(1000);
} 

線の右側をライントレースするプログラミング

sub follow_line_right()
{
   SetSensorLight(S3);
  
   long t0=0,t1=0,time_max=2;
   while(t1-t0<time_max){
       if(SENSOR_3<BLACKS){
          t0=CurrentTick();
           right_s; until(SENSOR_3<THRESHOLD);
           t1=CurrentTick();
      }else if(SENSOR_3<BLACK){
         right;
      }else if(SENSOR_3<THRESHOLD){
          forward;     
      }else if(SENSOR_3<WHITE){
          left;
      }else if(SENSOR_3<WHITES){
          left_s;
      }
   }
   Off(OUT_AB);
   Wait(1000);
} 

メインプログラム

task main()
{
    long t=1000;
    forward;
    Wait(1000);         //Aから出る。
    follow_line_left();     //BからCを通りDで止まる。
    forward;
    Wait(t);          //Dの交差点を渡る。
    follow_line_left();     //DからEを通りFで止まる。
    right;
    Wait(t);          //Gで方向転回。
    follow_line_right();    //GからHまで移動。
    repeat(2){
        forward;
        Wait(t);
        follow_line_right();
    }              //HからIを通りJで止まる。
    right_s;
    Wait(t);  
    follow_line_right();    //JからKまで移動。
    left_s;
    Wait(t);          //Kで方向転換。
    follow_line_left();     //KからLに移動。
    OnRev(OUT_C,20); 
    Wait(500);          //ボールをすくい取る。
    left_s;
    Wait(4000);         //Lで方向転換。
    follow_line_right();    //LからKに移動。
    forward;     
    Wait(2000);         //交差点を渡る。
    follow_line_right();    //KからMに移動。
    OnFwd(OUT_C,20);
    Wait(500);          //ボールを下ろす。
    OnRev(OUT_AB,20);
    Wait(500);
    OnFwd(OUT_AB,100);
    Wait(t);           //シュート。
    Off(OUT_AB);          //停止。
}

まとめ

今回は交差点で止まったりなどプログラミングがむずかしかった。また,光センサーの値が場所によって変わるのでよりプログラミングより困難になった。


添付ファイル: fileimage2.png 1件 [詳細] fileimage1 (12).jpeg 3件 [詳細] fileimage1 (11).jpeg 1件 [詳細] fileimage1 (10).jpeg 4件 [詳細] fileimage1 (9).jpeg 5件 [詳細] file2019a-mission2.png 1件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-14 (水) 02:15:39