[[2009a]] #ref(2009a/A7/ロボコン/member11.png) [#c3aee04a] *目次 [#j77aafbc] #contents *更新履歴 [#xac9363f] **8/10 [#he6efc71] ロボット本体について更新 **8/5 [#nd631a3d] ロボコン当日、最終調整、プログラムの調整 **8/3 [#p3c7a9ad] ロボットの組み立て、イラスト作成、プログラム作成 **7/24 [#g06f0439] 考察の続き、ロボットの骨組み作り、フィールド全体図、ルール作成 **7/19 [#o6d1340c] 考察、メンバー紹介、コメント欄作成 **7/17 [#lf2d6f4d] ロボコンの課題内容発表 それに伴い考察を開始 *メンバー紹介 [#n0f8c352] [[2009a/A7/ロボコン/member]] *ロボコン [#n4225a63] **フィールド全体図 [#ee76a897] 紙パックを収集して色ごとに別の目的地まで運ぶ #ref(2009a/A7/ロボコン/robocon2009a-1.png) &size(16){''フィールドの説明''}; &br;・フィールドは約160cm×110cm &br;・運搬する500mlの紙パック(以下単に紙パックと呼ぶ)は約7cm×7cm×10.3cm &br;・紙パックはすべての面に白あるいは緑色の画用紙がはられている &br;・スタート地点の壁、中央の壁、ゴール近くの障害壁の断面は約89mm x 38mm &br;・目的地の正方形の3辺は19mm×19mmの角材で仕切られている &br;・黒い線の太さは約25mm **ルール [#cbe19b89] &size(16){''基本ルール''}; &br;・紙パックを所定の場所に運ぶ。 &br;・競技時間は審判が続行不能と判断するまで、あるいはリタイアするまでとする。 &br;・スタート時は上空も含め「スタート地点」からはみ出さないこと。 &br;・スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 &br;・開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 &br;・競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 &br;・途中でうまく動かなくなった場合、1回限り再スタートすることができる。 &br;・競技終了時点で、運んだ紙パックにロボットの一部が触れていてはならない。触れている場合は、その紙パックは加算しない。 &br;・ゴール内のフィールドに接地している紙パックだけを得点の対象とする。 &size(16){''基本得点の計算方法''}; &br;・それぞれの色につき、1個目は2点、2個目は4点、3個目は8点とする。 &br;・間違った色の紙パックが1個混入されている場合は、その色の紙パックの合計点を半分にする。2個混入されている場合は、1/4の得点にする。 &size(16){''技術点の計算方法''}; &br;以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(12チーム)が20点満点で採点し、最高得点と最低得点を除いた全10組の平均点を求める。得点の目安: &br;・紙パックを集める動作 (5点) &br;・紙パックを運ぶ動作 (3点) &br;・紙パックをゴールに入れる動作 (3点) &br;・2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(3点) &br;・自立型のロボットとしての形や動作の美しさ、斬新さ(3点) &br;・その他 (3点) **ロボット概要 [#zeb2a3ab] 今回のロボットではまずはじめに高さにこだわりました。 土台のロボットは上に乗っているロボットをなるべく低い位置から落とせるように。 上に乗るロボットは紙パックを回収する役割のために 紙パック多い手ある高さと同じ高さにキャタピラが来るように とすごく気を遣いました その中で問題だったのがRCX本体の高さと、モーターの高さでした。 モーターと本体両方ともすごく分厚かったため、これまでに作成したように作成しては 高さがすごく高くなりすぎてしまうという問題がありました そこで、RCX本体の横にモーターをもってくることで、高さの問題を解消することに成功しましたが。 本体とモーターの取り付部分が弱いために、強度を徹底的に高めなければならないという問題が発生しましたが 何とか解決をいたしました。 ***全体�〜紙パックを運ぶ方〜 [#kd073273] #ref(2009a/A7/ロボコン/SN3F0071.jpg,30%) 通常 #ref(2009a/A7/ロボコン/SN3F0069.jpg,30%) 紙パックを持った状態 ***全体�〜1を運ぶ方〜 [#b73e6cdc] #ref(2009a/A7/ロボコン/SN3F0072.jpg,30%) 橋を上げた状態 #ref(2009a/A7/ロボコン/SN3F0073.jpg,30%) 橋を下げた状態 モーターが横に付いているために、本体の横幅が広くなってしまい。 土台も広げなくてはならなかったため またもや強度の問題が発生しました 橋はスムーズに下りるようにと考え ちょうつがいのような機構を作成することで スムーズに橋がおりるようになりました ***�と�を使って [#a7f88f1a] #ref(2009a/A7/ロボコン/本体.jpg) ***フック [#jfe8947d] #ref(2009a/A7/ロボコン/SN3F0074.jpg,30%) このフックが下のキャタピラと同時に回って紙パックを中に入れる 詳しい説明は下↓↓↓↓↓ #ref(2009a/A7/ロボコン/キャタピラ.jpg) *考察 [#xae894c3] 案1 2台作り、一台の上にもう一台を乗っけて、壁の向こう側に送り込む 案1の1 プログラミングで動き制御 案1の2 紙パックの色を識別し、 その色のところへ向かう 案2 腕を伸ばして壁の手前から移動させる 案1の2はラインのないところに出たときにパックを置いてしまうという点が、 案2は案1に比べ強度の問題等も大きくなりそうな点、距離が遠いので届くか不安な点 のため案1の1になりそうです 作戦としてはプログラミングをガンバロウ的な そんな感じでございます *プログラム [#rcfa5d57] RCX下 定義 #define a OUT_A #define b OUT_B #define c OUT_C #define t 40//閾値を40に設定 #define w Wait int flag=0; task main(){ SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1をライトセンサーにセット SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をライトセンサーにセット SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3をライトセンサーにセット ClearTimer(0); OnRev(a+c); w(200); Off(a+c); OnRev(a); OnFwd(c); w(95); Off(a+c); while(Timer(0)<=260){ if(SENSOR_1>t){//もしセンサー1が閾値より高かったら左に進む OnRev(c);//左に進む Wait(5); Off(c); } if(SENSOR_1<t){//もしセンサー1が閾値より低かったら右に進む OnRev(a); Wait(5); Off(a); } } OnRev(c);//右に曲がって OnFwd(a); w(120); Off(a+c); OnRev(a+c);//少し下がって w(60); Off(a+c); SendMessage(1);//RCX上のほうにメッセージを送る Wait(800); OnFwd(a+c); w(200); Off(a+c); } RCX上 #define a OUT_A #define b OUT_B #define c OUT_C #define t 40//閾値を40に設定 #define w Wait int flag; int flag_min=0,flag_max=100; task main(){ ClearTimer(0); SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1をライトセンサーにセット SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3をライトセンサーにセット ClearMessage(); while(Message==1){//メッセージ1を受信するまで待機 Off(a+b+c); }//while until(SENSOR_2==1){//タッチセンサーに反応するまで直進 OnFwd(a+c); }//until (sensor2=1)//タッチセンサーに反応したら停止 Off(a+c); w(200); until((SENSOR_1<40)&&(SENSOR_3<40))//センサー1とセンサー3が閾値より下になるまで後退 { OnRev(a+c); }//until OnRev(a+c);//右に少しまがる Wait(10); OnFwd(a); OnRev(c); Wait(10); until(SENSOR_3<40){//センサー3が閾値より小さくなるまで右折 OnFwd(a); OnRev(c);}//until while(flag<=flag_max) start light2;//光センサータスク2を開始 until(flag==1){//カウントが1のとき OnFwd(a+c);直進 }//until(flag=1) OnFwd(c); OnRev(a); w(90); Off(a+c); if(flag==3||flag==7){//カウントが3と7の時 stop light1;//光センサータスクを停止 OnFwd(c);//右に曲がって w(75); Off(c); OnRev(a+c);//後ろに下がって w(50); Off(a+c); OnRev(b);//牛乳パックを取り込む w(150); OnFwd(a); OnRev(c); w(90); Off(a+c); OnFwd(100); start light1;//光センサータスクを開始 }//if(flag=3,7) if(flag==4||flag==8){//カウントが4のとき OnFwd(a);//左に曲がる OnRev(c); w(45); Off(a+c); } if(flag==6||flag==11){//カウントが6のとき OnFwd(a);//右にまがる OnRev(c); w(45); Off(a+c); until(SENSOR_3<t){ OnFwd(a+c); }//until(sensor3) OnFwd(c); OnRev(a); w(45); Off(a+c); }//if(flag=3,7) if(flag==5){ OnFwd(a); OnRev(c); w(45); Off(a+c); }//if(flag=5) if((SENSOR_2==1)&&(flag==5)){ OnRev(a+c); Wait(50); OnRev(b); w(100); OnRev(a+c); w(30); Off(a+c); } OnFwd(a); OnRev(c); w(90); Off(a+c); }//task main task light1(){ SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーにセット SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーにセット SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット while(flag<15){//カウントが15回になるまで繰り返す if(SENSOR_1<t){//もしセンサー1が閾値より低かったら OnFwd(a);//右に進む w(5); Off(a); } else{//もしセンサー1が閾値より高かったら OnFwd(c);//左に進む w(5); Off(c); } if(SENSOR_3<t){//もしセンサー3が閾値より低かったら OnFwd(a+c);//少し前に進んで w(20); Off(a+c); flag++;//カウントを1追加 } } } task light2() {// SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1を光センサーにセット SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3を光センサーにセット SetSensor(SENSOR_2,SENSOR_TOUCH);//センサー2をタッチセンサーにセット while(flag<15){//カウントが15回になるまで繰り返す if(SENSOR_3<t){//もしセンサー3が閾値より低かったら OnFwd(c);//右に進む w(5); Off(c); } if(SENSOR_3>t){//もしセンサー3が閾値より高かったら OnFwd(a);//左に進む w(5); Off(c); } if(SENSOR_1<t){//もしセンサー1が閾値より低かったら OnFwd(a+c);//少し前に進んで Wait(20); Off(a+c); flag++;//カウントを1追加 } } } [[2009a/A7/ロボコン/proglam]] *コメント [#b4de8d6c] コメントをお願いします〜 #comment