[[2008a/ロボコン]]

#contents

*課題:ボール運搬ロボット [#rfd5163d]

テニスボールを所定の位置に運搬するロボットの作成。
それを使ってロボコンを行います!!

**ロボコンについて [#k620ed49]


**メンバー紹介 [#qb4d7279]
小鉢、小次郎、コリン、あやこの四人。

ロボットが役割分担して二台あるので、小鉢・コリンチームと小次郎・あやこチームに分かれてプログラムとロボット制作をしました。といっても、ロボット制作は小鉢と小次郎が担当してます。ホムペはコリンが主に担当しました。

*使用するロボットについて [#e16a611b]

二台のロボットを使うにあたって、それぞれ役割分担をすることにしました。一台はテニスボールを板の間から押し出すロボットで、もう一台は押し出されたテニスボールを運ぶロボットです。詳しいロボットの説明は下の項目で!!

**ボールを押し出すロボット [#xd0ba52b]

#ref(2008a/A4/ロボコン/robo2.jpg,70%,ボールを押し出すロボット)

ボールを押し出すロボットの全体像。ボールを押し出すために細長いブロックを付けました。ブロックの先についている角には、特に役割があるわけではありません。デザインとしてついています。デザインは大事ですよ!!デザインについて言うと、モータに接続するコードを交差させました(地味だけど)、こっそり目もついてます。

#ref(2008a/A4/ロボコン/robo2-gia2.jpg,70%,タイヤ)

モーターとタイヤの接続部分。前進するときは矢印のように動きます。

**ボールを運ぶロボット [#x10385d6]

#ref(2008a/A4/ロボコン/robo1.jpg,70%,ボールをつかむロボット)

ボールをつかむロボットの全体像。かなり工夫してました。目がついてて、デザイン的にもかわいくなってます!!

#ref(2008a/A4/ロボコン/robo.jpg,70%,ボールをつかむ仕組み)

ボールをつかむ時は、赤い矢印のように手(仮)が動いてボールをつかみます。下の手がボールをすくうようにして、両側の手がボールが落ちないように周りを支えます。ボールをつかむ仕組みは、中央の黒い棒に押し出されたテニスボールにぶつかると奥のタッチセンサが反応して手が動くと言う具合になっています。

#ref(2008a/A4/ロボコン/robo1-gia2.jpg,70%,ボールをつかむ仕組み)

手(仮)が動く仕組み。矢印のように歯車が回って手(仮)が動きます。これは小次郎が頑張って作りました。モーター一つで三つの手を動かすことが大変でした。

#ref(2008a/A4/ロボコン/robo1-touch2.jpg,70%,ボールをつかむ仕組み)

タッチセンサが押される仕組み。まず左の黒い棒にボールが当たるとピンクの矢印から黄色い矢印のように動きが連動していきます。最後に、水色の矢印のようにタッチセンサが押されると言う仕組みです。このタッチセンサは、少しの力では押されないけど、テニスボールを押し出す力が強いので大丈夫!!

*プログラムについて [#s6a177fb]

#ref(2008a/A4/ロボコン/corse1.jpg,100%,コース)

水色の矢印がボールを運ぶロボットの動きで、赤い矢印がボールを押し出すロボットの動き。ボールを押し出すロボットは、ボールを押し出した後、もう一つのテニスボールがあるところへ向かって、ボールを押し出して入れようとする奇跡的な行動に移る。これは、ボールが入ればラッキーというカンジなので、おまけで作ったプログラム。�と�のところでは、ボールを押し出した後に一度後退して、右に曲がります。

**ボールを押し出すプログラム [#k9308c3a]

 void go(int t)      // 前進するプログラムをと go 設定
 {
 OnRev(OUT_A+OUT_C);    // AとC出力のモータを負回転させる      
 Wait(t);          // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータを止める
 }

 void back(int t)     // 後退するプログラムをと back と設定
 {
 OnFwd(OUT_A+OUT_C);    // AとC出力のモータを負回転させる      
 Wait(t);          // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータを止める
 }

 void turn_left(int t)   // 左に曲がるするプログラムをと turn_left と設定
 {
 OnFwd(OUT_C);           // C出力のモータを正回転させる
 OnRev(OUT_A);           // A出力のモータを負回転させる 
 Wait(t);         // t秒間実行
 Off(OUT_A+OUT_C);     // AとC出力のモータを止める
 }

 void turn_right(int t)   // 右に曲がるするプログラムをと turn_right と設定
 {
 OnFwd(OUT_A);           // A出力のモータを正回転させる
 OnRev(OUT_C);           // C出力のモータを負回転させる 
 Wait(t);          // t秒間実行
 Off(OUT_A+OUT_C);      // AとC出力のモータを止める
 }

↓以上の設定の素にしたのプログラム

 task main()
 {
 go(300);
 turn_left(85);
 go(195);
 Wait(50);
 back(100);       // �で一時後退。
 turn_right(90);     
 go(200);
 turn_left(90);
 go(240);
 turn_right(82);
 go(260);
 back(250);       // �で一時後退。
 turn_right(85);
 go(300);
 turn_right(85);
 go(500);
 turn_right(85);
 go(150);
 turn_right(150);    // 最後は角でボールを押し込むイメージ。
 }

**ボールを運ぶプログラム [#g20f68b1]
 
 task main()
 { 
 SetSensor(SENSOR_1, SENSOR_TOUCH);
 {
 OnFwd(OUT_A+OUT_C);
 Wait(200);
 OnFwd(OUT_C);
 OnRev(OUT_A);
 Wait(90);
 OnFwd(OUT_A+OUT_C);
 Wait(150);
 Off(OUT_A+OUT_C);
 }
 while (true) 
 {
 if (SENSOR_1 == 1 )
 {
 OnFwd(OUT_B); 
 Wait(200);
 Off(OUT_B);
 Wait(100);
 OnRev(OUT_A+OUT_C);
 Wait(50);
 Off(OUT_C);
 OnRev(OUT_A);
 Wait(90);
 OnFwd(OUT_A+OUT_C);
 Wait(300);
 Off(OUT_A+OUT_C);
 OnRev(OUT_B);
 Wait(50);
 OnFwd(OUT_A+OUT_C);
 Wait(100);
 Off(OUT_A+OUT_C);
 }}}
*制作してみての感想 [#tfc3c8b0]

どちらのロボットもボールにたどり着くまでに、時間を調節しなければいけなかったのだけど、電池の消耗などで細かく調節することが出来なかったので、大変だった。これは、今までの課題でも苦労した点。

タッチセンサの感度が悪くて、最終的にボールを押し出すロボットで使えなかったのが厳しかった。

#ref(2008a/A4/ロボコン/sinka1.jpg,70%,進化)

↑実は、ボールを押し出すロボットはこういうの進化を遂げていたんです。角は進化の証のような・・・。最終的にシンプルになりすぎてしまったので、コードを交差させてみたのですが、モーターの回転が変わってしまったのでプログラムに影響が出て大変でした。他に、一時短いコードがなぜか使えなくなったりとアクシデントが多くて、根気が必要でした。

ボールを押し出すプログラムは、簡単だけど、ごちゃごちゃしないように整理しました。

全体的に、ロボットのデザインに力を入れました。

<ロボコンの感想>
ロボコンのリハーサル後に微調整のため少し変更して飛ばしたプログラムがもう片方のロボットにも入ってしまうというハプニングが発生して大変でした。
もっとセンサーを上手く使い、電池の消耗や床との摩擦にも関係なく正確に動けるロボットに改良できたら良いな、と思いました。
***コメントお願いします [#ucc60da5]
#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS