2012b/Member 目次
naotoxu:このページの製作者。頼りになりませんでした。
candle:情報工学科、ロボットを作る際に家を提供してくれた。感謝。
aromeo:ロボットの製作を手伝ってくれた。切れ者。
※2012年度後期/ロボコンページの図を使いました。
以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安:
初めに考えた案は2つあり、どちらかよい方を採用しようと思いました。そして、次の写真は初期案の試作機Aです。
これは、パックを掴んで持ち上げて障害物の向こうに置くということを目的に作られました。次は初期案の試作機Bです。
こちらは、障害物の向こうにあるパックを引っ張り出す目的で作られました。
作り終わったところでどちらにも問題があることが分かりました。Aは持ち上げる機構が重くなりパックを持つとモーターの力が足りなく、持ち上がらないこと。Bは輪ゴムで力を伝達しているので、はさむ力が足りなくパックを引っ張り出せないこと。どちらが克服しやすいか考えたところBの方がいけそうという判断をしたため、本番はBの改良型で挑むことにしました。
それがこちら
歯車を直列につなぎ、まわりをがっちり固めることでアームの力をアップさせました。
正直、一個ずつ交換することを目標にしました...
ライントレース多めのプログラムになりました。順序立てして説明します。
実際に使ったプログラムがこちらです。
#define THRESHOLD 46 //しきい値、調節してこの値になりました #define HIPOWER 7 //直線用のパワー #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; OnFwd(OUT_AC); //直進 #define turn_left1 set_power_L; OnRev(OUT_A); OnFwd(OUT_C); //左旋回 #define turn_left0 set_power_L; Off(OUT_A); OnFwd(OUT_C); //左折 #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 U_turn_time 200 //Uターンに必要な時間 /*最初に箱を掴む動作*/ #define box_catch1 OnFwd(OUT_AC);Wait(10);Off(OUT_AC);\ OnFwd(OUT_B);Wait(20);turn_left1;Wait(U_turn_time); #define STEP 1 //1回の判断で動作させる時間(これは1/100秒) #define n0MAX 18 //通常のカーブとして許容できる繰り返しの最大値 #define short_break Off(OUT_AC); Wait(30); //小休止 /*小回転*/ #define adjustment short_break;OnRev(OUT_A);\ OnFwd(OUT_C);Wait(80);Off(OUT_AC); int n0nline=0; //サブルーチンでもメインルーチンでも使えるグローバル変数を定義 /*サブルーチンでライントレースを定義*/ sub line_trace() { while(n0nline < n0MAX) //急なカーブがあるまで繰り返す { if (SENSOR_2 < THRESHOLD -4){ turn_left1; n0nline++; } //より暗いとき左旋回してカウンタを1増やす else if (SENSOR_2 < THRESHOLD -2){ turn_left0; } //暗いとき左折 else if (SENSOR_2 < THRESHOLD +2){ go_forward; } //中間の明るさのとき直進 else if (SENSOR_2 < THRESHOLD +4){ turn_right0; } //明るいとき右折 else { turn_right1; } //より明るいとき右旋回 Wait(STEP); } n0nline=0; //カウンタをリセット } task main() { SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサーをセット SetSensor(SENSOR_1, SENSOR_TOUCH); SetSensor(SENSOR_3, SENSOR_TOUCH); OnFwd(OUT_AC);Wait(50);Off(OUT_AC); //枠から出てライントレース line_trace(); //直角までライントレース short_break; turn_left1; Wait(n0MAX*STEP); //角度調節 OnFwd(OUT_AC);Wait(250); //パックのある枠の近くの線まで直進 until (SENSOR_2 < THRESHOLD -4); //黒い線が見つかるまで進む adjustment; //黒い線から少しでる line_trace(); //直角までライントレース turn_right1; Wait(n0MAX*STEP+20); //角度調節 box_catch1; //箱を掴む OnFwd(OUT_AC);Wait(180); until (SENSOR_2 < THRESHOLD -4); //黒い線が見つかるまで直進 adjustment; //黒い線から少し出る line_trace(); //直角までライントレース turn_left1; Wait(n0MAX*STEP); //角度調節 /*障害物までパックを運び、パックを置き、元々パックのあった枠の近くの線まで進む*/ OnFwd(OUT_AC);Wait(300); OnRev(OUT_B);Wait(20);Off(OUT_B); OnRev(OUT_AC);Wait(150);OnFwd(OUT_C);OnRev(OUT_A); Wait(120);OnFwd(OUT_AC);Wait(250); until (SENSOR_2 < THRESHOLD -4); //線が見つかるまで進む adjustment; line_trace(); //直角までライントレース turn_right1; Wait(n0MAX*STEP+120); //角度調節 /*障害物の向こうに置いてあるパックをつかんで引っ張りだし、Uターン*/ OnFwd(OUT_AC);Wait(300);Off(OUT_AC); OnFwd(OUT_B);Wait(50); OnRev(OUT_AC);Wait(150);Off(OUT_C);OnRev(OUT_A); Wait(120);OnFwd(OUT_AC);Wait(120); until (SENSOR_2 < THRESHOLD -4); 線が見つかるまで進む adjustment; line_trace(); //直角までライントレース turn_right1; Wait(n0MAX*STEP+20); //角度調節 Off(OUT_ABC); //ゴールで停止 }
ロボコンの結果は最下位、2つあるロボットの片方が奇妙な踊りを見せ笑いを誘っただけでした。 箱は1個も運べず、非常に苦い結果になってしまいました。
以上です。ありがとうございました。