[[2008a/MemberOnly/進行状況A]] #contents *ロボコン [#c4b5a1e1] 所定の位置にあるテニスボールを牛乳パックでできた箱まで運び、その箱にボールを入れるロボットを作る。入れる箱によって得点が決まっており、その得点を競い合う。~ くわしいルールは、[[2008a/ロボコン]]参照。 **ロボットの紹介 [#rf8fa134] 1つのロボットにRCXを2つ使って、ボールを運ぶことから牛乳パックにボールを入れることまで1つのロボットでできるようにしました。 #ref(./080804_1413~0002.jpg) ロボット全体の図です、一つのロボットですべての動作をしようとしたのでちょっと格好は不格好になってしまいました。 #ref(./080804_1412~0002.jpg) アームを持ち上げたときの前からの写真です。このハンドルで運んだボールをゴールに押していれるものです。なるべくたくさんのボールがとれるように口を広くしました、またアームの先端もそれにあわせて、大きくしました。 #ref(./080804_1409~03.JPG) タッチセンサーの写真です。タッチセンサーがゴールの牛乳パックに反応すると、アームがあがりプログラムが送信され、モータを動かしボールを中に押しこうようにしました。 #ref(./080804_1409~04.JPG) ボールを押し込むところの写真です。はじめは棒だけでしたが、ボールが目の前にあるとは限らないので、ハンドルのようにつけて多少横にずれていても当たるようにしました。 #ref(./080804_1409~02.JPG) 最後に、棒を動かすモーターの部分です。これはロボットの後ろについていて、タッチセンサーが反応したら送信されてくるように設定しました。 *プログラム [#n77620e9] RCX1のプログラム #define SIGNALON 11 // モータ回転のためのメッセージ task main () { SetSensor(SENSOR_1,SENSOR_TOUCH); OnFwd(OUT_A+OUT_C); Wait(200); OnRev(OUT_C); Wait(100); OnFwd(OUT_A+OUT_C); Wait(100);//ボールの場所まで移動 OnRev(OUT_B); Wait(50);//アームでボールを掴む OnRev(OUT_A+OUT_C); Wait(200); OnRev(OUT_A); Wait(100); OnFwd(OUT_A+OUT_C); Wait(200);//ボールをゴールまで運ぶ while(true) { if(SENSOR_1 == 1){ SendMessage(SIGNALON);//センサーが押されたらシグナルを送る Off(OUT_A+OUT_C);//移動をやめる OnFwd(OUT_B);//アームを上げる Wait(50); } } } RCX2のプログラム #define SIGNALON 11 // モータ回転のためのメッセージ task main () { ClearMessage(); // Message()の値を0に初期化 while (true) { until (Message() == SIGNALON); // 11 を受信するまで待つ wait(50);//アームが上がるまで待つ OnFwd(OUT_A);//モーターを回転させボールを押し込む } } ***苦労した点 [#b0a913bb] 一つのロボットですべてこなそうとしたのでたくさんのパーツがついて壊れやすくなってしまった。 送信するプログラムを初めて使ったので、なかなかうまく使えなかった。 本体が大きくなってしまったので、コンパクトな動きができず、動きが限られてしまった。 ****解決策 [#wf906ee2] ロボットの耐久性を増すために細かい部品で補強した。 送信プログラムは例を参考に何度も試してみた。 大きさはやむを得ないので、なるべく細かい動きはなしにして、ボールやゴールにたどり着くようにした。 *****感想 [#mf158cbf] 本番は自分たちが期待していた動きはできずゴールを決めることもできなくて、残念な結果になってしまいロボコンの難しさを痛感しました。 この授業を通じて、プログラムを作ることの難しさを大きく感じました。全部で4つの課題をやってきましたが、どれもすんなりとはいかず、投げ出したいときもあったけど、自分の動かしたいように動いてくれたときには、とても嬉しかったです。またこの授業のおかげで友達ができ、協力して課題に取り組むことができたのでよかったです。