積み上げロボットが青のルートで缶を一つ持ってゴールで待機し、缶を運ぶロボットが赤のルートで缶を一つだけゴールに運ぶ
缶を縦に二個掴みタイヤで押さえつける。 この二つのタイヤで缶を持ち上げる。
モーターの出力が3つしかないため、直進しかできなくなりました。
シンプルです。積むロボットとの関係上、缶一つだけしか運べないようにしました。
#define THRESHOLD 50 //閾値 #define HIPOWER 2 //高速 #define LOWPOWER 1 //低速 #define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速で動かす #define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低速で動かす #define go_forward(t) set_power_H; OnFwd(OUT_A); Wait(t); Off(OUT_A); //前進 #define go_back(t) set_power_L; OnRev(OUT_A); Wait(t); Off(OUT_A); //後進 #define can_hold(t)set_power_L; OnFwd(OUT_C); Wait(t); //缶を掴む #define can_up(t) set_power_L; OnFwd(OUT_B); Wait(t); Off(OUT_B); //缶を持ち上げる #define can_down(t) set_power_L; OnRev(OUT_B); Wait(t); Off(OUT_B); //缶を下ろす #define can_rerease(t) set_power_L; OnRev(OUT_C); Wait(t); Off(OUT_C); //缶を離す
sub can_stack() { can_hold(100); go_back(30); go_forward(50); can_up(700); go_forward(200); can_down(200); can_rerease(60); go_back(1000); }
task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); go_forward(600); Wait(3000); //缶を集めるロボットがいなくなるのを待つ。 can_stack(); }
#define THRESHOLD 40 //閾値 #define HIPOWER 3 //高速 #define LOWPOWER 2 //低速 #define set_power_H SetPower(OUT_AC,HIPOWER); //ACを高速で動かす #define set_power_L SetPower(OUT_AC,LOWPOWER); //ACを低速で動かす #define go_forward set_power_H; OnFwd(OUT_AC); //前進 #define turn_left1 set_power_L; OnFwd(OUT_C); OnRev(OUT_A); //左旋回 #define turn_left0 set_power_L; OnFwd(OUT_C); Off(OUT_A); //左折 #define turn_right0 set_power_L; OnFwd(OUT_A); Off(OUT_C); //右旋回 #define turn_right1 set_power_L; OnFwd(OUT_A); OnRev(OUT_C); //右折 #define time0 800 #define time1 700 #define time3 4000
sub turn1() { OnFwd(OUT_A); Wait(250); Off(OUT_A); }
sub line1() { if (SENSOR_2 < THRESHOLD -5) { turn_right1; } else if (SENSOR_2 < THRESHOLD -3) { turn_right0; } else if (SENSOR_2 < THRESHOLD +3) { go_forward; } else if (SENSOR_2 < THRESHOLD +5) { turn_left0; } else { turn_left1; } }
sub line2() { if (SENSOR_2 < THRESHOLD +0) { turn_right1; } else if (SENSOR_2 < THRESHOLD +3) { turn_right0; } else if (SENSOR_2 < THRESHOLD +5) { go_forward; } else if (SENSOR_2 < THRESHOLD +7) { turn_left0; } else { turn_left1; } }
sub uturn() { OnRev(OUT_AC); Wait(150); OnFwd(OUT_A); OnRev(OUT_C); Wait(100);}
sub line3() { if (SENSOR_2 < THRESHOLD +0) { turn_left1; } else if (SENSOR_2 < THRESHOLD +3) { turn_left0; } else if (SENSOR_2 < THRESHOLD +5) { go_forward; } else if (SENSOR_2 < THRESHOLD +7) { turn_right0; } else { turn_right1; } }
task main () { SetSensor(SENSOR_2,SENSOR_LIGHT); turn1(); //最初にターン ClearTimer(0); while (FastTimer(0) <= time0) { line1(); } //time0が終わるまでline1を実行 ClearTimer(0); while (FastTimer(0) <= time1) { line2(); } //time1が終わるまでline2を実行 uturn(); //空き缶を運び終わり、Uターン ClearTimer(0); while (FastTimer(0) <= time3) { line3(); } //time3が終わるまでline3を実行 OnRev(OUT_AC); Wait(150); //空き缶を置いて後退 Off(OUT_AC); }
はじめは缶を掴み、そのアームごと持ち上げて積むロボットを作ったが、モーターが重すぎて持ち上げることができなかったため、断念せざるを得なかった。ロボットの製作に時間がかかってしまい、プログラミングがお粗末なものになってしまった。本来ならば、二台のロボットが通信して缶を積みたかった。ロボコン本番では収集ロボットがうまく動いてくれず残念ではあったが、積み上げロボットだけで15点を獲得できたのは嬉しかった。機械ロボット学系としてこの授業を受けることができたのは、近い将来にきっと役に立つと思う。