[[2014a/Member]] *メンバー紹介 [#pb085d7c] sudo 須藤海志(自分) kiyo 清原雅司(相方) *課題説明 [#vff50aae] 参照 [[2014a/Mission1]] *ロボット説明 [#mfb248cc] &ref(2014a/Member/sudo/Mission1/pic11.jpeg,全体像); &ref(2014a/Member/sudo/Mission1/pic12.jpeg,全体像); (写真の向きはご了承ください) 本体は初めに作った基本のままで光センサーの前にさらにカゴをつけました。 ボールに被せてそのままゴールまで運びます。 #ref(2014a/Member/sudo/Mission1/pic10.jpeg,カゴ); カゴはボールよりだいぶ大きめに作ります。ただ大きすぎると重くなりライントレース中でも下がってしまいますってしまいます。そのためライントレース中にカゴを上げるプログラムを組み込みます。 先端から内側に取っ手をつけることでカゴの中でのボールの動きを減らしボールがカゴから出てしまうことを防ぎます。 #ref(2014a/Member/sudo/Mission1/picture1.jpeg,輪ゴム); 光センサーの先につけたモーターを輪ゴムで補強することでモーターの接触不良を防ぎます。ブロックの接続部にゴムが入らないようにすることがコツです。 #ref(2014a/Member/sudo/Mission1/picture4.jpeg,支え); 前に長すぎて連結部が1つでは落ちてしまうので本体から支えをのばします。その支えを本体上でしっかり固定します(写真の一番左に写っているグレーと青の事)、無いと落ちてしまいます。 #ref(2014a/Member/sudo/Mission1/pic9.jpeg,シュート機能); カゴの下に棒をつけることでカゴを上げた時にボールを押し出してシュートするようにしました。ただ紙に引っかからないようにしなければなりません。 *プログラム [#x5b368dc] ゴールからスタートへ行くプログラムです。 ライントレースが最大の工夫です。ラインの淵をトレースするのではなく基本的にラインの真ん中を直進します。そのおかげで交差点をなく直進します。ただ交差点を見極められないため交差点を中継ポイントとして使えません。 #define BLACK 40 //しきい値 #define turn_right OnFwd(OUT_A);OnRev(OUT_C); //右回り #define turn_left OnFwd(OUT_C);OnRev(OUT_A); //左回り #define right_time 50 //右にラインを探しに行く時間 #define up OnFwd(OUT_B);Wait(10);Off(OUT_B); //カゴを上げる #define down OnRev(OUT_B);Wait(12);Off(OUT_B); //カゴを下げる #define step1 1515 //ボールをとる直前まで #define step2 3455 //シュートする直前まで #define step1 1515 //スタートしてからボールをとる直前まで #define step2 3455 //ボールを取ってからシュートする直前まで sub go() //基本的なライントレース { ライン上を直進し無くなったら右へ探しに行く”右にラインを探しに行く時間”を超えたら左へ見つけるまで回る if (SENSOR_2 < BLACK) { //しきい値より小さいうちは直進 OnFwd(OUT_AC); } else if (SENSOR_2 > BLACK) { //しきい値を超えたら右に探す turn_right; ClearTimer(1); // 右にラインを探しに行く時間を測る while (FastTimer(1) <= right_time){ //指定した”右にラインを探しに行く時間”を超えたら if (SENSOR_2 < BLACK){ Wait(15); Off(OUT_AC); } } turn_left; //左へ探しに行く until (SENSOR_2 < BLACK); Float(OUT_AC); //OffでなくFloatにすることでなめらかに動き細かい動きが可能 } } sub get() //ボールを取る { up; //カゴが下がっていてしまった時のために一様上げなおします。 Off(OUT_AC); //車は止めておきます。 down; //カゴを降ろす } sub shoot() //シュート { 前進しながらカゴをあげることでシュートする Off(OUT_AC);Wait(100); turn_right; //ライントレースし終わった向きからゴールの向きへ変えます。 Wait(45); Off(OUT_AC);Wait(100); //小休止 OnFwd(OUT_ABC); //前進とカゴ上げを同時 Wait(13); Off(OUT_ABC); } task main() { OnFwd(OUT_B);Wait(15); //まずカゴを上げておく SetSensor(SENSOR_2, SENSOR_LIGHT); //光センサー ClearTimer(0); while (FastTimer(0) <= step1) { //ボールを取るまで ClearTimer(0); //スタートしてからボールを取るまでを時間で指定してある while (FastTimer(0) <= step1) { //ボールを取る直前まではライントレース Off(OUT_B); go(); } Off(OUT_AC);Wait(20); //小休止 get(); //ボールを取る ClearTimer(0); while (FastTimer(0) <= step2) { ボールを取ってからシュートまで while (FastTimer(0) <= step2) { //ボールを取ってからシュートまでも時間で指定してある go(); } shoot(); //シュート } *コメント [#h7e79be7] ・ラインの上を直進させることで交差点は楽にクリアできるようになりました。 ・前に長過ぎるためいろいろ支障がでました。 ・成功率100%とはいかず、最初のロボットの置き方によってズレが出て大変でした。 ・紙にカゴが引っかからないようにしっかり紙を張る事が必要でした。