2014a/Member 目次

課題の説明

詳しい説明は2014a/Mission1を見てください。

メンバー

dai mame

ロボット

drive base

S__2228285.jpg S__2228284.jpg

光センサーで黒線を認識し、トレースする

超音波センサーでボールを認識して、アームのモーターを回しボールを捕球する。

arm

_S__2228287.jpg

アームのモーターを正の方向に回転させるとボールをつかんで運び、ゴール前でモーターを逆回転させることでシュートを打つ。

light sensor

S__2228286.jpg

元の設計を改良して、光センサーと車輪をできる限り近づける工夫をした。

プログラム

定義

ライントレースに関する定義

#define THRESHOLD 45   //しきい値
#define SPEED_H 40    //高速
#define SPEED_L 30    //低速
#define OnRL(speedR,speedL)  OnFwd(OUT_B,speedR); OnFwd(OUT_C,speedL);
#define go_forward  OnRL(SPEED_H,SPEED_H);    //直進
#define turn_left1  OnRL(SPEED_L,-SPEED_L);    //左旋回
#define turn_left0  OnRL(SPEED_L,0);        //左折
#define turn_right0  OnRL(0,SPEED_L);          //右折
#define turn_right1  OnRL(-SPEED_L,SPEED_L);   //右旋回
#define STEP  1                                //1回の判断で動作させる時間
#define nMAX  140                            //通常のカーブとして許容できる繰り返しの最大値
#define short_break  Off(OUT_BC); Wait(1000);  //小休止
#define CROSS_TIME 250                         //交差点通過にかかる時間
#define cross_line  OnRL(SPEED_L,SPEED_L); Wait(CROSS_TIME); short_break;     //交差点通過

ボールシュートに関する定義

#define Catch  Off(OUT_BC);OnFwd(OUT_A,60);Wait(500);Off(OUT_A);//ボールキャッチ
#define Shot   Off(OUT_BC);OnRev(OUT_A,100);Wait(500);Off(OUT_A);//シュート

ライントレース

設定

task main()
{ 
SetSensorLowspeed(S4);     //超音波センサーをセット//
SetSensorLight(S1);          //光センサをセット//
int nOnline=0  ;       //続けて黒になった回数を数える(カウンター)//

始めに黒線まで移動

OnFwd(OUT_BC);Wait(500)   

コースの最初はラインがなくトレースできないため、始めに0.5秒前進させる

ライントレース

while (true)   {
while  (nOnline  <  nMAX)  {

if (SENSOR_1 < THRESHOLD-20}{
  turn_left1;          //最も暗いとき左旋回//
  nOnline++;              //カウンターを増やす//
}  else {
if (SENSOR_1 < THRESHOLD-13)  {
  turn_left0 ;          //2番めに暗いとき左折//
} else 
  if(SENSOR_1 < THRESHOLD-3) {
     go_forward;         //黒と白の中間で直進//
} else 
if  (SENSOR_1 < THRESHOLD+4) {
   turn_right0;           //2番めに明るいとき右折//
} else {
 turn_right1;                    //最も明るいとき右旋回//
}
   nOnline=0;                    //カウンターをリセット//
}
 Wait(STEP);
}

黒線の真ん中に来るとき「最も暗い」と判断、黒線の端にいるとき「2番めに暗い」と判断、白と黒の境界にいるとき「白と黒の中間」と判断、黒線の近くの白いところにいるとき「2番めに暗い」と判断、黒線から離れたところの白い部分にいるとき「最も明るい」と判断する。

左旋回したときカウンターを1増やす

カウンターがnMAXを越えない限りカーブであると認識し、曲がる。

交差点通過させるプログラム

short_break;            //小休止//
turn_right1; Wait(nMAX*STEP);    //進行方向修正//
cross_line;           //交差点通過//
nOnline=0;                 //カウンターをリセット//
}
}

カウンターがnMAXを越えると交差点だと認識し、交差点通過する。

シュートを打つプログラム

long t0=CurrentTick();          //現在の時刻を得る//
if (SensorUS(S4)<=8) {Catch;}  //超音波センサーの8センチ以内にボールが入ると捕球//
if(CurrentTick()-t0>=35000)    //35秒たったことを認識//
{Shot;}                         //シュートを打つ//

超音波センサーでボールを認識するとモーターを回転させボールを掴む。

開始35秒でシュートを打つ。

反省・感想

・アームはうまく作れたと思うが、プログラミングができず苦労した。

・ライトセンサーをより車輪に近づけるよう工夫した。

・前方が重すぎた。ロボットの組み立ては、より小さくすることが難しいと実感した。

・電池残量が少ないと性能が落ちるので注意が必要だった。

・細かい数値などの調節がむずかしかった。

・成功率が低く、どうすれば確実にうまくいくか考えるべきだった。

・交差点認識がうまくいかなかった。1つ1つの動作を部品化してどこがいけないのか把握するべきだった。

・シュートまでの時間測定をより正確にするために、最後の交差点を認識した後時間を測り始めるプログラムなどにすべきだった。


添付ファイル: file_S__2228287.jpg 147件 [詳細] fileS__2228286.jpg 126件 [詳細] fileS__2228285.jpg 137件 [詳細] fileS__2228284.jpg 134件 [詳細] fileimage.jpg 82件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-08-08 (金) 23:16:23