[[2008a/MemberOnly/進行状況A]]
*ロボコン [#c3d22a6e]
テニスボールを所定の位置まで運ぶ。~
''コース''
#ref(robocon2008a.png)
''基本ルール''~
ボールを 塔から それぞれ向きの違う棒に挟まれた状態から 運びだし、4箇所あるゴールの箱に入れる。~
競技時間は審判が続行不能と判断するまで、あるいはリタイアするまで。~
4隅のコーナー(半径30cmの1/4円)のいずれかからスタートする。 ~
スタート時のロボットは2個を越えないこと (スタート後はいくつに分裂してもかまわない)。 ~
開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。~
競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。~
途中でうまく動かなくなった場合、1回限り再スタートすることができる(再スタートの際に別プログラムで起動してよい)。~
**ふじロボット [#cfc26b09]
こちらのロボットは上を向いているゴールは無視して、横を向いているゴールのみを狙います。
***本体 [#k01f9450]
#ref(全体像.jpg)
本体はタイヤが付いている2本のブロック群をつないでその上にRCX本体を乗せました。~
ボールをつかむ機構は上からネットで押さえつけて引きずっていく形にしました。
#ref(下から2改.jpg)
タイヤは方向転換をしやすくするために小さいタイヤを使用しました。%%最初安定性を出すためキャタピラを使用したところ、全く方向転換がききませんでした。%%~
&color(#FF0000){赤い丸};で囲まれている2つがモーターに繋がっているタイヤで、&color(#0000FF){青い丸};で囲まれているのが自由に回転する補助輪です。
***センサー [#od25f75e]
センサーはネットの先端と側面の2か所にタッチセンサーを取り付けました。~
''正面のセンサー''
#ref(全体像3.jpg)
&color(#FF0000){赤い丸};で囲んであるところが実際にタッチセンサーが設置してある場所。~
&color(#0000FF){青い丸};で囲んである部分が押されるとタッチセンサーが押されます。~
''側面のセンサー''
#ref(側面タッチセンサ1.jpg)
バーが開きすぎないようにブロックで止めてあります。
#ref(側面タッチセンサ2.jpg)
止めているブロックを外すとこんな感じです。
バーが2本付いているのは前から当たった時も、後ろから当たった時も反応できるようにするためです。
***プログラム [#n5b46377]
大雑把には時間指定で進み、最後の詰めはセンサーで行っています。
task main(){
SetSensor(SENSOR_1,SENSOR_TOUCH); //センサーを定義
SetSensor(SENSOR_2,SENSOR_TOUCH);
while(SENSOR_2==0) //中央のタッチセンサーが押されるまで直進
{while(true)
{OnFwd(OUT_A+OUT_C);
Wait(2);
Off(OUT_A+OUT_C);
Wait(2);}}
Off(OUT_A+OUT_C);
#ref(01.jpg)
#br
#ref(02.jpg)
OnRev(OUT_B); //ネットを上げる
Wait(30);
Off(OUT_B);
#ref(03.jpg)
OnFwd(OUT_A+OUT_C); //少し前進
Wait(30);
Off(OUT_A+OUT_C);
OnFwd(OUT_B); //ネットを下げる
Wait(60);
Float(OUT_B);
#ref(04.jpg)
OnRev(OUT_A+OUT_C);
Wait(30);
Off(OUT_A+OUT_C); //少し後退
#ref(05.jpg)
OnRev(OUT_A); //向きを変更
OnFwd(OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
#ref(06.jpg)
while(SENSOR_1==0) //側面のタッチセンサーが押されるまで前進
{OnFwd(OUT_A+OUT_C);}
Off(OUT_A+OUT_C);
OnRev(OUT_A); //向きを変更
OnFwd(OUT_C);
Wait(75);
Off(OUT_A+OUT_C);
#ref(07.jpg)
OnRev(OUT_B); //ネットを上げる
Wait(30);
Off(OUT_B);
#ref(08.jpg)
OnFwd(OUT_A+OUT_C); //ボールをゴールに押し込む
Wait(20);
Off(OUT_A+OUT_C);
#ref(09.jpg)
repeat(3) //この後は繰り返し
{OnRev(OUT_A+OUT_C); //少し後退
Wait(40);
Off(OUT_A+OUT_C);
while(SENSOR_1==0) //側面のタッチセンサーが押されるまで回転
{OnFwd(OUT_A);
OnRev(OUT_C);}
Off(OUT_A+OUT_C);
#ref(10.jpg)
OnFwd(OUT_B); //ネットを下げる
Wait(40);
Off(OUT_B);
#ref(11.jpg)
OnRev(OUT_A+OUT_C); //後退
Wait(60);
Off(OUT_A+OUT_C);
#ref(12.jpg)
この後は最初にゴールを入れた時と同じ動きをします。
OnRev(OUT_A); //向きを変更
OnFwd(OUT_C);
Wait(20);
Off(OUT_A+OUT_C);
#ref(061.jpg)
while(SENSOR_1==0) //側面のタッチセンサーが押されるまで前進
{OnFwd(OUT_A+OUT_C);}
Off(OUT_A+OUT_C);
OnRev(OUT_A); //向きを変更
OnFwd(OUT_C);
Wait(75);
Off(OUT_A+OUT_C);
#ref(071.jpg)
OnRev(OUT_B); //ネットを上げる
Wait(30);
Off(OUT_B);
#ref(081.jpg)
OnFwd(OUT_A+OUT_C); //ボールをゴールに押し込む
Wait(20);
Off(OUT_A+OUT_C);
#ref(091.jpg)
**なかにポのロボット [#m8ecdd75]
相方のロボットとは違い上からダンクシュートを狙うロボット~
やろうと思えば横のゴールも決めれます。~
***本体 [#w9e0f6b0]
#ref(20080804180715.jpg)
↓左右にキャタピラーを、そしてその間はボールが入るだけの空間を設け黄色いアームを回転させることができる。~
#ref(20080804181124.jpg)
↓ボールを二個ホールドしたまま移動が可能。~
強度やボールとの干渉を考えてギアを四つ用いて、遠くに設置されたモーターによって黄色いアームが回転する~
この回転機能により、ボールをロボット内に引き込み、そのまま持ち上げダンクシュートを決めることができる。~
ちなみに逆回転させれば横向きのゴールへへのシュートも可能
#ref(20080804180746.jpg)
↓回転する黄色のアーム。~
中心の飛び出たねずみ色のストッパーによって、ボールがすべり落ちず二個ホールドすることを可能にした。ちょっとした工夫でかなりの役目。~
ちまちましたねずみ色の突起物は地味であるが、これによりボールのホールド力がアップ。~
#ref(20080804181519.jpg)
↓キャタピラーは左右それぞれの上部に一個ずつ設置して、独立して稼動する。~
それぞれにモーターを用いることで、本体内部にシャフトを伸ばす必要がなくボールに干渉しない。~
はじめ上部のモーターをギアでキャタピラに伝えていたが、ギアが力に耐え切れずすぐ外れてしまった。そこでゴムによる駆動伝達に変更したところ問題解決。~
#ref(20080804180929.jpg)
↓すこしわかりにくいが、ボールがスムーズに持ち上がるように軌道上に突起物を設置。~
#ref(20080804181505.jpg)
***センサ [#eeb20c98]
#ref(20080804181026.jpg)
回転センサを左キャタピラに設置これにより正確な移動が可能。~
***プログラム [#xc920701]
#define fist 37
#define turn 8
#define second 32
#define third 2
#define force 34
#define fifth 27
#define last 1
#define go OnFwd(OUT_A+OUT_C);//前進
#define back OnRev(OUT_A+OUT_C)//後退
#define right OnRev(OUT_A);OnFwd(OUT_C);//右折
#define left OnFwd(OUT_A);OnRev(OUT_C);//左折
#define arm(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);//アーム回転
task main()
{
SetSensor(SENSOR_1,SENSOR_ROTATION);//SENSOR_1は回転センサと定義
while(true){
ClearSensor(SENSOR_1); // 回転センサをリセット
go;//発進
until (SENSOR_1 >first ); // ボールの延長線上までくるまで待つ
ClearSensor(SENSOR_1); // 回転センサをリセット
left;
until (SENSOR_1>turn);//九十度左回転し、ボールの延長線上に対して正面を向く
ClearSensor(SENSOR_1); // 回転センサをリセット
go;
until(SENSOR_1>second);//ボールの手前まで発進
ClearSensor(SENSOR_1); // 回転センサをリセット
arm(300);//ボールをひとつ捕獲
go;
until(SENSOR_1>third);//少し前に進み二つ目のボールの手前へ
arm(300);//ボールを二個目をゲット
ClearSensor(SENSOR_1); // 回転センサをリセット
back;
until(SENSOR_1>force);//とりあえず後退する
ClearSensor(SENSOR_1); // 回転センサをリセット
right;
until(SENSOR_1>turn);//九十度右回転
ClearSensor(SENSOR_1); // 回転センサをリセット
go;
until(SENSOR_1>fifth);//ゴールの横まで直進
ClearSensor(SENSOR_1); // 回転センサをリセット
right;
until(SENSOR_1>turn);//ゴールに対して正面を向く
ClearSensor(SENSOR_1); // 回転センサをリセット
go;
until(SENSOR_1>last);//ちょっとだけ前に進んでゴールと密接する
arm(1000);//ダンクシュートをぶちかます。!!
簡単なルートの説明~
#ref(bocon2008a.png)
**感想 [#fee6fd56]
とにかく本番の動きが残念でした。中央のセンサーがうまく作動せず、ただ直進するのみという動きしかできませんでした。~
前の触覚(?)の部分とタッチセンサーの部分のつなぎ方がまずかったようで、真正面から当たらないとうまくセンサーが作動しないようでした。~
ロボットの本体を作るのは最後まで得意にはなれませんでした。 ーふじ
最後の最後でテストの日を勘違いしてしまい、欠席してしまい相方に迷惑をかけてしまった。~
プログラムの最後の微調整はできてなかったけど、成功する自身はあった~
回転センサだよりの荒削りなプログラミングであるが、ロボット機構はシンプルかつ十分な働きをしていた。~
ホント メンバーのみなさんごめんなさい。 なかにポ~
#comment