2010a
目次
このページを参照してください
ando
sin
yu
ume
ピンポン玉持ち帰ってないけど
三位!!!!
ロボコンについて詳しいルールが発表された。
この日はアイデアを出し合って、さらに実際にロボット製作に入ったが、この時は重要なことを見落としていることに気がつかなかった。
それでとりあえず明日も集まることにした。
帰り際に、スタート地点にも木の壁があるという重大な事を初めて知った。
この課題、一筋縄ではいかないなと戦慄した。
10番教室が開いていなかったので別の部屋でやった。
昨日組んだロボットはまっすぐにしか進めなかったので組みなおしになった。
ピンポン玉を持ち上げるアームを作ったりしたが、パソコンがないので試せない。
モーターが持ち上げてくれるか疑念は残ったが、とりあえず月曜日の10番教室が開いてる時集まることにして帰った。
危うく学校に閉じ込められる所だった。閉じるの早い。
この日は二人しか集まれなかった。
集まったあとでRCXがない事に気付いた。
このままでは本格的にやることないので、他のチームから少しRCXを借りて、主に相当に重いアームが動くか試した。
ギアを工夫し、トルクを上げた甲斐あって普通にあがった。
今日はこれだけで、プログラムを脳内組してこようと決めて帰った。
できた!と思ったが、実際に走らせてみて絶望したので、また組みなおしになった。
何か集まるたびにニューディールしてる気がする。三歩進んで二歩戻る危険な日だった。
バージョン1のハヤブサは、もはや面影すら残していないが、コンセプトは受け継がれた。
疲労や焦燥感、その他に襲われすっかりバージョン1の雄姿を写真として残しておくのを忘れてしまったが、メンバーの海馬には強く刻まれたと思う。
ぼんぼん!!!!!!
ギアの組み合わせ等、細かいところまで考えた。
とにかく間に合う気がしなかった。絶望という名のパンに挟まれたサンドウィッチ。
疲れを通り越し意識を置き去りにした。4単位はほしい。
ロボコン当日。今日になって土台のロボットがこのままではうまく動かないと分かった。
開始40分前になって一から組みなおしになった。それでもなんとか間に合った。さすがsinとしかいいようがない。
運命の本番一回目はスタートのスイッチを押すや否や、ロボットがスペースデブリと化した。崩壊最短記録樹立だった。
ただ完成しているグループが少なかったので2回目のチャンスまで、相当の時間が与えられて、その間に実際のコースを使って試せた。
そのおかげか2回目では、割と安定した動きでロボットを壁の向こう側に運ぶことに成功し、結果、三位という好成績を残すことができた。
閉会式は先生の感動的なスピーチで締めくくられ、僕等のロボコンを終わった。
壁を超える必要があるため、土台のロボットにピンポン回収ロボをのせることにした。ロケットとスペースシャトルのような関係をめざす。
壁ははしごのようなもので戻ってくる。
ピンポン回収方法は、ブルドーザー式に掬うようにとる。
土台ロボットが中央障害物より高いと梯子にかかる力が大きくブロックも大量に消費し、低すぎるとピンポン玉回収ロボットの移動が複雑になるため土台ロボットは中央障害物と同じ高さになるようにした。
写真からは分かりにくいがタイヤとNQC本体とモーターがすべて同じ高さになるように工夫してある。
はじめに作り上げた一号機。上からの写真
横からの写真。高さは中央にある障害物と同じ高さにした。梯子を下したときスムーズにピンポン玉回収ロボットが動くことができる。
梯子を持ち上げたときの様子。移動するときはこの状態で移動する。
梯子を下したりあげたりするときに用いるモーター部。とても強い力がかかるため上下左右からしっかり固定した。
一号機の失敗点
・横幅が広く、四輪であったために、旋回時の横摩擦が大きくて上にロボットを乗せると曲がらなかった。
・タイヤのギア比がモーターとほぼ同じになっていたので、あまり力がでなかった。
・土台ロボットのうえにピンポン玉回収ロボットが乗ると重心が後ろ(梯子がある反対側)に行くため走らせてみると不安定でピンポン玉回収ロボットを落としてしまう。
・ピンポン玉ロボットを下し、また戻ってくるときに梯子の幅が狭いため三回に1回はうまくピンポン玉回収ロボットを乗せることができなかった。
・モーターを頑丈に固定するためにブロックや貴重部品を大量に使ったため後々部品が乏しくなった。
・ピンポン玉回収ロボットを乗せることだけを考えすぎていたためNQC本体のスイッチ部分を押す隙間がなくなっていた。
・木の壁ぎりぎりの高さになるように低くした。
・上にロボットが乗った時の重さのかかり方を考えて、乗せてない時では前に重心がいくようにした。
・旋回時の摩擦を減らすために三輪にした。
・荷重がかかる後ろのタイヤに繋がるパーツが外れやすかったので補強した。
横からのパーツを導入した。
・スタート地点に帰ってくる事を考え、梯子をモーターで上げ下げできるようにした。
・梯子を二段階折れ曲がるようにし、折れ曲がる角度に限りをつけた。
折れ曲がりに限界があるから持ち上がる
・安定した動きの為にタッチセンサーと光センサーをつけた。
・全体的な強度UPに苦労した。
・梯子を上げ下げするモーターが結構横に出っ張っているので、もう少し中に持ってこれれば完璧だった。
[プロトタイプのアーム]
アーム以外の写真はないが
・RCXを後ろに立てて設置していたから、重心が後ろになりすぎた。
・ピンポン回収アームにモーターを二つも使っていた(はさむものと持ち上げるもの)
・アームのハサミ部分のモーターが外れやすい。
・足のモーターがひとつなので力不足。ディファレンシャルギアを使っていなかったため前後にしか動けない。
結局ほとんど全て組みなおした。
・はさみを動かし、つかむ動作と、アーム全体を持ち上げる動作を一つのモーターで行うようにした。
ワンモーター、ダブルアクション
・アームの先端にL字のパーツとタイヤをつけることで木枠をアームが超える事が可能になった。
これが木枠に当たると
こんな感じに持ち上がり、あとはタイヤによって木枠を超える
・アームのモーターを一つにしたおかげで、タイヤに二つモーターを使えて、そのおかげで力が増した。
・タッチセンサーをつけることで、はしごが下りたことを感知し、スタートを切れるようになった。これによって時間に頼らなくてよくなり、余計な待ち時間がなくなった。
・崩壊しやすかったはさみのギアの強度を横からのパーツによって上げた。
・光センサーでライントレースするようにした。
・ギア比に気を使い、タイヤとアームは力が大きくなるようにした。
・ピンポン球を格納する籠の中に斜めのパーツを入れることでアームがどくとピンポン球が勝手に落ちるようにした。
・全体的に重心が右寄りのため、はしごから降りるとき右にずれてしまうとわかった。しかし、必ず右に降りるのはむしろ利点である。
光センサーによるライントレースやタッチセンサーをつかい、あまり時間に頼らないようにする。
#define T 40 //光センサーの域値 #define turn_l(){while(SENSOR_1<T){OnRev(OUT_C);OnFwd(OUT_A);}Wait(5);Off(OUT_A+OUT_C);}//左旋回マクロ #define turn_r(){while(SENSOR_3<T){OnRev(OUT_A);OnFwd(OUT_C);}Wait(5);Off(OUT_A+OUT_C);}//右旋回マクロ int C; //黒線に垂直に当たった回数回数を数える変数 int D; //黒線に垂直に当たった事を判定する変数 sub trace() { if(SENSOR_3<T){OnRev(OUT_A);OnFwd(OUT_C);} //右センサーが黒にあるとき右へ else if(SENSOR_1<T){OnRev(OUT_C);OnFwd(OUT_A);} //左センサーが黒にあるとき左へ else{OnRev(OUT_A+OUT_C);}//それ以外は前進 } task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); SetPower(OUT_A,7);SetPower(OUT_C,7); C=0; D=0; OnRev(OUT_B);Wait(50);//梯子上げる until(SENSOR_2==1);//タッチされるまで待つ Wait(100); while(true) { if((SENSOR_1<T)&&(SENSOR_3<T)){C++;D++;}//黒線に垂直に当たった時にCとDを1増やす if((SENSOR_2==1)&&(C<5))//乗り越える壁に当たったらハヤブサに全てを託す { Off(OUT_A+OUT_C); OnFwd(OUT_B);Wait(10);Float(OUT_B);Wait(200);//梯子を下げる ClearTimer(0);//タイマークリア until(Timer(0)>=350);//時間を待つ(妥協) OnRev(OUT_B);Wait(50);//梯子上げる OnFwd(OUT_A+OUT_C);Wait(100);Off(OUT_A+OUT_C);//少し下がり OnRev(OUT_A);OnFwd(OUT_C);Wait(75);//左旋回 C++;//Cを1増やす } else if((SENSOR_2==1)&&(C>=5))//帰ってくるときに外壁に当たったら球廃棄開始 { OnFwd(OUT_A+OUT_C);Wait(30);Off(OUT_A+OUT_C);//少し下がり turn_l();//左旋回 OnFwd(OUT_B);Wait(10);Float(OUT_B);Wait(200);//梯子を下げる ClearTimer(0);//タイマークリア until(Timer(0)>=50);//球廃棄終了まで待つ OnRev(OUT_B);Wait(50);//梯子上げる turn_l();//左旋回 C=2;//Cを2にする } if(D==1)//黒線に垂直に当たったら { if((C==1)||(C==4)){OnRev(OUT_A+OUT_C);Wait(50);D=0;}//1回目と4回目はスルー else if(C==2) { OnRev(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);Wait(50);OnRev(OUT_A);OnFwd(OUT_C);Wait(100);turn_r();//2回目は右にラインまで回る ClearTimer(1);while(Timer(1)<=28){trace();}OnRev(OUT_A);OnFwd(OUT_C);Wait(75);D=0;//途中で脱線する } else if((C==3)||(C==5)){OnRev(OUT_A+OUT_C);Wait(60);Off(OUT_A+OUT_C);Wait(50);OnRev(OUT_C);OnFwd(OUT_A);Wait(100);turn_l();D=0;}//3回目は左にラインまで回る } else//いつもはライントレースする { trace(); } } }
#define T 40 //光センサーの域値 #define go(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//前進マクロ #define back(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);//後退マクロ sub sage(){OnFwd(OUT_B);Wait(50);Float(OUT_B);}//アーム下げサブルーチン sub age(){OnRev(OUT_B);Wait(50);}//アーム上げサブルーチン sub trace()//ライントレースサブルーチン { if(SENSOR_1<T){OnRev(OUT_C);OnFwd(OUT_A);} //右センサーが黒にあるとき右へ else if(SENSOR_3<T){OnRev(OUT_A);OnFwd(OUT_C);} //左センサーが黒にあるとき左へ else{OnRev(OUT_A+OUT_C);}//それ以外は前進 } task main() { int c=0;//回数数える SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); age();//アームを上げた状態で保つ while(true) { if(SENSOR_2==1){ClearTimer(0);}//センサが押されているとクリア if((SENSOR_2==0)&&(Timer(0)>=20)&&(c==0))//タッチセンサーが離されて2秒たったら { back(500);//梯子をおりるまで後退 OnRev(OUT_C);OnFwd(OUT_A);Wait(100);//左に90度旋回 while((SENSOR_1>T)&(SENSOR_3>T)){trace();}//線まで進む go(20);//少し前進 OnRev(OUT_A);OnFwd(OUT_C);Wait(40);while(SENSOR_3<T){OnRev(OUT_A);OnFwd(OUT_C);}Wait(5);Off(OUT_A+OUT_C);//右に90度旋回 ClearTimer(0);while(Timer(0)<30){trace();}//ライントレース sage();//アームさげる back(300);//木枠をおりるまで後退 ClearTimer(0);while(Timer(0)<40){trace();}//ライントレース age();//アーム上げてはさみを閉じた状態で保つ back(100);//少し下がる OnRev(OUT_C);OnFwd(OUT_A);Wait(100);while(SENSOR_1>T){OnRev(OUT_C);OnFwd(OUT_A);}Wait(5);Off(OUT_A+OUT_C);//180度旋回 ClearTimer(0);while(Timer(0)<30){trace();}//ライントレース go(500);//のぼる Wait(500); ClearTimer(0);c=1;//cを1に } if((SENSOR_2==0)&&(Timer(0)>=20)&&(c==1))//タッチセンサーが離されて2秒たったら { go(50);//ちょい前進して斜めに sage();Wait(200);//アーム下げて少し待つ age();//アーム上げる back(50);//元の位置に戻る ClearTimer(0);c=0;//cを0に } } }
・上にロボットを乗せるとrunスイッチが押せないため、タッチセンサーをスタートボタンにした。
・あえて途中で脱線することで、壁に引っかからないようにした。
・ほとんどの旋回は光センサーを使ってラインまで旋回になっている。
・はしごがさがったことをタッチセンサーで感知するようにした。
・降りるとき必ず右にずれるようなので、降りた後左にラインまでいくようにした。
・ライントレースをするようにした。
・ロボット作りに時間を取られて、プログラムは後回しになってしまった。
・実際のコースであまり試せなかったから、最後まで成功しなかった部分が割とある。
余裕こいてたら全然時間がたりなくて焦った。何度も組みなおしたり、アイデアが出ては消えていったり、有り体に言って本当に疲れた。ロボコンのチャレンジ一回目では即全壊して心もぶっ壊れるかと思ったけど、なんだかんだ三位になれてうれしかった。プログラミングの基礎や、ロボットの基礎、理想と現実の違い等いろんなことを学べた。どの課題も完成したと思ってからが本番だった。ロボットを分解するときは寂しさと、変な爽快さも感じる事が出来た。苦労したから得られる爽やかな感情だったと思う。この授業を受けて、明らかな自分の能力の向上を感じている。
はじめのうちからロボットの構想が決まりスムーズにみんなで製作に取り組めた。私は主に土台ロボットの作成をしたが、一つの障害物を認識し乗り越えることのできるロボットを作ることだけに丸一日費やすほどとても大変な作業でした。最後のほうはandoとsinの力を借りてロボットを作り上げることができた。
夏休み中、忙しく全く参加することができなくてチームの方には大変ご迷惑をおかけしました。すみません。本当に感謝しています。
コメントをお願いします。