[[2015b/MemberOnly]] **課題について [#j46d931c] 今回の課題は2台ロボットを使って片方は各交差点に置かれたボールを反対側の紙においてある缶に当て、 もう片方は缶に当たったボールを回収し、所定の位置まで持っていくというものである。 ロボットを2台使う関係上今回は4人で作業をした。 #ref(2015b/Member/kobajun/Mission3/2015b-mission3.fig) **全体の流れ [#b6733c51] *ボールを缶に当てる側 [#ha8f15bc] スタートしたら最初の交差点にあるボールまでライントレースをする。 この時ボールの有無の判断は超音波センサーを使う。 掴んだら缶を探し缶の方向を向いて近づき、アームを開いて体当たりの要領で ボールを缶の方へ押し出す。 以下はプログラムの一部である。 #define straight OnFwd(OUT_BC,30); #define turn_left OnFwd(OUT_B,30);Off(OUT_C); #define turn_right OnFwd(OUT_C,30);Off(OUT_B); #define TURN_LEFT OnFwd(OUT_B,30);OnRev(OUT_C,30); #define TURN_RIGHT OnFwd(OUT_C,30);OnRev(OUT_B,30); #define THRESHOLD 35 #define get OnFwd(OUT_A,45);Wait(300);Off(OUT_A);Wait(1000); #define open OnRev(OUT_A,45);Wait(300);Off(OUT_A);Wait(1000); while(true){ if(SensorUS(S4)>=12){ if(SENSOR_3<THRESHOLD-9){ TURN_LEFT; }else if(SENSOR_3<THRESHOLD-5){ turn_left; }else if(SENSOR_3<THRESHOLD+5){ straight; }else if(SENSOR_3<THRESHOLD+9){ turn_right; }else{ TURN_RIGHT; } }else{ Off(OUT_BC); get; Wait(1000); catch++; if(d<=50){ Off(OUT_BC); Wait(500); RotateMotorEx(OUT_BC,40,-300,0,true,false); Wait(6000); open; RotateMotorEx(OUT_BC,90,340,0,true,false); Off(OUT_BC); Wait(1000); RotateMotorEx(OUT_BC,65,-730,0,true,true); RotateMotorEx(OUT_BC,40,150,100,true,false); RotateMotor(OUT_A,60,50); straight; Wait(2500); } } } } } 押し出したらある程度後ろへ下がってライントレースを再開、ボールを探す。 *ボールをゴールまで持っていく側 [#eb86ea56] 始めは紙の淵に沿って進み紙と紙の境目まで来たら左折する。 その場でボールがロボットの前を通り缶に当たるまで停止する。 ロボットの前を通過したとき超音波センサーが反応するためボールを掴む動作へと移れる。 ボールを掴んだら交差点までライントレースし、交差点のところでゴールの方を向き そのままボールを置きに向かう。 **ロボットについて [#e75dab0d] *ボールを缶に当てる側 [#n3b1a22b] ロボットそのものが動きまわり、ボールと缶を探しボールを缶の方向へと打ち出せるロボットを 作る必要がある。 ロボットそのものが動き回るためには左右で別の動きができるタイヤが必要なため、 ここでモーターを二つ使う。 この辺は主にキットの組立書を参考に、本体や作業用モーターを乗せられるよう補強しながら 組んだ。 作業用モーターは写真の様につけた。これによって本体の重心がずれるため本体の中心を少しずらした。 #ref(2015b/Member/kobajun/Mission3/DSC_0058-1-1.png,30%) 作業用モーターには、アームや反対のアームや超音波センサーの向きを変える歯車がついている。 アームは写真の様に組むことにより、モーターが前進することで閉じ後退することで開くよう組んだ。 #define get OnFwd(OUT_A,45);Wait(300);Off(OUT_A);Wait(1000); #define open OnRev(OUT_A,45);Wait(300);Off(OUT_A);Wait(1000); &ref(2015b/Member/kobajun/Mission3/DSC_0056-1-1.png,50%); &ref(2015b/Member/kobajun/Mission3/DSC_0057-1-1.png,30%); 超音波センサーは、ボールが軽すぎてタッチセンサーが使えないとなった時超音波センサーで缶もボールも認識できるよう向きを変えることを思い付いた。 大きい歯車を使うことによりアームの回転よりも小さい範囲の角度で回れるようにし、 開いた時はボールを捕まえるために下の方を、閉じた時はボールを缶の方へ打つために前の方を向くよう組んだ。 他にはロボット前方下部に、ライントレース用の光センサーと掴んだボールが動いている間に掴んだアームの中で動き回らないようにするパーツがついている。 *ボールをゴールまで持っていく側 [#af8b2984] こちらは缶に当たったボールを探して掴み、ゴールまで持っていくロボットを作る。 ロボットそのものが動き回るためには左右で別の動きができるタイヤが必要なため、 こちらも移動用にモーターを二つ使う。 歯車を使って2つのアームで掴む点は打つロボットと同じだが、ボールを認識できればいい分超音波センサーは下向きと前向きの間くらいに固定されている。 &ref(2015b/Member/kobajun/Mission3/DSC_0059-1-1.png,50%); &ref(2015b/Member/kobajun/Mission3/DSC_0061-1-1.png,30%; &ref(2015b/Member/kobajun/Mission3/DSC_0061-1-1.png,30%); **考察・感想 [#ca751e43] 今回は主にボールを打ち出すロボットを作った。今回は制作、プログラミング共に連携しなければならずその点で時間がかかってしまい制度をよくすることがぎりぎりになってしまった。 また紙やボールを初期位置に固定といったことをもっと早くからしていれば、もう少し制度を上げることが出来たと考える。