目次 #contents *メンバー紹介 [#zb14c85c] フミ、ヒコ、ダイ、ヨシ *課題:ボール運搬ロボット [#e5f41605] **競技の目的 [#d13046f7] -テニスボール3個を所定の位置から所定の位置まで運ぶ **競技コース [#kf643941] http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2007b%2F%A5%ED%A5%DC%A5%B3%A5%F3&openfile=robocon2007b.png **基本ルール [#r0fa1845] -テニスボールをすべて運び終わった時点、審判によって続行不能とみなされた時点、または競技者がリタイアを宣言した時点で競技終了となる。 -スタート時には一部でも円や障害の上およびその上空にあってはいけない。 -スタート時のロボットの数は3個を超えてはいけない(スタート後にいくつに分裂してもかまわない)。 -競技開始5秒以内にスタートボタンを押す。 -競技終了まで遠隔操作したりロボットに触れたりしてはいけない。 -うまくいかなくなったとき1度だけ再スタートできる。 -競技終了時点で運び終わったボールにロボットが触れていてはいけない。 **得点 [#yf61334b] ***基本得点 [#y9a301b2] -ボールを1個運ぶと4点 -ボールを2個運ぶと8点 -ボールを3個運ぶと16点 運び終わったあとロボットがボールに触れていた場合には、(運んだボールの合計数)×(-2点) ***技術得点 [#s868f9f6] 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(5チーム)が20点満点で採点し、その平均点を求める。 得点の目安: -ボールを集める動作 (4点) -ボールを運ぶ動作 (4点) -2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(4点) -自立型のロボットとしての形や動作の美しさ、斬新さ(4点) -その他 (4点) ***タイム得点 [#k58f48b4] 平均タイムのもっとも速いチームから順に、4点、3点、2点、1点、0点とする。 ただし平均タイムは以下のように計算する -ボール1個運んだ場合には、スタート時から運び終わるまでの時間 -ボール2個運んだ場合には、スタート時から運び終わるまでの時間を3で割った値 -ボール3個運んだ場合には、スタート時から運び終わるまでの時間を5で割った値 *戦略 [#u7aaa796] ロボコンにおいて、戦略はロボットの制作やプログラムなどの全ての基礎となる大事なことです。A3チームでは、課題を達成するために以下の3つの戦略を考えました。 **戦略1 [#kc5490cd] -ボールを拾い、橋を伸ばして直接ゴールに入れるロボットと、橋を転がってきたボールがゴールの枠から出ないように受け止めるロボットの2台でボールを運ぶ案。最初に考え、ロボットも途中まで制作しましたが、傾斜した橋を転がる高さまでボールを持ち上げるのが困難で断念しました。 **戦略2 [#g11bcc7d] -枠からボールを押し出すロボットと、そのボールをゴールまで持っていくロボット2台でボールを運ぶ案。ボールが運搬ロボットの進路上に3つ並ぶため良い案に思えましたが、押し出しロボットのボールの設置位置が不正確なことと、1つ1つのボールで運搬ロボットが持ち上げる位置が変わるためプログラムが面倒になるということで断念しました。 **戦略3 [#jd82b45a] -枠からボールを押し出すロボットと、そのボールをゴールまで持っていくロボットと、押し出されたボールを運搬ロボットの進路上まで運ぶロボットの3台でボールを運ぶ案。戦略2の問題点を一挙に解決でき、最終的にこの案を採用しました。 *ロボット [#gab5be88] **A3TEAM'S ROBOT---ROVO(ロヴォ) [#naf651b8] 今回大会のロボコンでは唯一3台のロボットで競技を行なった。 バラバラの3台のロボットがきめられた役割でボールを運んでいく。3代ともシンプルな構造ながら他のチームにはない斬新なロボットだ。 各ロボットの動きを説明する。ロヴォ初号機はボールを枠から押し出し壁に押し付ける事で、ボールを一列のするロボット。ロヴォ弐号機はボールを穴の目の前のライン上まで運ぶロボット、ロヴォ参号機はゴールまでボールを運ぶロボットです。 ちなみに非公式ながら3個すべてのボールを運べた唯一のチーム。 **ロヴォ初号機 [#taeebcbf] ***全体 [#sd1a2441] ***特徴 [#id1e2ad7] 長い車幅が特徴のロボット。その巨体によりボールを一列に壁際に並べる役割を持つ。動きは前進後退のみ、可動時間はスタート開始8秒間と非常に短いがその役割は大きい。 **ロヴォ弐号機 [#c41246c7] ***全体 [#gfde7ab5] ***特徴 [#g2c14cd3] ロヴォ初号機とは正反対で、縦長車幅の狭いフォルムのロボット。ロヴォ初号機によって壁におしつけられたボールを一列に、ライン上の穴の前まで並べる。初号機、弐号機の制作者はフミ、とヒコ。 **ロヴォ参号機 [#kb6b91f2] ***全体 [#kf27e83f] ***特徴 [#a606f301] -アーム ボールを1つずつ運ぶことができます。ボールをつかむ、持ち上げるの動作を1つのモーターで行うことができるようにしました。 -足回り その場で旋回したい、タイヤは車幅を短くしにくい、キャスターを用いると前進から後退への切り替えのときに車体の向きがぶれやすいなどの理由から足回りにはキャタピラを使いました。新たに簡単でコンパクトな「簡易キャタピラ」を制作し、それによって10cmの障害物の隙間を通れるようにしました。 -光センサ ボールを受け取る場所からゴール地点まで黒線を追うためのセンサです。このロボットには光センサを2つ使い、スムーズに進めるようにsただけでなくゴール手前の黒線の交差点を感知し、それによってボールを置く動作に移るようにしました。 -タッチセンサ ボールを持ち上げるために障害物を通り抜けたときアームを開かなくてはならないため、障害物にさしかかったことを感知するタッチセンサを取り付けました。 -ローラー 障害物の間を通り抜けるときに、黒線に対して車体が少しでも曲がっていると引っかかってしまうため、ローラーを前後に取り付けて前進と後退どちらでも確実に障害物の間を通り抜けられるようにしました。また、このローラーがあることでタッチセンサが確実に反応するようになっています。 *プログラム [#z7f0b276] **ロボット1,2のプログラム [#jef7212b] task main() { OnFwd(OUT_A+OUT_C); //初号機の前進 Wait(400); Off(OUT_A+OUT_C); OnRev(OUT_A); //初号機の後退 OnRev(OUT_C); Wait(400); Off(OUT_A+OUT_C); OnFwd(OUT_B); //弐号機の前進(ロボット3の進路上までボールを運ぶ) Wait(895); OnRev(OUT_B); //弐号機の後退。 Wait(400); Float(OUT_B); Wait(3500); //参号機がボールをゴールしてくるまで待っている時間 OnFwd(OUT_B); //弐号機、2個目のボールを押し出す。 Wait(615); OnRev(OUT_B); //弐号機後退 Wait(400); Float(OUT_B); Wait(3500); //参号機を待つ OnFwd(OUT_B); //弐号機、3個目のボールを押し出す。 Wait(615); OnRev(OUT_B); //弐号機後退 Wait(600); Float(OUT_B); //終了 } **ロボット3のプログラム [#dfa2d787] #define THRESHOLD 40 //光センサーの感度設定 #define turna 50 //旋回時間1 #define turnb 100 //旋回時間2 #define fwd 60 //前進時間 #define ballup 150 //ボールを持ち上げるまでのアーム作動時間 #define ballput 60 //ボールを下げるまでのアーム作動時間 #define back 280 //後退時間 sub linetrace() //ライントレースのプログラム { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサ1とセンサ3は光センサ SetSensor(SENSOR_3,SENSOR_LIGHT); if ((SENSOR_1>THRESHOLD)&&(SENSOR_3>THRESHOLD)) //センサ1とセンサ3が白紙上 { OnFwd(OUT_A+OUT_C); //直進 } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3<THRESHOLD)) //交差点にさしかかったら { OnFwd(OUT_A); //旋回 OnRev(OUT_C); Wait(turna); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ボールを下げる Wait(ballput); Off(OUT_B); OnFwd(OUT_A+OUT_C); //前進 Wait(fwd); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ボールを置く Wait(ballup-ballput); Off(OUT_B); OnRev(OUT_A+OUT_C); //後退 Wait(fwd); Off(OUT_A+OUT_C); OnRev(OUT_B); //アームを上げる Wait(ballup); Off(OUT_B); OnFwd(OUT_A); //旋回 OnRev(OUT_C); Wait(turnb); Off(OUT_A+OUT_C); while(SENSOR_3>THRESHOLD) //センサ3が黒線を見つけられるまで { OnFwd(OUT_A); OnRev(OUT_C); } Off(OUT_A+OUT_C); OnFwd(OUT_B); //アームを下ろす Wait(ballput); Off(OUT_B); } if ((SENSOR_1<THRESHOLD)&&(SENSOR_3>THRESHOLD)) //センサ1が黒線上,センサ3が白紙上 { Off(OUT_A); //左旋回 OnFwd(OUT_C); } if ((SENSOR_1>THRESHOLD)&&(SENSOR_3<THRESHOLD)) //センサー1が白紙上,センサー3が黒線上 { OnFwd(OUT_A); //右旋回 Off(OUT_C); } } sub rcv() //ボールを受け取るプログラム { Off(OUT_A+OUT_C); OnFwd(OUT_B); //アームを開く Wait(ballup-ballput); Off(OUT_B); OnFwd(OUT_A+OUT_C); //前進 Wait(80); Off(OUT_A+OUT_C); OnFwd(OUT_A+OUT_C); //前進しながらアームを閉じる OnRev(OUT_B); Wait(80); Off(OUT_A+OUT_C); Wait(ballup-80); Off(OUT_B); OnRev(OUT_A+OUT_C); //後退 Wait(back); OnFwd(OUT_A); //旋回 OnRev(OUT_C); Wait(turna+turnb); Off(OUT_A+OUT_C); while(SENSOR_3>THRESHOLD) //センサ3が黒線を見つけられるまで { OnFwd(OUT_A); OnRev(OUT_C); } } task main () { SetSensor(SENSOR_2,SENSOR_TOUCH); //センサ2をタッチセンサに設定 Wait(500); //5秒間待ってからスタート while(true) { if (SENSOR_2 ==0) //タッチセンサが反応しないとき { linetrace(); //ライントレース } else { //タッチセンサが反応したとき rcv(); //ボールを受け取る linetrace(); //ライントレース再開 } } } *競技結果 [#ed411b46] -順位:総合3位 -運んだボールの数:計1個 *課題点 [#m2056250] -途中で戦略を大幅に変えたため、本番前の調整時間が足りなくなったことです。 *感想 [#vc0b8756] -今回のロボコンでは唯一3個のロボットで競技を行いました。リハーサルではボールを3個運べた事があったので、あと2、3回の微調整でボール3個できたはず!バラバラの3個のロボットがきめられた役割でうまくボールを運んでいくところがこのロボットのおもしろいところです。他のチームにはない斬新なロボットだと思った。(ひこ) コメントをどうぞ #comment