[[2016a/Member]]

*課題 [#q14d3253]
#ref(2016a-mission2.png)
上図のA,B地点からロボットをスタートさせ、C,D地点にある紙コップを、中央付近円の中に運び入れる。そしていかに上手に紙コップを重ねられるかを競う。

なお美しさなども競う。

*ロボットの説明 [#m67cc8c1]
#ref(DSC_0180.JPG)
#ref(DSC_0181.JPG)

上図の黄色いはさみのような部分で紙コップを挟んでつかみ、アームの根元の部分を回転させてもちあげるようにした。

#ref(DSC_0182.JPG)

アームが閉じきると、ここの部分のゴムが引っかかり、そのままアーム自体が上下するような構造になっている。

#ref(image2 (2).JPG)

また、紙コップを挟んだ状態でアームを持ち上げたときにそのまま紙コップがずれ落ちないように、後ろの部分にストッパーを設置した。

*プログラムについて [#v4d6361f]
**定義 [#a8c575ff]
 #define BLACK 44  //これ以下は黒
 #define WHITE 50  //これ以上は白
 #define RIGHT_S OnFwd(OUT_A);OnRev(OUT_C);  //右旋回
 #define RIGHT_K OnFwd(OUT_A);Off(OUT_C);    //右回転
 #define LEFT_S OnFwd(OUT_C);OnRev(OUT_A);   //左旋回
 #define LEFT_K OnFwd(OUT_C);Off(OUT_A);     //左回転
 #define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);  //t秒間前進
 #define go_back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); //t秒間後退
 #define STEP 1
 #define arm_up(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); //t秒間腕上げ
 #define arm_down(t) OnRev(OUT_B);Wait(t);Off(OUT_B); //t秒間腕下げ
 #define RIGHT_i(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC); //t秒間右回転
 #define LEFT_i(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);OFF(OUT_AC); //t秒間左回転

**サブルーチン [#b601e9e1]
***ライトレース [#n90a3e75]


黒線の右側のライントレースのプログラム。交差点ではタイマーを使い、0.45秒以上黒が続いた時、交差点として判定する。

黒では右旋回、白では左旋回、その他では直進するようにしている。
これは腕が上がっている時に使用した。


 sub line_trace_i()
 {
   ClearTimer(0);
    while(FastTimer(0) < 45) {
      if  (SENSOR_2 < BLACK) {
            RIGHT_S;
          } else if (SENSOR_2 < BLACK +2 ) {
            RIGHT_K;
          } else if (SENSOR_2 > WHITE ) {
            LEFT_S;
            ClearTimer(0);
          } else if (SENSOR_2 >= WHITE -2 ) {
            LEFT_K;
            ClearTimer(0); 
          } else {
          OnFwd(OUT_AC);
          ClearTimer(0);
           }
          Wait(STEP);
        }
       Off(OUT_AC);
       ClearTimer(0);
       PlaySound(SOUND_UP);
       Wait(100);
 }

これは腕を下がっている状態の時使用した。

腕が下がっている状態では動きが鈍くなるため、交差点の判定時間を少し延ばしてある。


 sub line_trace_ii()
 {
   ClearTimer(0);
    while(FastTimer(0) < 55) {
      if  (SENSOR_2 < BLACK) {
            RIGHT_S;
          } else if (SENSOR_2 < BLACK +2 ) {
            RIGHT_K;
          } else if (SENSOR_2 > WHITE ) {
            LEFT_S;
            ClearTimer(0);
          } else if (SENSOR_2 >= WHITE -2 ) {
            LEFT_K;
            ClearTimer(0); 
          } else {
          OnFwd(OUT_AC);
          ClearTimer(0);
           }
          Wait(STEP);
        }
       Off(OUT_AC);
       PlaySound(SOUND_UP);
       Wait(100);
 }

***交差点進入後 [#nbe47fe7]

交差点左折

 sub turn_left()
 { ClearTimer(0);
   while (FastTimer(0) < 290) {       
         LEFT_K;
        }
 }

交差点右折
 sub turn_right()
 { ClearTimer(0);
  while (FastTimer(0) < 90) {       
         RIGHT_K;
        }
 }

交差点直進

 sub cross_fwd()
 { ClearTimer(0);
   while (FastTimer(0) < 60) {       
         LEFT_K;
        }
 }

**メインプログラム [#oc0281e3]
 task main()
 { go_fwd(100);
   line_trace_i();
   cross_fwd();
   line_trace_i();
   cross_fwd();
   line_trace_i();
   turn_right();
   Off(OUT_AC);
   arm_down(70);
   go_fwd(200);
   arm_up(90);
   RIGHT_i(120);
   arm_down(20);
   Wait(50);
   arm_down(70);
   go_back(100);
   arm_up(120);
   RIGHT_i(50);
   line_trace_ii();
   arm_down(100);
   go_fwd(200);
   arm_up(80);
   LEFT_i(130);
   go_fwd(50);
   arm_down(80);
 }

*まとめ [#h6be0482]
*結果 [#cf4654ac]
ライントレースが上手く行かず一つも紙コップを運ぶことができなかった

*反省と感想 [#b30e4072]
テスト走行の時点で、毎回必ず成功していた訳ではないので、本番では少し自信が無かった。

結果的には成功できなっかたが、紙コップ一つを円の付近にまでは持ってくることができたので、少し嬉しかった。

なかなか自分が他の五人と予定が合わせられなくて、他のメンバーに任せっきりになってしまっていたところがあり、チームに貢献することができなくて申し訳なっかた。


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