目次一覧
(アルファベット順)
紙パックを所定の位置から所定の位置に運搬する。 ロボコンのフィールド平面図
フィールドの説明
基本ルール
基本得点の計算方法
技術点の計算方法
今回の課題は角材を超えて紙パックを運ぶ必要があったため、角材の両側にロボットを各一体ずつ、計2体のロボットを使用しています。
機体を作成する段階で既にロボコンの期日が迫っていたので、プログラム作成の負担を軽くするためロボットは2台とも同じ構造にしました。
まず、走行するための機構については、機体の大きさを気にする必要がないため、NXT付属のテキストに載っているモデルをそのまま引用することにしました。
本体は、前方に配置するアームのスペースを確保するため、横向きにして後ろの方に配置しようと考えました。
そして、パック回収のための機構を動作させるモータは、本体の前部に固定しようと思いつきました。
全体の構造としてはかなり単純なものになりました。
本体を後方に固定し、駆動させるタイヤは本体の前方下部、紙パックを運ぶ機構は本体の前方上部に設置し、後部にキャスターを設けてあります。
タイヤの前方に光センサが取り付けられていますが、実際にはこれは使用しませんでした。
プログラム作成の最後の最後まで「もしかしたら使うかもしれない」と考えていたので、最後まで残る羽目となりました。
完全に蛇足です。いらない子です。(付いたままでも全く問題ないので、悪い子ではないです。)
上の写真はロボットの左側から撮影したものです。この写真の左がロボットの前方(進行方向)となります。
まず最初に紙パックを持ち上げることができる機構を考えましたが、成功する確率があまりにも低かったためボツとなりました。
そこで、toshiくんのアイデアから、角材の向こう側にある紙パックをアーム内に取り込み、後退することによってパックを角材の自分側に引き込む、
ということが可能なものを目指しました。
上の写真は、アームが上がっている状態の機体を右前方から撮影したものです。
○印の付いてるバーは紙パックを押すためのものであり、このバーで押すことによって角材に対して真っ直ぐに紙パックを設置することができます。
紙パックを取り込み、運ぶためのアームです。
動作の誤差によって多少左右にずれても紙パックを回収できるように、アームの横幅は大きく取ってあります。
アームに接続されているバー(1)は、紙パックの真ん中辺りを前方から押さえるためのバーです。これによって、運ぶ際に紙パックがアームの外に出るのを防いでいます。
バー(2)は、真ん中に回転しないタイヤが取り付けられているのですが、これがこの機構の重要なポイントの一つです。
角材の向こう側の紙パックを引き込む際、このバーが主に紙パックに触れており、引き込む役を担います。
その紙パックに触れる部分にタイヤを取り付けることによって、タイヤの摩擦で、紙パックが滑り落ちることなく角材を超えることができるのです。
アームに動力を伝達するためのモータです。モータに直接接続されているバーから、1つ輪ゴムを介してアームに動力が伝わるようになっています。
この輪ゴムがこの機構の重要なポイントのもう一つです。
角材の向こう側の紙パックを引き込む際、紙パックが角材に乗り上げてアームが少し持ち上がるのですが、その時に輪ゴムの弾性によってアームを下に押し下げようとする力が働きます。
この力によってアームの先のタイヤが紙パックに強く押し付けられて常に接触することで、紙パックが滑り落ちることなく角材を超えることができるようになっています。
文字だけではイメージしづらいので、紙パックを引き込む一連の動作の写真を載せておきます。
2枚目以降の、アームが少し持ち上がってる状態の時、輪ゴムの弾性によって下向きに押さえる力が働いています。
また、2枚目の写真のように紙パックを持ち上げた状態のまま静止させても、バーのタイヤの摩擦のおかげで紙パックが滑り落ちることはありません。
角材を乗り越えた後、紙パックが倒れてしまっていますが、それでも運べるような構造となっています。
今回の課題は、プログラムを作成する段階で私達の能力では高得点を取ることは不可能だと判断したので、
とりあえず紙パックを最低2個(最高も2個)は運ぶ、といったプログラムとなっています。
また、ロボットは2台ですがプログラムはほとんど同じものを使っています。
最初は所々でライントレースをすることで位置を調節するようなプログラムを組んだのですが、何回か試すうちにライントレースをすると逆に精度が下がってしまうと判明したので、
全ての動作を値を指定して実行させることにしました。
その際に、モータの回転角制御や左右のモータの同期を活用して、各動作の誤差を最小限にしようと努めました。
全体の動作の流れとしては
(片方のロボットのみ、4と5の間で7秒半ほど待機(紙パック回収の際ロボット同士が接触するのを防ぐため))
といった様になります。
ポートAは紙パックを運ぶ機構、ポートBは右タイヤ、ポートCは左タイヤに接続されています。
#define SPEED_H 45 //高速 #define SPEED_L 35 //低速 #define pi 180 //π=180°
モータの稼働スピードと、モータの回転角制御のための角度の定数を用意。
各場面で最適な動作をするために、スピードを2段階設けてあります。
#define catch1 RotateMotor(OUT_A,SPEED_H,2*pi);
初期の位置に置いてある紙パックを回収する動作。
sub catch2() { OnFwdSync(OUT_BC,SPEED_H,0); //前進 Wait(2000); Off(OUT_BC); OnFwd(OUT_A,SPEED_L); //紙パックをアーム内に取り込む Wait(1500); Off(OUT_A); Wait(200); OnFwdSync(OUT_BC,-SPEED_H,0); //後退 Wait(2000); Off(OUT_BC); OnRev(OUT_A,SPEED_L); //アームを上げる Wait(1200); Off(OUT_A); OnFwdSync(OUT_BC,SPEED_H,0); //前進 Wait(1000); Off(OUT_BC); OnFwd(OUT_A,SPEED_L); //紙パックを回収 Wait(1200); Off(OUT_A); Wait(200); OnFwdSync(OUT_BC,-SPEED_H,0); Wait(1000); Off(OUT_BC); }
角材の向こう側にあるパックを回収する動作。一回目の後退でパックを角材の自分側に引き込んで落とし、その後パックを回収します。
task main() { OnFwdSync(OUT_BC,SPEED_H,0); //紙パックの前まで前進 Wait(2800); Off(OUT_BC); catch1; //紙パックを回収 Off(OUT_ABC); Wait(100); RotateMotor(OUT_B,-SPEED_L,2*pi); //右旋回 OnFwdSync(OUT_BC,SPEED_H,0); //少し前進 Wait(800); Off(OUT_BC); RotateMotor(OUT_A,-SPEED_H,3*pi); //アームを上げる OnFwdSync(OUT_BC,SPEED_L,0); //角材の前まで前進してパックを設置 Wait(900); Off(OUT_BC); OnFwdSync(OUT_BC,-SPEED_L,0); //後退 Wait(1000); Off(OUT_BC); RotateMotor(OUT_B,-SPEED_L,2*pi); //右旋回
ここまでが1〜4の動作です。
紙パックをより真っ直ぐに設置するため、途中までアームを下げた状態で運ぶようにしています。
ここで、一方のロボットは
Wait(7500);
が入り、7秒半ほど待機します。
OnFwdSync(OUT_BC,SPEED_H,0); //スタート地点手前まで前進 Wait(1800); Off(OUT_BC); RotateMotor(OUT_C,-SPEED_L,2*pi); //左旋回 catch2(); //反対側のロボットが運んだ角材の向こう側のパックを回収 RotateMotor(OUT_C,-SPEED_L,2*pi); //左旋回 OnFwdSync(OUT_BC,SPEED_H,0); //紙パックを運ぶ目的地まで前進 Wait(2000); Off(OUT_BC); RotateMotor(OUT_A,-SPEED_H,2*pi); //紙パックを設置 }
ここまでで5〜9の動作です。もともと紙パックを2個運ぶことだけを目的としたプログラムなので、ここで終了です。
(ここに載せたプログラムは、ロボコンで実行したプログラムではなくそこから不要な部分を取り除いたものです。
使っていない定数や動作の定義を削っただけなので実際の動作は全く同じものとなっています。)
blackcatくんとscarくんが音楽制作を大いに頑張ってくれたので、紹介の意味でそちらのリンクを貼っておきます。
blackcatくんのページ:2012b/Member/blackcat/Mission2#x1067d6e
scarくんのページ:2012b/Member/scar/Mission2#e9fa8c3c
反対側のパックを回収後、片方のロボットが旋回に失敗したため、最後まで運べたパックは1個だけでした。
点数は基本得点5点、技術点15.8点の合計20.8点となり、6チーム中3位となりました。
3位の景品をもらったので写真を載せておきます。
私にはこの商品の価値はわかりませんが、記念として大切に保存しておきたいと思います。