[[2012b/Member]] &size(18){目次}; #contents *メンバー [#h16a624b] naotoxu:このページの製作者。頼りになりませんでした。 candle:情報工学科、ロボットを作る際に家を提供してくれた。感謝。 aromeo:ロボットの製作を手伝ってくれた。切れ者。 *ロボコンの内容 [#g6f5aff7] #ref(2012b/Member/naotoxu/Mission2/robocon2012b.png,80%,課題2コース図) ※2012年度後期/ロボコンページの図を使いました。 **フィールドの説明 [#o4070d3e] -フィールドは課題1で使用した紙を2枚つなぎ合わせる (向きは自由) -白い紙パックと黒い紙パックがそれぞれ3個づつ対角のゴール(課題1のゴール)に置かれている (前1個、後2個の2列に配置する) -2枚の紙のつなぎ目に断面が約3cm×4cmの角材を両面テープまたは押しピンで貼り付ける。 -黒い線の幅は20mmとする **ルール [#y21914d5] ***基本ルール [#e18ff671] -白い紙パックと黒い紙パックを入れ替える。 -競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。 -課題1のスタート地点からスタートする。 -スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 -開始の合図から5秒以内にスタートボタンを押す作業を完了すること。 -競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 -途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。 -最終的にゴールに運び込まれた紙パックの数で点数を計算する。 ***基本得点の計算方法 [#b9b264e7] -運びこまれた紙パックに1個つき3点5点。ただし、紙パックを2段または3段に積み上げた場合は、2段目の紙パックを6点、3段目の紙パックを9点とする。 -紙パックが半分以上ゴールからはみ出している場合は、1個2点1点、はみ出している部分が半分未満の場合は1個2点3点とする -一部がゴールの外にはみ出た出た紙パックの上に積み上げられた紙パックは、何段目であっても各3点とする。 ***技術点の計算方法 [#r10fffc4] 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安: -紙パックまでたどり着く動作 (3点) -紙パックを運ぶ動作(2点) -障害物を越える動作 (4点) -2台以上のロボット、あるいは単体のロボットの場合は2台のRCX,NXTの連携の良さ(3点) -自立型のロボットとしての形や動作の美しさ、斬新さ(3点) -その他 (4点) *ロボットの説明 [#l1be78b7] 初めに考えた案は2つあり、どちらかよい方を採用しようと思いました。そして、次の写真は初期案の試作機Aです。 #ref(2012b/Member/naotoxu/Mission2/sisaku2gouki.JPG,80%,試作機A) これは、パックを掴んで持ち上げて障害物の向こうに置くということを目的に作られました。次は初期案の試作機Bです。 #ref(2012b/Member/naotoxu/Mission2/sisaku1gouki.jpeg,80%,試作機B) こちらは、障害物の向こうにあるパックを引っ張り出す目的で作られました。 作り終わったところでどちらにも問題があることが分かりました。Aは持ち上げる機構が重くなりパックを持つとモーターの力が足りなく、持ち上がらないこと。Bは輪ゴムで力を伝達しているので、はさむ力が足りなくパックを引っ張り出せないこと。どちらが克服しやすいか考えたところBの方がいけそうという判断をしたため、本番はBの改良型で挑むことにしました。~ それがこちら #ref(2012b/Member/naotoxu/Mission2/kansei.JPG,80%,完成) 歯車を直列につなぎ、まわりをがっちり固めることでアームの力をアップさせました。 *プログラム [#e3f14bf7] 正直、一個ずつ交換することを目標にしました... **プログラムの概要 [#kcf04701] ライントレース多めのプログラムになりました。順序立てして説明します。 +枠から出てライントレース、光センサーで直角を判断しそこから線を無視して直進。 +しばらく線を無視し、その後線が現れるとライントレースをし箱をつかむ。 +そこからUターンし直進、1や2と同じ要領で進み、直角から直進し箱を置く。 +反対側に戻り箱をつかみに行く。 +箱を引っ張り出してUターン、ゴールに置く。 #ref(2012b/Member/naotoxu/Mission2/junnjo.png,80%,順序) **本番使ったプログラム [#je4fb8f1] 実際に使ったプログラムがこちらです。 #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); //ゴールで停止 } *まとめ [#cfab31ad] **結果 [#a093d9f5] ロボコンの結果は最下位、2つあるロボットの片方が奇妙な踊りを見せ笑いを誘っただけでした。 箱は1個も運べず、非常に苦い結果になってしまいました。 **反省 [#gc9f0681] -まず、全員で会える機会が少なく情報交換も少なかったのが痛かったと思います。プログラムも自分一人で背負いこんでしまって、結果的に迷惑をかけてしまいました。 -ロボット自体はほぼ完成形までいきましたが、時間をかけたせいでプログラムが粗末になってしまいました。 **感想 [#gf04b8ef] -ロボットを作るということはいかに考える時間が必要かというのがわかり、他の授業のテストがあるということで忙しがっていてはいけないと思いました。 -この授業を通して考えをめぐらせ、諦めずに頑張ることが成功をつかむために大事だということがしみじみわかりました。 以上です。ありがとうございました。