受け取り方 タッチセンサーを利用 →投げる動作につかうエンジンが足りなくなる →タッチセンサーが反応しにくい
結局受け取るのが難しいため1台で運んで入れようという話になった。
しかしそれもエンジンの個数の都合上きついと思われたため、結局2つにわかれることにした。しかし、当初の予定と代わり 左グループがパスし右グループがゴールにいれることになった。
以下に書いたような方法がちゃんととれるようなロボットを皆で考えた。すると受け取る側のグループが当時作っていたロボットの形が最適だったため、全く同じロボットを作らせてもらった。その後、2つ目の缶が運べるように片方の腕を短くしたり、ライントレースをつけた。
ほとんど同じ車体が2体
★ライントレース
利点 正確に目的地まで辿り着く
横にずれることがないため缶を倒しにくい
欠点 プログラムが複雑になる
★秒数をはかって調整する
利点 プログラムが簡単
欠点 つまったり缶の重さによって秒数が変わる
★☆★☆★☆★☆★☆★☆結果★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
最初は秒数だけで移動するつもりだったが、「パスをするとき」「缶をとりにいくとき」は角度がずれると絶対困るのでライントレースを併用することにした。その2場面以外の場面でも方向修正のためにライントレースを併用している。実際にライントレースなしで動かして見ると、缶の掴み方やスタート時の位置によりうまく動かなかった。結論的にはライントレースは不可欠なものだとわかり、移動の最初と最後は全てライントレースによって動いている(缶を飛ばすとき意外)。
特徴としてはタイヤが2つしかないこと。タイヤを4つにすると変な誤差が生じたため、撤去した。 (↓腕の部分は変更前です)
光センサーは線を挟むようにして2つ設置した。
また、コンパイルしたらすぐに移動がうまくいくかチェックできるように、自分達でマップの一部を作成した。このおかげで、移動自身はかなり正確なものとなり、ほとんどの確立で成功するようになった。
・抱きかかえ方式 腕・本体を使って持ち上げて運ぶ
利点 段差を無視できる
2本目も楽々運べる
欠点 手が下に入らないため抱えにくい
缶の重みに耐える構造にすると投げにくい
・腕で囲む方式 腕で囲み転がしながら運ぶ
利点 腕をおろすだけでいい
欠点 2つめを運ぶのが難しい
★☆★☆★☆★☆★☆★☆結果★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
抱きかかえ方式ではやはり重みに耐えるのが難しいため、腕で囲む方式にした。両腕をアームにすると、2つめを運ぶことがマップ上無理だったため、片腕をぎりぎりまで短くし、2つめは最初はすっぽりアームで囲まないことにした。しかしそれでずっと進んでは旋回中に飛び出してしまうので、旋回の方向を逆方向にすることで、旋回中にすっぽり囲むようにした。
・アームをあげて転がす
利点 動作が少なくてすむ
真っすぐ転がる可能性が高い
欠点 威力が弱く、届かない可能性がある
・体当たりする
利点 威力が強く、ちゃんと届くと考えられる
欠点 真っすぐ当らなければ、缶が斜めに転がってしまう
★☆★☆★☆★☆★☆★☆結果★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
アームで転がすことにしたが、やはり威力がすこし弱いため、助走を付けて走りながら転がすという方法にした。また、「アームをあげるスピードをあげる」ればいいなと思い、インターネットで調べた結果、その方法があった!!ということで助走をつけ、アームをあげる速さをあげるという二重の工夫をこらした。
参考にしたホームページ http://software.nikkeibp.co.jp/software/special/nqc/nqcframe.htm
最終調整を終えて本番に挑んだ結果、なんとかうまく動いた。最初の1回目缶を投げる際に、すこし斜めに投げてしまったため、パスがうまくいかなかった。しかしそれはライントレースとの兼ね合いで、仕方ない部分なので2回目も挑戦した。すると今度は完璧にうまくいった。その後も安定した動きをみせ、4位という良い評価をいただいた。
結果としては通信機能を使わず、秒数でキャッチしてもらうことにしたので、受け取る側のキャッチする時間と合わず失敗してしまった。受け取る側のロボットに正確なパスがいったが、バーをおろすのが遅かったため缶が跳ね返り、戻ってきたのだ。もしパスがもっと弱ければ缶があまり跳ね返らないため、成功したかもしれない。通信機能を使えば、より確実にキャッチもできたはずだった。
当日のお互いの動きは完璧だったため、その連携にもっと時間を費やせば良かった。
今までuntilとかイマイチ理解してない機能が多かったが、ロボコンを通してだいたい習った機能は復習・理解できた。メンバー全員がプログラミングができ、本体も作れるという状態になれたことは、すごい進歩だと思う。
全体的にみてロボコンにより、メンバー全員がかなり上達した。最初は缶1つ運ぶことを目標として試行錯誤していたが、最後の方になると、2つめ・3つめを運ぶ方法もすぐわかるようになった。しかしロボット自体が最初の1つしか運ぶようになってないっため、2つめまでしか運べなかった。ロボコン前日になって、本体もプログラムも最初からやり直したのでは間に合わないということで、3つめを運ぶようにはできなかった。
ちなみに3つ目の缶を運ぶために、腕にはタイヤをつけ力強く引っ張れるようにするということを考えていた。その他は3つ運ぶのならばわざわざ相手にパスしなくても減点覚悟でひとりで持って行っても問題ないため、ライントレースを利用して移動し、腕のタイヤを使ってゴールにいれ、その他の動きはあまり変えないという方法で十分運べるという考えだった。本当に1台で運ぶのならば、もう1体が傷害物をどけてもいいし、補助してもいいため、最初からこのくらい理解度があればもっと良い結果がだせたと思う。
Blue たか
二人とも工学部。
Blueは暇人、というか廃人。たかは多忙。 二人一緒にロボット作成する時間が授業以外あまり取れなかった。
Blueはプログラム・ホームページ、たかはマシンのデザイン・アイデア担当。たかが言ったことをBlueがこなす感じ。
◎どのようにして、あのゴール前の段差を越えるか?
片方の班がブロックはずしをゴール前に置いて押し込むか、しかしこれではマシンが衝突する可能性がある。
下から救い上げるようにして、プログラムを組むか、缶が重過ぎて持ち上げられない。。。
色々ためしていたところ、適当につけていたバンパーのタイヤで、いとも簡単に押し上げた。
偶然が幸運を呼び、タイヤを使うことにした。
そのときのマシンの足はタイヤ二つ。これでは缶を押し上げるには力不足。よってマシンの構造を隣の班に譲り、一から足をキャタピラにして作り直した。
↑今回のマシンはまったくのオリジナルです。ドライブベースもすべて手作りです。
バンパーにタイヤがついていますが、これはゴールするときに押し上げるものではありません。缶を持ち運ぶときにホールド力を高めるために付けました。
このタイヤがないと、回転するたびに缶が転がっていったり、離れたりしてしまうので、旧作ロボットから引き継ぎました。
缶を持ち上げるためのタイヤはというと・・・↓↓
このちっこいタイヤ二つがちゃんと缶を押し上げ、ゴールしてくれます。
前についてる光センサーは、元は後ろについていました。
しかし後ろについていると、ライン・トレースで大きなブレを生じてしまうので、何とかして前に装着。
これで完成かと思いきや、よく見ると真ん中がへこみ、端が上に上がっているという強度不足!!
そこでこの強度不足を解消するために、端と端を棒で橋渡し。
その様子がこれです↓
これで押しつぶされない割と頑丈なマシンに仕上がりました。
そして無駄な部品をとってスリムにしていこうと思ったが・・・
全部いる部品だったのであえなく断念。。
↓これが後ろから見た様子です。
まず、一本目のルートは
(1)缶を受けとる (2)そのまま二本目のラインを光センサーが感知するまで後退 (3)90°回転し、ライン・トレースを開始 (4)ゴール前にひかれたラインを光センサーが感知したら、90°回転 (5)ライン・トレースでマシンの向きを整え、そのまま前進しゴールへ
流れとしては、大体上のような感じで、これをもとにプログラミングを作成することに決定。
(1)については初めフロントのバーをあげておき、Waitでバーをおろすことに。
結論から言えば、この決定がロボコンでの失敗を招いた原因の9割をしめている。。。通信機能を使えばなぁと後悔・・泣
(2)は、初めは一本目を通過するように時間で後退し、そのあとuntilで光センサー二つがラインを感知するまで後退。
(3)はTimerで3秒ほどライン・トレースをしてラインの十字路手前でライン・トレースを終え、その後時間で前進しuntilで二つの光センサーがラインを感知するまで前進。
(4)は時間で回転。缶を持っているときと持っていないときで回転時間が異なるので、その点を注意。
(5)についてはライン・トレースをしながらだと、力不足で缶を持ち上げられない可能性があるので、向きの補正でライン・トレース、その後は時間で前進。
一本目をゴールまで持っていくプログラム
製作日:// 06-07-31 製作者:// たか Blue
#define bar_up(t) OnFwd(OUT_B);Wait(t);Off(OUT_B); //バーをあげると定義 #define bar_down(t) OnRev(OUT_B);Wait(t);Off(OUT_B); //バーを下げると定義 #define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C); //前進と定義 #define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+ OUT_C); //後退と定義 #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off (OUT_A+OUT_C); //右旋回と定義 #define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C); //左旋回と定義 task main() { SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1が光センサーと宣言 SetSensor(SENSOR_3,SENSOR_LIGHT); //センサー3が光センサーと宣言 Wait(2200); //22秒待つ bar_down(35); //バーを下げる back(250); //2.5秒後退 OnRev(OUT_A+OUT_C); until(SENSOR_1<45); until(SENSOR_3<45); //二つの光センサーがラインを感知するまで後退 right(220); //2.2秒右旋回 go(60); //0.6秒前進 ClearTimer(0); while(Timer(0)<=30) //3秒間ライントレースを開始 { if(SENSOR_1>45) { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if(SENSOR_3>45) { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } } OnFwd(OUT_A+OUT_C); until(SENSOR_1<45); until(SENSOR_3<45); //二つの光センサーがラインを感知するまで前進 left(220); //2.2秒左旋回 bar_up(45); //バーをあげる go(350); //3.5秒前進 OnRev(OUT_A+OUT_C); until(SENSOR_1<45); until(SENSOR_3<45); //二つの光センサーがラインを感知するまで後退 left(135); //1.35秒左旋回 ClearTimer(0); while(Timer(0)<=40) //4.0秒ライントレース { if(SENSOR_1>45) { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if(SENSOR_3>45) { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } } OnFwd(OUT_A+OUT_C); until(SENSOR_1<45); until(SENSOR_3<45); //二つの光センサーがラインを感知するまで前進 go(28); //0.28秒前進 right(155); //1.55秒右旋回 ClearTimer(0); while(Timer(0)<=20) //2.0秒ライントレース { if(SENSOR_1>45) { OnFwd(OUT_A); Off(OUT_C); } else { OnFwd(OUT_C); Off(OUT_A); } if(SENSOR_3>45) { OnFwd(OUT_C); Off(OUT_A); } else { OnFwd(OUT_A); Off(OUT_C); } } OnFwd(OUT_A+OUT_C); until(SENSOR_1<45); until(SENSOR_3<45); //二つの光センサーがラインを感知するまで前進 if(SENSOR_1>45); //ライントレースでマシンの向きを整える { OnFwd(OUT_A); Off(OUT_C); until(SENSOR_1<45); } if(SENSOR_3>45) ; { OnFwd(OUT_C); Off(OUT_A); until(SENSOR_3<45); } go(100); //1.0秒前進 bar_up(45); //バーをあげる Wait(1100); //11秒待つ
朝の10番教室は、ロボコン軍団でごった返してた。みんな気合はいってんな〜と思いつつ、自分も調整。
コースを見ると、予想以上に小さかった。障害物がうっとうしいなぁと普通に思った。
くじによりうちの発表は二番目。はやっっ!!とあせる様子もなく、いざ発表、そしてあえなく撃沈・・・そんなアホな。。。
↓↓発表
すべての失敗はバーが降りず、缶を持てなかったこと、ただこれだけ。結局一回も自分のロボットは動くことなく終わってしまった。
Waitでは、電池の消費量が大きな影響を及ぼす事を全く考慮に入れていなかった。
<<工夫したこと>>
★ライン・トレースとWaitをうまく組み合わせたことによって、めちゃくちゃな動きがなくなり、安定した走りが出来た。
★缶をゴールに入れた後、マシンも一緒にゴールしてしまう問題が発生。
例の二つのタイヤが缶を持ち上げゴールに入れた後、回転して棒を登りだすことがわかり、どうしようかまた考える。。。
そして木の棒を乗り越えないようなストッパーを付けることことにした。
そしてつけたものがこれ↓↓
左側にも同じものがついており、確実に登るのをストップさせる事に成功した。馬力の強いキャタピラならではの問題である。
★マシンのコンパクト化を計るため、キャタピラの動力部分のモーター、バーの動力モーターを背中合わせに一カ所に固めた。
もし本を見ながら作ったら、やたら大きく、そしてヘビー級のマシンになっていたに違いない。
<<苦労したこと>>
1、大体のプログラムをうって、初送信しようとしたらなぜか送信できない。
これは最大の苦労、というか焦りだった。壊れてんじゃないのかとレゴ社のせいにしようとしたが、電池を替えたり、 ゴミがつまってるのかと重い一生懸命掃除みたいなことをしたりする。どうにもこうにもいかなかったので、先生に相談しにいく。 聞くとファームウェアが消えていた。。。あっけなかったが、ほんとに油断していた。
2、ライントレースがうまくいかない。
受け取って90°回転してからライントレースをすると、十字路で光センサーが勘違いして、 あさっての方向に動き出すので、Timerで十字路手前まで時間を設定してから untilで次の十字路で90°回転するようにした。
3、キャタピラの欠点
キャタピラは馬力が強い反面、動作が鈍い、特に回転動作が非常に鈍いため、 電池の消費がハンパじゃなかった。一度ファームウェアが消えている経歴があるので、 同じ失敗をしないようにちょいちょい電池の残量チェックした。わずか1日半で12本の電池を消費。
◎課題の期限が近づくと、いつもロボットいじったりプログラムをうったりして、一日の大半をこのロボット製作に費やしていました。寝不足になってフラフラになったり本当に大変でした。そんなこんなでしたが最後までやりきる事が出来ました。特にロボコンの調整では、隣の班の人にとても助けられました。あの人たちがいなかったら失敗に終わっていたかもしれません。ロボコンの結果としては一本もゴールに入れられなかったので失敗だったが、気分的には得られないものを得た感じでした。
先生、TAの方、そして何よりB2の人たちにとても感謝しています。ありがとうございました。m(_ _)m
コメントお願いします。