今回の課題はロボコンでした。コース上にある空き缶を集め、ゴールに積み上げて得点を競い合うものでした。
得点の配点の内容は… 得点の目安:
空き缶を取りにいくまでの動作 (2点) 空き缶を掴む動作 (4点) 空き缶をを運ぶ動作(2点) 空き缶を積み上げる動作(5点) 2台のRCXまたはNXTの連携の良さ(3点) 自立型のロボットとしての形や動作の美しさ、斬新さ(2点) その他 (2点)
計20点で評価される。
私たちの班は、エレベーター式にしました。アームのついている部分をモーターで巻き上げ缶を上に積み上げるものでした。駆動するモーターとは別に、アームを上に固定し安定させるために、もう一つ配線をつなげていないモーターを取り付けました。
このプログラムは理想のものです。ロボットが想像通り上手くいっていれば、使うはずでした。
#define OPEN 1 //缶を発見したことを知らせる #define GO 2 //缶を掴んだことを知らせる #define PUT 3 //ゴールに到着したことを知らせる #define BACK 4 //ゴールに缶を置いたことを知らせる #define THERESHOLD 47 //しきい値 #define HIPOWER 3 #define LOWPOWER 2 #define set_power_H SetPower(OUT_AC,HIPOWER); #define set_power_L SetPower(OUT_AC,LOWPOWER); #define go_forward set_power_H; OnRev(OUT_AC); //直進する #define turn_left1 set_power_L;\OnFwd(OUT_A); OnRev(OUT_C); //左旋回する #define turn_left0 set_power_L;\OnRev(OUT_C); Off(OUT_A); //左折する #define turn_right0 set_power_L;\OnRev(OUT_A); Off(OUT_C); //右折する #define turn_right1 set_power_L;\OnFwd(OUT_C); OnRev(OUT_A); //右旋回する #define STEP 1 #define nMAX 35 #define short_break Off(OUT_AC); Wait(100); //小休止する #define cross_line go_forward set_power_H;\OnFwd(OUT_AC); Wait(20); short_break; //交差点を通過する task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_3,SENSOR_LIGHT); int nOnline=0; ClearTimer(1); while (FastTimer(1) <= 500) { go_forward; if (SENSOR_3 > 48) { //缶を発見 SendMessage(OPEN); //アームを開くように指示 Off(OUT_AC); } until (Message() == GO); //アームの動作が終了時 go_forward; //再び直進 } ClearTimer(0); while (true) { if (SENSOR_1 < THERESHOLD -4) { turn_right1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_right0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_left0; } else { turn_left1; } if (SENSOR_3 > 48) { SendMessage(OPEN); Off(OUT_AC); } if (nOnline == 8) { OnFwd(OUT_A); OnRev(OUT_C); Wait(300); SendMessage(PUT); } until (Message() == GO); while (FastTimer(0) < nMAX) { if (SENSOR_1 < THERESHOLD -4) { turn_right1; } else { if (SENSOR_1 < THERESHOLD -2) { turn_right0; } else if (SENSOR_1 < THERESHOLD +2) { go_forward; } else if (SENSOR_1 < THERESHOLD +4) { turn_left0; } else { turn_left1; } ClearTimer(0); } Wait(STEP); } turn_left1; Wait(nMAX*STEP); cross_line; nOnline++; PlaySound(SOUND_CLICK); ClearTimer(0); if (SENSOR_3 > 48) { //缶を発見 SendMessage(OPEN); //アームを開くように指示 Off(OUT_AC); } until (Message() == BACK); OnRev(OUT_AC); Wait(100); } }
#define OPEN 1 #define GO 2 #define PUT 3 #define BACK 4 #define PowerA SetPower(OUT_A,0); // アームを開ける為のパワー #define PowerB SetPower(OUT_A,7); // アームを閉じ、缶を掴み続けるパワー #define PowerC SetPower(OUT_C,0); // アームを下ろすのと、アームを上で固定するパワー #define PowerD SetPower(OUT_C,10); // アームを上げる為のパワー task main() { ClearMessage(); while (true) { PowerC; OnFwd(OUT_C); until (Message() == OPEN); PowerA; OnRev(OUT_A); Wait(40); PowerC; OnRev(OUT_C); Wait(90); PowerB; OnFwd(OUT_A); Wait(40); PowerD; OnFwd(OUT_C); Wait(160); SendMessage(GO); PowerC; OnFwd(OUT_C); until (Message() == PUT); PowerC; OnRev(OUT_C); Wait(50); PowerA; OnRev(OUT_A); Wait(40); SendMessage(BACK); } Wait(10); }
今回のロボットは変更点が特に多かった。最終的にプログラムの面では、缶を運搬時にメロディーを流すなど、かなり完成されたものであった。しかし、二台のロボットの連携が上手くいかなかったこと、ロボット自体の構造に少し無理があったことが災いしライントレースをして缶を積み上げることはできなかった。本番では、手堅く一つの缶にしぼりゴールを目指した。 班の製作に移り変わった当初は、分離型にしようとしていました。しかし、製作していくうちに合体型の方が、成功率・安定性・プログラムの量の三つの点で優れている!と感じました。そこで、合体型を作り始めました。まずは大まかな構造を話し合いエレベーター式にしようと決めました。
構造上の最大の問題点は、前部分のエレベーターをどう支えるかでした。これは、後部に支えを作ることで解決はしましたが、車体全体の重さがかなり重くなってしまいました。この影響により、車輪が重さに耐えきれず進まなくなてしまいました。そこで、先生からの助言もありエレベーターの下のタイヤを、駆動輪に変更しました。それによりこの問題は解決しました。駆動輪のは、ディファレンシャルギアを使いました。 今回のロボットは変更点が特に多かった。最終的にプログラムの面では、缶を運搬時にメロディーを流すなど、かなり完成されたものであった。しかし、二台のロボットの連携が上手くいかなかったこと、ロボット自体の構造に少し無理があったことが災いしライントレースをして缶を積み上げることはできなかった。本番では、手堅く一つの缶にしぼりゴールを目指した。 班の製作に移り変わった当初は、分離型にしようとしていました。しかし、製作していくうちに合体型の方が、成功率・安定性・プログラムの量の三つの点で優れている!と感じました。そこで、合体型を作り始めました。まずは大まかな構造を話し合いエレベーター式にしようと決めました。
構造上の最大の問題点は、前部分のエレベーターをどう支えるかでした。これは、後部に支えを作ることで解決はしましたが、車体全体の重さがかなり重くなってしまいました。この影響により、車輪が重さに耐えきれず進まなくなてしまいました。そこで、先生からの助言もありエレベーターの下のタイヤを、駆動輪に変更しました。それによりこの問題は解決しました。駆動輪のは、ディファレンシャルギアを使いました。
プログラムはearthが、とてもがんばってくれました。ロボットの構造自体は多大な時間をかけたが、まだまだでした。特に、アームとエレベーターの固定を考えるべきであったと思いました。このプログラムを是非使って成功させたかった。しかし、この講義を受講できて良かった。とても楽しかった。班のみんなありがとう。