2012b/Member

目次

メンバー

課題内容

ボールを運びつつ、ライントレースをするロボットを作る。

ルール

この競技のポイント

ロボット

全体像

まず後輪を廃し、後輪の代わりに先端の丸い棒を取り付け、引きずるような形で進む形にしました、これにより小回りの効く走行が可能になります。
更に全体的に車高を低くして車体全体に安定感を出させました。

全体図

アーム

ボールを運ぶ手段としてアームを採用しました。
空いてたモーターBをギア二つを使い90°向きを変えてアームの動力源としました。
アームの上げ下げによりボールを捕まえ、発射は構造上出来ないのでアームを上げて車体を進めて押し込む形になります。

全体図

プログラム

僕はコースを右側からスタートするプログラムを作りました。

#define THRESHOLD 47
#define go OnFwd(OUT_AC);
#define back OnRev(OUT_AC);
#define off Off(OUT_ABC);
#define turn_left1  OnFwd(OUT_C); OnRev(OUT_A);
#define turn_left0  OnFwd(OUT_C); Off(OUT_A);
#define turn_right0  OnFwd(OUT_A); Off(OUT_C);
#define turn_right1  OnFwd(OUT_A); OnRev(OUT_C);
#define STEP 1
#define arm_up OnFwd(OUT_B);
#define arm_down OnRev(OUT_B);
#define shot arm_up;Wait(100);off;go;Wait(100);back;Wait(200);off;arm_down;Wait(100);off;
task main(){	
	int i=0;
	int count=0;
	int angle=36;
	arm_up;
	Wait(10);
	turn_left1;
	Wait(angle);
	arm_down;
	Wait(10);
	turn_right1;
	Wait(angle);
	go;
	Wait(100);
	SetSensor(SENSOR_2,SENSOR_LIGHT);

ここからライントレース開始です

      	turn_right0;
	SetSensor(SENSOR_2,SENSOR_LIGHT);
	while (i==3){
	if(i==1){
	turn_right0;
	Wait(angle+angle);
	off;
	i=0;
       turn_right0;
	}
	if(i==2){
	turn_right0;
	Wait(angle);
	shot;
 	i=3;  	
	} else {
	if(count<=20){
	turn_right0;
	Wait(angle-count);
	if(SENSOR_2 < THRESHOLD -3){
	i=1;
	}
	turn_left0;
	Wait(angle+angle);
	if(SENSOR_2 < THRESHOLD -3){
	i=2;
	}
	} else {
	    if (SENSOR_2 < THRESHOLD -8) {
	      turn_left1;
	      count=0;
	    } else if (SENSOR_2 < THRESHOLD -3) {
	      turn_left0;
	       count=0;
	    } else if (SENSOR_2 < THRESHOLD +3) {
	      go;
	    } else if (SENSOR_2 < THRESHOLD +8) {
	      turn_right0;
	      count++;
	    } else {
		turn_right1;
    }
    Wait(STEP);
  }
  }
  }
  Wait(STEP);
}
}
}
off
}

off }

ライントレース

まずライントレース部分ですが、これはほとんどテンプレどうりです。
センサーが白だったら右回り黒だったら左回りに、中間の灰色くらいなら直進と言ったシンプルなライントレースです。

終点の判断

プログラミングで一番苦労したのが恐らくこの終点の判断です。
どうやって終点かどうかの判断をするか考えた時にT字路に突き当たる形で入っていくのは終点だけだと気づきました。
そこで明らかに直角以上の角に差し掛かった時に進行方向の90°ずつ曲がった所が黒なら終点とする判断をするようにしました。
具体的にはライントレース中に白をセンサーが認識するとcountの値が1増えます。
countが20を超えると終点かどうかの判断のためのプログラムに移行します。

終点かどうかの判断のためのプログラム

countが20を超えるとこちらに移行します。 まず右側に旋回しそこが黒かどうかの判断をします

感想

情工の授業のプログラムとは違った数字を弄るだけでなく実際にどう動くかを考えなければならないのが難しかったが、そこを考えるのもまた楽しかった。


添付ファイル: fileIMG_20121221_031134.jpg 235件 [詳細] fileIMG_20121221_031209.jpg 239件 [詳細] fileIMG_20121221_031121.jpg 121件 [詳細] file2012b-mission1.png 259件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-12-26 (水) 16:22:27