[[2015a/Member]]
#contents
*ロボット本体の説明 [#mad047d8]
**ロボットの紹介 [#e6b27aac]
-全体像…アームを左右二本ずつにすることでよりボールを離しにくくした。
また、1つのモーターで左右のアームを動かすことが出来る。
#ref(./gbgfbd.jpg)
-裏側から見た写真…センサーをできるだけ本体の中心に近づけることで、より小回りがよくなるようにした。
#ref(./grgwerfw.jpg)
**アーム部分とセンサー部分 [#s2ec782d]
#ref(./htergref.jpg)
*本体の制作において [#nb07a091]
**工夫した点 [#cda40afd]
-できる限りセンサーをロボットの中心に近づけることで小回りをよくした点
-1つのモーターで左右のアームを同時に操作できる構造のアームを作った点
**反省点 [#nbea7ffe]
-アーム部分がボールに前にあるボールに当たり、ボールをうまく掴むことができなかったため、ボールを線の外に配置せざるを得なかった点
*プログラムの説明 [#p47e8be0]
**ルートとボールの配置 [#y9bba3d6]
#ref(./unnamed.jpg)
**プログラム紹介 [#n5c6116b]
        /* 数字及びしきい値、動作時間を設定する */
        #define gostr OnFwd(OUT_A+OUT_C);
        #define goback OnRev(OUT_A+OUT_C);
        #define gori OnFwd(OUT_A); OnRev(OUT_C);
        #define gole OnFwd(OUT_C); OnRev(OUT_A);
        #define THRESHOLD 40 
        #define runtimeone 95 
        #define armtimer 200
        #define STEP 300
        task main()
        {
	SetSensor(SENSOR_1, SENSOR_LIGHT);
	gostr;
	ClearTimer(0);
	ClearTimer(1);
        /* 黒の部分と白い部分の境界をトレースする */
	while(Timer(0) < runtimeone){
		if(SENSOR_1 < THRESHOLD){
			gori;
			until(SENSOR_1 > THRESHOLD);
			gostr;
		}else{
			gole;
			until(SENSOR_1 < THRESHOLD);
			gostr;
		}
	}
        /* 一回目の交差点で停止 */
	Off(OUT_A+OUT_C);
	Wait(STEP);
	gostr; 
	Wait(30);
	Off(OUT_A+OUT_C);
        /* 黒の部分と白い部分の境界をトレースする */
        while(Timer(1) < armtimer){
		if(SENSOR_1 < THRESHOLD){
			gori;
			until(SENSOR_1 > THRESHOLD);
			gostr;
		}else{
			gole;
			until(SENSOR_1 < THRESHOLD);
			gostr;
		}
	}
	/* ボールを掴む動作 */
	Off(OUT_A+OUT_C);
	OnRev(OUT_B);
	Wait(10);
	Off(OUT_B);
	gostr;
	Wait(30);
	Off(OUT_A+OUT_C);
	OnFwd(OUT_B);
	Wait(10);
	Off(OUT_B);
	goback(OUT_A+OUT_C);
	Wait(40);
	Off(OUT_A+OUT_C);
	Wait(30);
        ClearTimer(0);
        /* 黒の部分と白い部分の境界をトレースする */
	while(Timer(0) < 100){
		if(SENSOR_1 < THRESHOLD){
			gori;
			until(SENSOR_1 > THRESHOLD);
			gostr;
		}else{
			gole;
			until(SENSOR_1 < THRESHOLD);
			gostr;
		}
	}
	/* 二回目の交差点で停止 */
	Off(OUT_A+OUT_C);
	Wait(STEP);
	gostr; 
	Wait(30);
	Off(OUT_A+OUT_C);
        ClearTimer(0);
        /* 黒の部分と白い部分の境界をトレースする */
	while(Timer(0) < 190){
		if(SENSOR_1 < THRESHOLD){
			gori;
			until(SENSOR_1 > THRESHOLD);
			gostr;
		}else{
			gole;
			until(SENSOR_1 < THRESHOLD);
			gostr;
		}
	}
	/* ボールをシュートする */
	Off(OUT_A+OUT_C);
	Wait(30);
	gostr;
	Wait(100);
	Off(OUT_A+OUT_C);
	OnRev(OUT_B);
	Wait(10);
	Off(OUT_B);
	goback;
	Wait(100);
	Off(OUT_A+OUT_C);;
        }
*プログラムの制作において [#f02621ba]
**工夫した点 [#jae10a02]
**反省点 [#je989337]
-交差点をうまく認識させることができず、すべて時間に選る制御に頼ってしまった点
-プログラムを綺麗にまとめることができず、長大化してしまった点
*実際の動作と感想 [#q9162f10]

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS