*はじめに [#n9cab375]

#ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2015a%2FMission2&openfile=2015a-mission2.png)
#ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2015a%2FMission2&openfile=2015a-mission2.png,35%)

B→Aのコースを担当した。

*仕組み [#p693acd1]

モーターA:グラバー 
モーターB:右タイヤ
モーターC:左タイヤ
センサー1:光センサー
センサー2:タッチセンサー

#ref(image1.JPG)
#ref(image2.JPG)

左右のタイヤはモーター付き、後輪はひとつでモーターなしにした。
タッチセンサーに光センサーをつけ、固定したボールが光センサーにあたることでタッチセンサーが反応し、グラバーがおりる仕組みにした。
ゴールには特にシュートなどはせず、そのまま車ごと突破することにした。

*プログラミング [#c4b14c1c]

メインのライントレースにサブルーチンでグラバーの動作をつけた。

**定義 [#l5f8e67a]

#define THRESHOLD 55	// しきい値
#define SPEED_H 40		// ハイスピード
#define SPEED_L 25		// ロースピード
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OUT_C,speedL);	// 両方進める
#define go_forward OnRL(SPEED_H,SPEED_H);	// 直進
#define turn_left0 OnRL(SPEED_H,0);		// 左折
#define turn_right0 OnRL(0,SPEED_H);		// 右折
#define turn_left1 OnRL(SPEED_H,-SPEED_H)	// 左旋回
#define turn_right1 OnRL(-SPEED_H,SPEED_H)	// 右旋回
#define STEP 1	//	一回の判定で進む時間
#define nMAX 50	//	連続の黒判定のが50以上で交差点認定
#define short_break Off(OUT_BC); Wait(2000);		// 交差点で2秒停止
#define CROSS_TIME 200		// 交差点を渡るための時間
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME);short_break;		// 交差点直進後停止
#define grabber_down RotateMotor(OUT_A,30,30);Float(OUT_A);	// グラバーをおろす

**グラバー [#gb733142]

sub CATCH()
{
	SetSensorTouch(S2);		// センサー2がタッチセンサー
	if (SENSOR_2 == 1) {	// もしタッチセンサーが反応したら
		grabber_down;	// グラバーがおりる
	}
}

**ライントレース [#x8b286cf]

task main()
{
	SetSensorLight(S1);		// センサー1が光センサー
	int nOnline=0;		// カウンターセット
	while (true) {
		while (nOnline < nMAX) {		// 黒判定が50回未満の時
			if (SENSOR_1 < THRESHOLD-15) {	// センサーの値が40未満なら
				turn_left1;		// 左旋回
				nOnline++;		// カウンターの値を1増やす
			} else {
				if (SENSOR_1 < THRESHOLD) {	// 55未満の時
					turn_left0;			// 左折
			} else if (SENSOR_1 < THRESHOLD+8) {	// 63未満の時
					turn_right0;			// 右折
			} else {
				turn_left1;		// 64以上なら軌道修正として左旋回
			}
				nOnline=0;		// カウンターを0にもどす
			}
			Wait(STEP);
		}
	short_break;		// 2秒停止
	turn_right1; Wait(nMAX*STEP);	// 右旋回してから50とまる
	cross_line;		// 一旦もどって直進
	nOnline=0;		// 黒判定の回数をゼロに戻す
	CATCH();		// もしタッチセンサー反応があればグラバー降下
	}
}

*感想と反省 [#n26b8f24]

今回途中で電池を変えた際、しきい値だけでなく黒判定の回数や旋回にするときの値まで変えなければならなかった。すべての値をわざわざ変えるのではなく、一つだけ変えることで対応できるようにしたい。
今回はシュートをしなかったので、モーター1個でキャッチもシュートもできる方法を考えたい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS