[[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] テスト走行の時点で、毎回必ず成功していた訳ではないので、本番では少し自信が無かった。 結果的には成功できなっかたが、紙コップ一つを円の付近にまでは持ってくることができたので、少し嬉しかった。 なかなか自分が他の五人と予定が合わせられなくて、他のメンバーに任せっきりになってしまっていたところがあり、チームに貢献することができなくて申し訳なっかた。