2019a/Member

目次

課題内容

黒線の幅は20mmでなるべく均等な濃さにすること。ゴールには、長さ15または16のブロックおく。
課題2のコース

A地点を出発し、次のいずれかの経路を黒い線にそって動くロボットを作成する。
(他のメンバーとは別の経路になるようにする)。

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

交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。

ロボットの仕様

斜め上
  • 前輪と後輪とモーターなどの基本構造は説明書のままにした。
  • 光センサーは正確な値を図れるように車体前方の車輪のすぐそばに、そして、床からも離れすぎない位置に光センサーをつけた。
    前
    左横
  • 部品を減らして構造を単純化するために、ボールを掴むのではなく、上から覆いかぶさってボールを引きずって運ぶ方式をとった。
    アーム

プログラミング

  • 定義したこと
    • BLACK 21                  //ライン
    • B_WHITE 31                  //ライン
    • Gray 35                   //ライン
    • W_BLACK 56                 //ライン
    • WHITE 63                  //ライン 添付ファイル色図を参照
    • MOVE_TIME1 400           //ライントレースする時間    
    • go_forward OnFwd(OUT_BC,30);
    • turn_left OnFwd(OUT_B,30);Off(OUT_C);
    • turn_right OnFwd(OUT_C,30);Off(OUT_B);
    • short_break Off(OUT_BC);Wait(1000);
    • rot_left OnFwd(OUT_B,30);OnRev(OUT_C,30);   //左に旋回(出力30)
    • rot_right OnFwd(OUT_C,30);OnRev(OUT_B,30);  //右に旋回
    • rot_left2 OnFwd(OUT_B,40);OnRev(OUT_C,40);  //左に旋回(出力40 ←出力を上げることで回りやすくした)
    • A_down OnFwd(OUT_A,20);Wait(300);Off(OUT_A); //ボールを運ぶアームを下げる
    • A_up OnRev(OUT_A,30);Wait(300);Off(OUT_A);  //ボールを運ぶアームを上げる
    • go_back OnRev(OUT_BC,30);Wait(300);Off(OUT_BC);
    • follow_line()  //線上を進む
      {
       SetSensorLight(S3);  
       long t0 = CurrentTick(); 
         while(CurrentTick()-t0<=MOVE_TIME1) {
             if (SENSOR_3>WHITE) {t0=CurrentTick();
             rot_right;             //明るさが63より大きいとき右に旋回
           } else if (SENSOR_3>W_BLACK){t0=CurrentTick();
             turn_right;            //明るさが56より大きいとき右にまがる
           } else if (SENSOR_3>Gray){t0=CurrentTick();
             go_forward;             //明るさが35より大きいとき直進
           } else if (SENSOR_3>W_BLACK) {t0=CurrentTick();
             turn_left;             //明るさが31より大きいとき左にまがる
           } else {
             rot_left;                           //明るさが21より大きいとき左に旋回
            }
           }
         }
    • cross_line()  //交差点を曲がらずに超える
      {
       while(SENSOR_3<Gray){
          go_forward;      //明るさが35より大きいとき直進
       }
       while(SENSOR_3>W_BLACK){
           turn_right;     //明るさが31より大きいとき右にまがる
       } 
       Off(OUT_BC);
      }
    • fetch()  //線を追うときに時間内で動作を終える
      {
       long t1;
       t1=CurrentTick();
       while(CurrentTick()-t1<400){
             if(SENSOR_3>WHITE) {
             rot_left;             //明るさが63より大きいとき左に旋回
           } else if (SENSOR_3>W_BLACK){
             turn_right;           //明るさが56より大きいとき右にまがる
           } else if (SENSOR_3>Gray){
             go_forward;           //明るさが35より大きいとき直進
           } else if (SENSOR_3>W_BLACK) {
             turn_left;           //明るさが31より大きいとき左に旋回
           } else {
             rot_right;           //明るさが21より大きいとき右に旋回
            }
           }
         }
      *ライントレースする仕組み
      • 光センサーにより線上の明るさを感知して、判別すると添付ファイル順路のように進む。センサーには予めしきい値として5つの値を入れておいた。(添付ファイル色図を参照)
      • 交差点はBLACKの時間によって判断している。 まず交差点に行くまでは上記のように進む。交差点に行きつくとセンサーが黒と認識している時間が長くなるが、黒と認識している時間に制限を設けることで、その時間を超えるとロボットが停止する(交差点を判断する)ようになっている。
  • プログラムの全体像
    task main()
       follow_line();     
       short_break;
       cross_line();
       go_forward;
       Wait(300);  //アームを下ろす前に一度止まる
       A_down;   //アームをおろしてから
       fetch();  //進む
       follow_line();
       rot_left2;
       Wait(1600);  //200度ほど旋回して
       go_forward;
       Wait(600);  //次のラインまですすむ   
       turn_left;
      Wait(1000);   //センサーがうまく反応しなかったので左に曲がって
       go_forward;
       Wait(500);   //次のラインまで進む
       follow_line(); 
       cross_line();
       follow_line();
       A_up;            //アームを上げて
       go_forward();  //シュート
      }

生じた問題と改善

  • KLにかけての交差点を超えてボールを取り、旋回してKJ間の道になかなか戻らない
    →明るさの調整と定義した操作を利用した。
     
  • 旋回するときに他の線をたどりだしてしまう →出力を上げて光センサーがラインを感知する暇を作らない。

結果

  • 一回でコースをすべて回りきることは一回くらいしかなかった。
  • 部分的に走行できても途中で道を外れてしまうことが多かった。
    運ぶ様子
    ゴール直前
    ゴール

反省と感想

  • ロボットの作成は課題1よりは難しくなかったが、色の微調整が難しかった。
  • すべてがfollow_line で進めることができなかったので、このプログラミングでは課題2のコースのみしか走れないので、次回は汎用性をあげたプログラミングを作れるようになりたい。

添付ファイル: file右上.jpg 5件 [詳細] file斜め上.jpg 13件 [詳細] file左横.jpg 13件 [詳細] fileゴール直前.jpg 12件 [詳細] fileゴール.jpg 14件 [詳細] file運ぶ様子.jpg 13件 [詳細] file順路.xlsx 11件 [詳細] file色図 4件 [詳細] file課題のルート 13件 [詳細] fileアーム.jpg 10件 [詳細] file後ろ.jpg 5件 [詳細] file前.jpg 11件 [詳細]

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