[[2019a/Member]]

*目次 [#gfd180ac]
#contents


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

#ref(2019a/Member/yuka/Mission2/課題のルート,10%,課題のルート)
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秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*ロボットの仕様 [#cb96596b]
#ref(2019a/Member/yuka/Mission2/斜め上.jpg,10%,斜め上)
-前輪と後輪とモーターなどの基本構造は説明書のままにした。
-光センサーは正確な値を図れるように車体前方の車輪のすぐそばに、そして、床からも離れすぎない位置に光センサーをつけた。
#ref(2019a/Member/yuka/Mission2/前.jpg,10%,前)
#ref(2019a/Member/yuka/Mission2/左横.jpg,10%,左横)
-部品を減らして構造を単純化するために、ボールを掴むのではなく、上から覆いかぶさってボールを引きずって運ぶ方式をとった。
#ref(2019a/Member/yuka/Mission2/アーム.jpg,10%,アーム)
*プログラミング [#p5058ead]
-定義したこと
--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;     
    turn_left;
  Wait(1000);   //センサーがうまく反応しなかったので左に曲がって
    go_forward;
    Wait(500);   //次のラインまで進む
    follow_line(); 
    cross_line();
    follow_line();
    A_up;            //アームを上げて
    go_forward();  //シュート
  }

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

*結果 [#u2e285cf]
-一回でコースをすべて回りきることは一回くらいしかなかった。
-部分的に走行できても途中で道を外れてしまうことが多かった。
#ref(2019a/Member/yuka/Mission2/運ぶ様子.jpg,10%,運ぶ様子)
#ref(2019a/Member/yuka/Mission2/ゴール直前.jpg,10%,ゴール直前)
#ref(2019a/Member/yuka/Mission2/ゴール.jpg,10%,ゴール)



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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS