#contents *課題[#x66f4f8a] ~ボール運搬ロボット ~ボールを所定の位置から運び出し、決められた、ゴールに入れる。 *フィールドの説明 [#r091c709] #ref(2008a/A8/ロボコン/コース.JPG,CENTER) ~フィールドの説明 ~フィールドは約160cm×110cm ~1000mlの紙パックは約7.1cm×7.1cm×19.6cm ~ゴールの紙パックには約6cm四方の穴が2箇所開けられている ~ゴールの穴以外の部分は黒で覆われている ~フィールドの長辺の中央部におかれたゴールの紙パックの穴は上を向いている ~フィールドの短辺の中央部におかれたゴールの紙パックの穴は横を向いている ~外側の楕円の長径は128cm、短径は96cm ~内側の8の字の曲線部の曲率半径は24cmで、交差部は直交している ~黒い線の太さは約25mm *ルール [#fddb5105] ~ボールをそれぞれ向きの違う棒に挟まれた状態から運びだし、4箇所あるゴールの箱に入れる。 ~競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。 4隅のコーナー(半径30cmの1/4円)のいずれかからスタートする。 スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 ~開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。 途中でうまく動かなくなった場合、1回限り再スタートすることができる。 ~基本得点の計算方法 ~半分以上箱に入ったボールだけを得点の対象とする。 ~横から入れるゴールについてはボール1個2点、上から入れるゴールについては1個4点で計算する。ただし同じ箱に3個のボールを入れた場合には、その箱に限り点数を倍にする。 ~技術点の計算方法 以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について他の全てのチーム(9チーム+TAor教員)が20点満点で採点し、その平均点を求める。 ~得点の目安: ~ボールを取り出す動作 (3点) ~ボールを運ぶ動作 (3点) ~ボールを紙パックに押し込む動作 (3点) ~2台以上のロボット、あるいは単体のロボットの場合は2台のRCXの連携の良さ(3点) 自立型のロボットとしての形や動作の美しさ、斬新さ(3点) ~その他 (5点) *STRATEGY [#j4873845] ~�:ロボットは2台使用し、それぞれにボールを運ぶロボット、ボールを入れるロボットに役割分担する。 ~�:ボールを入れるロボットは、得点の高い、上からボールを入れる方法のみを狙う。 *ロボットの解説 [#ka77ecbd] **ボールを運ぶロボット [#r99d4186] #ref(2008a/A8/ロボコン/7.JPG) ~ボール運搬ロボットの全体 #ref(2008a/A8/ロボコン/1.JPG) ~ボールが2個入ってもちょうどバランスがとれるようになっている。 #ref(2008a/A8/ロボコン/6.JPG) 箱の横を沿って動けるように、光センサーを右にずらした。 #ref(2008a/A8/ロボコン/4.JPG) 配線はゴムで縛ったり、パーツに巻きつけて、邪魔にならないようにした。 #ref(2008a/A8/ロボコン/8.jpg) ~ボールを入れる部分がちょうど、箱の大きさとぴったり揃っているので・・・↓ #ref(2008a/A8/ロボコン/2.JPG) ~2個同時にボールを箱の中に入れることができる。 **ボールを入れるロボット [#u5d292e2] *プログラムの解説 [#ofecf5c2] **ボールを運ぶロボットのプログラム [#wd088372] **ボールを入れるロボットのプログラム [#q824b0ac] ***本番で使用したプログラム [#sdf303c6] フィールドの端から上に穴のあいた箱の前まで行き、 もうひとつのロボットがボールをいれるの待ってから、箱にボールを入れるプログラムです。本番までにロボット等を完璧に作成できなかったため、このプログラムを作りました。~ この動作に関しては問題なく動きましたが、まっすぐ進まないといったロボット側の問題はありました。~ また本番に待つ時間を間違えるというミスもあり、本番ではうまくいきませんでした。 task main(){ OnFwd(OUT_A+OUT_C); //箱の前まで直進 Wait(575); Off(OUT_A+OUT_C); Wait(1600); //ボールが乗るまで待機 OnRev(OUT_B); Wait(30); Off(OUT_B); OnFwd(OUT_B); //ボールを箱にいれる Wait(30); Off(OUT_B);} (作成者:三澤) ***最初に計画していたプログラム [#t126b594] こちらが最初に計画していたプログラムで、外側の楕円をライントレースしながら箱にボールをいれる、というプログラムです。~ 外側の楕円を時計回りに進み、ライントレースはロボット本体の左側についている光センサー1つで行います。~ ボールの受け渡しは外側の楕円と8の字が合流する部分で行います。両側の光センサーが黒を感知したら止まります。~ ボールを受け取ったら、上に穴の開いた箱の前に行くのですが、箱と黒い線が完全にくっついているため、ここで悩みました。~ タッチセンサーをつけ、箱を感知したらうまくよけて、箱の横に着くようにしてみましたが、これでうまくいくかは確認できてません。~ また、通信機能を使い、ボールの受け渡し地点まで来たら、ボールを運ぶロボットのほうにそれを伝えるようにしてみました。 #define BLACKLINE 45 #define SIGNAL_A 11 #define SIGNAL_B 12 task main () { SetSensor(SENSOR_1,SENSOR_LIGHT); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensor(SENSOR_3,SENSOR_LIGHT); while (true) { if(SENSOR_1 < BLACKLINE){ //左側の光センサーが黒線上なら直進 OnFwd(OUT_A+OUT_C); そうでない場合は右折 } else { OnFwd(OUT_A); Off(OUT_C);} if((SENSOR_1 < BLACKLINE) && (SENSOR_3 < BLACKLINE)){ //両側の光センサーが黒線上なら停止する Off(OUT_A+OUT_C); ClearMessage(); while(Message() == 1){ //もう1つのロボットから返信があるまで、自分がボール受け渡し地点まで来たことを通信で伝える SendMessage(SIGNAL_A);} if(Message() == 1){ //返信が来たら、音を鳴らす PlaySound(SOUND_CLICK); ClearMessage();} } if(Message() == SIGNAL_B){ //相手から「ボールを乗せた」と通信があったら再びライントレースを始める SendMessage(2); OnFwd(OUT_A+OUT_C);} if(SENSOR_2 == 1){ //タッチセンサーが箱に触ったら箱を回避して横付けする OnRev(OUT_A+OUT_C); Wait(100); Off(OUT_C); OnFwd(OUT_A); Wait(190); OnFwd(OUT_A+OUT_C); Wait(50); Off(OUT_A); OnFwd(OUT_C); OnFwd(OUT_A+OUT_C); Wait(300); Off(OUT_A+OUT_C); OnFwd(OUT_B); //ボールを箱にいれる Wait(30); Off(OUT_B); OnFwd(OUT_A+OUT_C);} } } (作成者:三澤) *工夫した点[#a1c33f0e] ~ボールを2個運ばせることにより、時間的にも見た目的にもすっきりする。 ~ボールを運ぶロボットと、ボールを入れるロボットの連携を強調した。 *難しかった点 [#g2349438] ~やはりボールを的確に受け渡し、的確にゴールするという精密さを追求するのが難しかった。 *ロボコンの結果 [#f3455907] ~順位は惜しくも4位で、点数は10.5点でした。 *反省 [#a6b751b3] ~リハーサルではボールを箱に入れることができたが、本番では微妙な位置のずれや2つのロボットの連携のずれが要因で一点も得点することができなかった。 ~本番前には入念なチェックが必要であった。 *感想 [#bfdce8a8] ~理想を現実にするというのは、非常に難しいものであると思った。大学でレゴブロックでこんなに悩むとは思ってなかった。でも、良い経験ができたと思う。 *コメントをお願いします [#k1529703] #comment