2014a/Member

目次

メンバー紹介

gamigami (自分)

gomibakudan (協力した仲間)

課題の説明

詳しくは2014a/Mission1

ロボットの紹介

ピンポン玉をキャッチする前の画像

ロボットの機構

右側に前進する

多少のずれでもピンポン玉がとれるように大きめの枠にしてある

ピンポン玉キャッチ後の画像

ピンポン玉キャッチ

前進方向は左側

センサーの位置

センサーの位置

センサーを細かく判断できるようにかなりラインに近くセンサーがついている

回転した時のズレ抑えるため多少内側を向いている

プログラム内容

%,コースの説明

・ラインの左側をトレースしていく

・最初のオレンジの点でピンポン玉をとる

・水色の点で一度判断ミスが起こるので修正プログラムを入れて対応

・水色とオレンジの点の数をカウントさせて行動させる

・緑の点でたまに誤認識することがたまにある

・ゴール側の四角でピンポン玉を離す

プログラム

定義付け

#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  // ボールを取る部分のモーターが動く時間

基本の動作のプログラム

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); // 行動を一回行う
                                       }
			

交差点または直角カーブでのプログラム

最初のカーブ(曲がり切れないため)

       		   if (next < 1 ) { // 最初のカーブの内側で曲がり切れないため修正するプログラム
                          PlaySound(SOUND_UP); // 音を鳴らして動作確認
                          Wait(5); turn_left1; 
                          Wait(50;
                          next++; // 次の動作に移行させる
                          online=0;  //  判別し直し
			 
                    }

最初の交差点でのプログラム

              else if (next == 1 ) {
                          turn_right1;   // 旋回して方向転換さる
                          Wait(turn_time);
                          OnFwd(OUT_B);Wait(the_time); Off(OUT_B);  // ピンポン玉をキャッチ
                          cross_line;  // 交差点を通過させる
                          online=0;
                          next++;  //次の動作に移行
                    }

二個目の交差点でのプログラム

                           else if (next == 2 ){ // 二個目の交差点でのプログラム
                           turn_right1;  // 旋回で方向転換
                           Wait(55);
                           OnFwd(OUT_AC); Wait(10);  // 短い距離を移動
                           online=0;  // 判別し直し
                           next++;  // 次の動作に移行
                    }

直角カーブでのプログラム

                         else if (next == 3 ) { 
                         PlaySound(SOUND_DOWN); // 音による動作確認
                         Wait(5); turn_left1;
                         Wait(50);
                         next++;  // 次の動作に移行
                         online=0;  // 判別し直し
			 
                    }

三個目の交差点でのプログラム

                          else if(next == 4 )
                          turn_right1;  // 方向転換
                          Wait(turn_time - 15);  // 直進が必要なためturn_timeより短い時間
                          cross_line;  // 交差点を直進
                          online=0;  // 判別し直し
                          next++;  // 次の行動に移行
                    
                    }

シュートのプログラム

                          else if(next == 5 ) {   
                          PlaySound(SOUND_UP);  //  音で動作確認
                          OnRev(OUT_B); Wait(the_time); Off(OUT_B);  // ピンポン玉の支えを解除
                          OnFwd(OUT_AC); Wait(90); Off(OUT_AC); // ボールを押す	
                        }
			   
                     }
}

反省

・仲間と違う機構でプログラムをしてしまいなかなか完成しなかった.

・ピンポン玉をキャッチする部分を付けてからプログラムを打たなかったため誤作動が多かった.

・プログラムではカウント式にしたので直角カーブと交差点の判別をさせてないのため,誤作動が起こるとすべてやり直さなくてはいけなかった

・最後まで誤作動をなくすことはできなかった

以上の点を次回の課題では改善したいと思う..


添付ファイル: fileko-susetumei.jpg 249件 [詳細] filerobo4.jpg 214件 [詳細] filerobo3.jpg 259件 [詳細] filerobo1.jpg 232件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-11 (月) 00:46:31 (1835d)