[[2014a/Member]] 目次 #contents * メンバー紹介[#f5b97111] gamigami (自分) gomibakudan (協力した仲間) *課題の説明 [#r3df13cf] 詳しくは[[2014a/Mission1]] *ロボットの紹介 [#kb75725f] **ピンポン玉をキャッチする前の画像 [#b758cf68] #ref(2014a/Member/gamigami/Mission1/robo1.jpg,100%,ロボットの機構) 右側に前進する 多少のずれでもピンポン玉がとれるように大きめの枠にしてある **ピンポン玉キャッチ後の画像 [#lbd58cef] #ref(2014a/Member/gamigami/Mission1/robo3.jpg,100%,ピンポン玉キャッチ) 前進方向は左側 **センサーの位置 [#vc394b4b] #ref(2014a/Member/gamigami/Mission1/robo4.jpg,100%,センサーの位置) センサーを細かく判断できるようにかなりラインに近くセンサーがついている 回転した時のズレ抑えるため多少内側を向いている *プログラム内容 [#a3f2c6e8] #ref(2014a/Member/gamigami/Mission1/ko-susetumei.jpg,%,コースの説明) ・ラインの左側をトレースしていく ・最初のオレンジの点でピンポン玉をとる ・水色の点で一度判断ミスが起こるので修正プログラムを入れて対応 ・水色とオレンジの点の数をカウントさせて行動させる ・緑の点でたまに誤認識することがたまにある ・ゴール側の四角でピンポン玉を離す *プログラム [#o2155e95] **定義付け [#hba138b1] #define THRESHOLD 36 // しきい値 #define sp_H SetPower(OUT_AC,7); // スピード調整:早い #define sp_L SetPower(OUT_AC,2); // スピード調整:遅い #define go sp_H; OnFwd(OUT_AC); // 前進 #define turn_left1 sp_L; OnFwd(OUT_C); OnRev(OUT_A) // 右旋回 #define turn_left0 sp_L; OnFwd(OUT_C); Off(OUT_A) // 右回転 #define turn_right1 sp_L; OnFwd(OUT_A); OnRev(OUT_C); // 左旋回 #define turn_right0 sp_L; OnFwd(OUT_A); Off(OUT_C); // 左回転 #define STEP 1 // 行動を行う #define nMAX 10 // 線上での行動が連続で10回行うとき指示が変わる #define CROSS_TIME 50 // 交差点で直進させる時間 #define cross_line sp_L; OnFwd(OUT_AC); Wait(CROSS_TIME); //交差点を直進させる指示 #define turn_time 60 // 旋回させる時間 #define the_time 16 // ボールを取る部分のモーターが動く時間 **基本の動作のプログラム [#k5706497] task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); // 光センサーを使うように指示 int online=0; // 交差点または急カーブを判別 int next=0; // 交差点と急カーブの数をカウント go; Wait(100); // 枠の中からライン上に移動 while(true) { while (online < nMAX) { // ライン上での行動が10回同じ行動を取るまで繰り返し if (SENSOR_2 < THRESHOLD - 6) { turn_left1; // もしセンサーがしきい値より6未満の明るさ(線の上)を感知したら小さければ左旋回 online++; // 判別開始 } else if (SENSOR_2 < THRESHOLD - 1) { turn_left0; //もしセンサーがしきい値より1未満の明るさ(境界線のライン側)を感知したらら左回転 online=0; // 判別し直し } else if (SENSOR_2 < THRESHOLD + 2) { go; //もしセンサーがしきい値より2大きい明るさまで(ラインの境界線上)を感知したら直進 online=0; // 判別し直し } else if (SENSOR_2 < THRESHOLD + 5) { turn_right0; //もしセンサーがしきい値より5大きい明るさまで(境界線の白紙側)を感知したら右回り online=0; //判別し直し } else if (SENSOR_2 < THRESHOLD +100) { turn_right1; // もしセンサーがしきい値より100大きい明るさまで(白紙上)を感知したら右旋回 online=0; // 判別し直し } Wait(STEP); // 行動を一回行う } **交差点または直角カーブでのプログラム [#wf4a21df] ***最初のカーブ(曲がり切れないため) [#ce306594] if (next < 1 ) { // 最初のカーブの内側で曲がり切れないため修正するプログラム PlaySound(SOUND_UP); // 音を鳴らして動作確認 Wait(5); turn_left1; Wait(50; next++; // 次の動作に移行させる online=0; // 判別し直し } ***最初の交差点でのプログラム [#h4e6e2e3] else if (next == 1 ) { turn_right1; // 旋回して方向転換さる Wait(turn_time); OnFwd(OUT_B);Wait(the_time); Off(OUT_B); // ピンポン玉をキャッチ cross_line; // 交差点を通過させる online=0; next++; //次の動作に移行 } ***二個目の交差点でのプログラム [#e5094a6b] else if (next == 2 ){ // 二個目の交差点でのプログラム turn_right1; // 旋回で方向転換 Wait(55); OnFwd(OUT_AC); Wait(10); // 短い距離を移動 online=0; // 判別し直し next++; // 次の動作に移行 } ***直角カーブでのプログラム [#paf27051] else if (next == 3 ) { PlaySound(SOUND_DOWN); // 音による動作確認 Wait(5); turn_left1; Wait(50); next++; // 次の動作に移行 online=0; // 判別し直し } ***三個目の交差点でのプログラム [#k49287bf] else if(next == 4 ) turn_right1; // 方向転換 Wait(turn_time - 15); // 直進が必要なためturn_timeより短い時間 cross_line; // 交差点を直進 online=0; // 判別し直し next++; // 次の行動に移行 } ***シュートのプログラム [#b0e8f2c0] else if(next == 5 ) { PlaySound(SOUND_UP); // 音で動作確認 OnRev(OUT_B); Wait(the_time); Off(OUT_B); // ピンポン玉の支えを解除 OnFwd(OUT_AC); Wait(90); Off(OUT_AC); // ボールを押す } } } *反省 [#kadee4dc] ・仲間と違う機構でプログラムをしてしまいなかなか完成しなかった. ・ピンポン玉をキャッチする部分を付けてからプログラムを打たなかったため誤作動が多かった. ・プログラムではカウント式にしたので直角カーブと交差点の判別をさせてないのため,誤作動が起こるとすべてやり直さなくてはいけなかった ・最後まで誤作動をなくすことはできなかった 以上の点を次回の課題では改善したいと思う..