製作者:クノピー、座敷童、ハネウマ、たまちゃん、ネタ切れ
予定のコースは↓↓↓
結果〜は・・・26点で2位。前半の3段積みが1つで終了。
当初は、やはり最難題と思われる緑4段の60点を目指そうかということだったが、一度失敗したら、緑を再び集めるのは困難で、精密に動かす必要があるため時間的にも再挑戦できず、ハイリスクなのではないかという結論に達した。
そこで、三段を二つ作るということを考えた。緑緑白の3段は26点。これを二つで52点となる。これなら、十分勝負になるのではないか?しかし、この方法にもやはり、時間的束縛や最収集の困難がある。確実かつ素早い動作が必要である。
・車部分の機構
今回は、その場でのターンが必要だったので、三輪機構やディファレンシャルギアを使った機構を避け、何時も通りに初の車を作ることにした。そして、その車に、本体を取り付ける所(車前方部)とアームを装着させるためのタワーの付け根(車上部)を取り付けた。
ちなみに、このタワーの付け根は車から直接生えているので、LEGOを重ねたものより壊れにくくなっている。
・アーム部分
今回のロボコンで箱を積み、運ぶための装置。
そしてこうなる。
� 『捕獲アーム』によって『回転アーム下』に箱を押し付ける。回転アームはその名のとおり回転しているので、ブロックは上へ上へと上昇していく。
� ある程度上昇したら、『保持アーム』により圧力をかけ、落ちていかないようにする。
� このとき回転アームは回転がかけられいるので、箱はさらに上昇する。そして『回転アーム上』まで運ばれる。
また、当初は『保持アーム』のタイヤとキャタピラの軸は直線上にあったが、それでは握力が足りないので、軸を薄いLEGO一枚分ずらすことにより、『保持アーム』と回転アームとの間に生じる握力を増強した。
・ウォームギア
ここで、保持アームと捕獲アームは強力な握力が必要であり、アームの重量も大きくなったため、強い力が必要になった。そのため、ただモータを接続するのではなくウォームギアという機構を取り入れた。
これは、下のドリルのような部分が回転すると、そのドリルの部分がギアの歯を押す。これにより、ギアにはゆっくりだが強い力が働く。また、この機構では、ギアを回転させてもドリル部分は回転しないので、モーターを止めても落ちてくる心配がない。
・バンパー
ライントレースをさせるため、光学センサを取り付けた。今回のライントレース方法は交差点などもあり特殊なので、車の前方中心にメインのライントレース用にセンサを一つ(赤)、左側に張り出したところに交差点認識用にもう一つの光学センサ(黄色)を取り付けた。
そして車の前方で箱との接触を感知させないといけないので、タッチセンサーを取り付けた。当初はただ前方にタッチセンサ−を取り付けただけだったが、これでは感度が悪い。そこで、てこの原理を利用したバンパーを取り付けた。
・本体部分
今回では、本体同士の通信が必要だったので、ふたつの本体の送受信部分を対面になるよう密接させ、長い一つの本体として利用できるような構造にし、上記の角のような部分に挟みこむ形で固定した。これにより、アームによって後ろ向き気味だった重心を是正することができる。
箱の搭載プログラムはこちら
今回は、センサーの使い方などが自由なので、センサーを1つでライントレース、1つで箱の感知、1つで交差点の認識に使いました。
その他、センサーについてはこちら
ポイント:今回は、時間指定での方向転換だと誤差の積み重なりでうまく動かなくなることが考えられるため、方向転換は時間ではなく線をまたいだ回数で考えることにしました。(ロボコン前日に松本先生からご指摘いただいてこの方針に変更しました〜。)
出来たプログラムの例は↓
/*field_colorが白から黒になったときにturn_countを1増やす*/ #define MOTOR(OUT_A+OUT_C) #define THRESHOLD 40 int field_color; //白を1、黒を0とする int turn_count; int turn_count2;
sub turn_right() { turn_count2=2; //2回線を踏む(180度方向転換) turn_count=0; field_color=0; while(turn_count=<turn_count2){ //turn_count2になるまでの間 OnFwd(OUT_A);OnRev(OUT_C); if(field_color==0){ //最終色が黒の場合 if(SENSOR_1>THRESHOLD){ //センサが白を感知 field_color=1; }else{ //センサが黒を感知 field_color=0; } }if(field_color==1){ //最終色が白の場合 if(SENSOR_1>THRESHOLD){ //センサが白を感知 field_color=1; }if(SENSOR_1<THRESHOLD){ //センサが黒を感知 turn_count++; //turn_countを1増やす field_color=0; } } } Off(OUT_A+OUT_C); }
以上の事を含め、全体の流れを書くと以下の様になる。
前期最後のレポートです。優しい評価でお願いします!!