今回の課題は、コースの決まった所に配置された空き缶を収集し、ゴールに空き缶をなるべく高く積み上げるというものです。
詳しくは課題3
を参照。
二台の本体を赤外線で通信させて、前方の本体を移動用、後方の本体を缶の積み上げ動作用に設定しました。
前方を二輪構造にして、後方は回転するブロックを付けて滑らせる構造にしました。
この構造にすることによって機体の回転半径を小さくすることに成功しました。
缶の集め方は、前方に缶を集めるためのフレームを付けて広範囲から缶を回収し、積み上げ動作を行う部分にたどり着くように設定しました。
ギアと輪ゴムをうまく使い一つのモーターで4つのタイヤを動かし、その4つのタイヤを回転させることにより缶を持ち上げる構造にしました。ここで苦労したのは缶の幅とタイヤの幅を合わせることです。幅が大きすぎると缶が上がらず、幅が狭すぎると缶が間に入らなかったので、タイヤに輪ゴムを巻くなどして完璧な幅に調整しました。
缶の置き方は、黄色い積み上げ部分が前方に押し出される構造にしてタイヤに引っかからないようにして缶を置くようにしました。
Aからスタートして、E地点缶を上げ、ロボット前方のフレームで缶を集めながらゴールに向かって前進しながら、F.EF間.Tの缶を集めゴールするルートにしました。
#define SIGNAL_ARM 1 #define SIGNAL_GO 2 #define senkai_l Wait(50);OnFwd(OUT_C);OnRev(OUT_B);Wait(80);Off(OUT_BC); //右旋回 #define go_forward OnFwd(OUT_BC); //直進 #define go_back OnRev(OUT_BC);Wait(100);Off(OUT_BC); //後退 sub can_catch() //缶の目の前まで進む {go_forward; SendMessage(SIGNAL_ARM); until(Message() == SIGNAL_GO); Off(OUT_BC);} sub tyokushin() //缶を持ち上げてから、右に90°旋回して直進する {go_forward; Wait(370); Off(OUT_BC); SendMessage(SIGNAL_ARM);} sub can_release() //缶をおろして押し出したあと、後退する {until(Message() == SIGNAL_GO); go_back; } task main() { ClearMessage(); can_catch(); senkai_l; ClearMessage(); tyokushin(); can_release(); }
#define SIGNAL_ARM 1 #define SIGNAL_GO 2 #define can_up OnFwd(OUT_A); //缶を上げる #define can_down OnRev(OUT_A);Wait(50);Off(OUT_A); //缶を下げる #define can_push OnFwd(OUT_C);Wait(50);Off(OUT_C); //缶を押し出す sub can_catch() //回転センサーが反応するまで缶を持ち上げる {until(Message() == SIGNAL_ARM); can_up; until(SENSOR_3 < -3); Off(OUT_A); SendMessage(SIGNAL_GO);} sub can_release() //缶を下げて押し出す {until(Message() == SIGNAL_ARM); can_down; Wait(50); can_push; SendMessage(SIGNAL_GO);} task main() { SetSensor(SENSOR_3, SENSOR_ROTATION); ClearMessage(); can_catch(); ClearMessage(); can_release(); }
結果は缶を2段まで積めて&br 基本点9点 技術点平均14.3点 合計23.3点 順位4位&br となりました。
今回の課題は今までの課題に比べて非常に難易度が高かったと思います。進めていく内に課題がどんどん出てきました。しかし4人で試行錯誤し、いままで習ってきたことを生かしてなんとか課題を成し遂げました。練習では15点を取ることが出来ていたが、本番では9点となってしまったのでもう少し正確性を上げられればよかったが、発表までの限られた時間の中ではしっかりと作れたので良かったと思います。