2016a/Member

課題

2016a-mission2.png

上図のA,B地点からロボットをスタートさせ、C,D地点にある紙コップを、中央付近円の中に運び入れる。そしていかに上手に紙コップを重ねられるかを競う。

なお美しさなども競う。

ロボットの説明

DSC_0180.JPG
DSC_0181.JPG

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

DSC_0182.JPG

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

image2 (2).JPG

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

プログラムについて

定義

#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秒間左回転

サブルーチン

ライトレース

黒線の右側のライントレースのプログラム。交差点ではタイマーを使い、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);
}

交差点進入後

交差点左折

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;
       }
}

メインプログラム

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);
}

結果

ライントレースが上手く行かず一つも紙コップを運ぶことができなかった

反省と感想

テスト走行の時点で、毎回必ず成功していた訳ではないので、本番では少し自信が無かった。

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

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


添付ファイル: fileimage2 (2).JPG 107件 [詳細] fileDSC_0182.JPG 102件 [詳細] fileDSC_0181.JPG 128件 [詳細] fileDSC_0180.JPG 125件 [詳細] file2016a-mission2.png 109件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-12 (金) 22:25:59 (1103d)