[[2009b]]


//CENTER:只今作成中

目次
#contents
*チーム [#l02624f3]
チーム名「ロクデナシラブソディー」
チーム名「株式会社 とだ」
メンバー
 その壱 SHIMA 
 その弐 なかみゅう 
 その参 閣下
 その壱 とだ 
 その弐 なかみゅう 
 その参 SHIMA

*ロボコン競技内容 [#x6401341]
**課題:玉入れロボット † [#s59b9347]
  ピンポン玉をできるだけたくさん所定の場所に運ぶ

**フィールドの説明 [#l42d3efc]
        * フィールドは約160cm×110cm
        * 18個のピンポン玉はフィールドの中央にある、2x4の角材(長さ40cm)2本にはさまれた正方形の領域にあり、領域のこの角材が置かれていない辺には500mlの紙パックが並べられている
        * 紙パックはすべての面に白あるいは緑色の画用紙がはられている
        * 目的地の長方形は19mm×19mmの角材で仕切られていて
        * 黒い線の太さは約25mm

**ルール † [#xb98a5cb]
***基本ルール [#c9877109]
        * 単独の競技(1回)および対戦の競技(リーグ戦、計2回の対戦)の合計点で争う。
        * スタート時は「スタート地点」の内部以外に接していないこと。
        * スタート時のロボットは2個を越えないこと(スタート後はいくつに分裂してもかまわない)。
        * 開始の合図から5秒以内にRCXのスタートボタンを押す作業を完了すること。
        * 競技が終了するまで、ロボットに触ったり人間が遠隔で操作してはならない。
        * 途中でうまく動かなくなった場合、1回限り再スタートすることができる。
        * 競技時間終了までにもとのスタート地点にもどらなければならない(リーグ戦では戻らなくてもよい)。
        * 競技時間は3分とする。ただし審判が、競技続行不能と判断した場合は途中で終了する。

***基本得点の計算方法 (単独競技) [#q6f70ec7]
        * ボール1個あたり2点で計算する。
        * ボーナス点として5個入れるごとに5点追加
        * 時間内(3分)にスタート地点にもどらないと-4点(ただしRCXを搭載するロボットの一部でも戻っていれば -2点)
        * 最高で51点
***基本得点の計算方法 (リーグ戦) [#la84423e]
        * ゴールに入れたボールの数で競い、勝ったチームは10点、引き分けの時は5点、負けたチームは0点とする。
        * さらにゴールに入れたボール1個あたり1点を加点する
        * 競技終了後、ゴールの内部にロボットが触れていれば-1点
        * 最高で20点
***技術点の計算方法 [#oe26404f]
    以下の動作の精度・スピード・確実性などを含めた技術的な工夫や芸術性について全てのチーム(3チーム)+TAが20点満点で採点し平均点を求める。
    得点の目安:
        * 紙パックの処理 (3点)
        * ボールの収集 (3点)
        * ボールの運搬 (3点)
        * ボールのシュート (3点)
        * 2台のRCXの連携 (3点)
        * その他 (5点)

*ロボットの作成 [#xac09bd4]

**方針 [#j6aa403e]
 効率よくパックをどかし、ピンポン球を運搬できるロボットを製作する。

***台車 。 [#i95dc0b5]
***アーム [#n6f9e40c]
**製作に移る前に [#r72a29d2]
 初め、一つの大きなロボットを製作するつもりでした(図1参照)が、ピンポン球を収集することが困難であったため、パックをどかすロボットとピンポン球を収集するロボットの2台を製作することとなった。

**ピンポン球収集ロボット [#u6632eb3]
***構造と仕組み [#i95dc0b5]
 収集ロボットの

*** [#n6f9e40c]

**改良前の作品 [#u8e14c08]
**完成 [#n216b881]
**工夫した点・苦労した点など [#u29ed85b]

**問題点 [#mb65bd46]

*プログラム [#y4a54e69]
 #define THRESHOLD 40                                //明るさの識別値   
 #define go_forward OnFwd(OUT_A+OUT_C);              //前進のプログラム
 #define go_back OnRev(OUT_A+OUT_C);                 //後進プログラム
 #define turn_right OnFwd(OUT_A);OnRev(OUT_C);       //右旋回プログラム
 #define turn_left OnRev(OUT_A);OnFwd(OUT_C);        //左旋回のプログラム
 #define rs1_1 15                                    //part1_1を前進するための回転数
 #define rs1_2 -90                                   //part1_2を後進するための回転数
 #define rs2_1 15                                    //part2_1を前進するための回転数
 #define rs2_2 17                                    //part2_2を前進するための回転数
 #define rs4 8                                       //part4とpart5を前進するための回転数
 #define rs6 -12                                     //part6を後進するための回転数
 #define rs7 20                                      //part7を前進するための回転数
 #define rs10 50                                     //part10を後進するための回転数
 #define rs8 20                                      //part8を前進するための回転数
 #define rr 5                                        //90°右旋回するための回転数
 #define rl -5                                       //90°左旋回するための回転数
 #define rr2 3                                       //右へ少し旋回するための回転数
 #define rl2 -9                                      //左へ少し旋回するための回転数
 #define rr4 2                                       //part4で右へ少し旋回するための回転数
 #define rr8 8                                       //part8で右へ少し旋回するための回転数
 #define arm1 OnFwd(OUT_B);                          //アーム(ピンポン玉回収)
 #define arm2 OnRev(OUT_B);Wait(1000);Float(OUT_B);  //アーム(ピンポン玉排出)   
 
 task main ()
 {
 	SetPriority(1);
    
 	SetSensor(SENSOR_1,SENSOR_LIGHT);                     //SENSOR1は光センサー
 	SetSensor(SENSOR_2, SENSOR_ROTATION);                 //SENSOR2は回転センサー
 	SetSensor(SENSOR_3,SENSOR_LIGHT);                     //SENSOR3は光センサー
 	int n;
 	n=0;
 	
 	go_forward;Wait(150);Off(OUT_A+OUT_C);			  //part1始まり 
 	start follow_line_forward;until(SENSOR_2>=rs1);	  //センサー2がrs1以上になるまで前進
 	stop follow_line_back;Off(OUT_A+OUT_C);			  //part1終わり   
 
	while(n<=5)                                            //nが5回以下なら以下のプログラムを行う
 		{
 		ClearSensor(SENSOR_2);                                   //part2始まり
 		turn_right;until(SENSOR_2>=rr);Off(OUT_A+OUT_C);         //右へセンサー2がrr以上になるまで旋回
 		go_forward;Wait(50);Off(OUT_A+OUT_C);                    //少し前進
 		ClearSensor(SENSOR_2);
 		turn_right;until(SENSOR_2>=rr);Off(OUT_A+OUT_C);         //右へセンサー2がrr以上になるまで旋回
 		arm1;                                                    //アームを起動
 		ClearSensor(SENSOR_2);
 		go_forward;until(SENSOR_2>=rs2_1);Off(OUT_A+OUT_C);      //センサー2がrs2_1以上になるまで前進
 		ClearSensor(SENSOR_2);
 		go_forward;until(SENSOR_2>=rs2_2);Off(OUT_A+OUT_C);      //センサー2がrs2_2以上になるまで前進
 		Wait(200);                                               //2秒間待機
 									           //part2終わり
 
 		ClearSensor(SENSOR_2);                                   //part3開始
 		go_back;until(SENSOR_2<=-rs2_2);Off(OUT_A+OUT_C);        //センサー2が-rs2_2以下になるまで後進
 										     //part3終わり
 
 		ClearSensor(SENSOR_2);                                   //part4開始
 		turn_right;until(SENSOR_2>=rr4);Off(OUT_A+OUT_C);        //センサー2がrr4以上になるまで右旋回
 		ClearSensor(SENSOR_2);
 		go_forward;until(SENSOR_2>=rs4);Off(OUT_A+OUT_C);        //センサー2がrs4以上になるまで前進
 		Wait(200);                                               //2秒間待機
 		ClearSensor(SENSOR_2);
 		go_back;until(SENSOR_2<=-rs4);Off(OUT_A+OUT_C);          //センサー2が-rs4以下になるまで後進
									           //part4終わり
 
 		ClearSensor(SENSOR_2);                                   //part5開始
 		turn_left;until(SENSOR_2<=rl2);Off(OUT_A+OUT_C);         //センサー2がrl2以下になるまで左旋回
 		ClearSensor(SENSOR_2);
 		go_forward;until(SENSOR_2>=rs4);Off(OUT_A+OUT_C);        //センサー2がrs4以上になるまで前進
 		Wait(300);                                               //3秒間待機
 		ClearSensor(SENSOR_2);
 		go_back;until(SENSOR_2<=-rs4);Off(OUT_A+OUT_C);          //センサー2が-rs4以下になるまで後進
 									           //part5終わり

 										     //part6開始 
 		go_back;until(SENSOR_2<=rs6);Off(OUT_A+OUT_C);           //センサー2が-rs2_1以下になるまで後進
 		Float(OUT_B);                                            //アーム停止
 									           //part6終了

 		ClearSensor(SENSOR_2);                                   //part7開始
 		turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C);          //センサー2がrl以下になるまで左旋回
 		go_back;Wait(50);Off(OUT_A+OUT_C);                       //少し後退
 		ClearSensor(SENSOR_2);
 		turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C);          //センサー2がrl以下になるまで左旋回
 		start follow_line_forward;until(SENSOR_2>=rs7);Off(OUT_A+OUT_C);
										     //センサー2がrs10以上になるまで前進
 										     //part7終了       
 
 		ClearSensor(SENSOR_2);                                   //part8開始
 		turn_right;until(SENSOR_2>=rr8);Off(OUT_A+OUT_C);        //センサー2がrr以上になるまで右旋回
 		ClearSensor(SENSOR_2);
 		go_forward;Wait(300);Off(OUT_A+OUT_C);        //センサー2がrs8以上になるまで前進
 		PlaySound(2);Wait(100);arm2;                                          //ピンポン玉排出
										     //part8終了
 
 		ClearSensor(SENSOR_2);                                   //part10開始
 		go_back;until(SENSOR_2<=-rs8);Off(OUT_A+OUT_C);          //センサー2が-rs8以下になるまで前進
 		ClearSensor(SENSOR_2);
 		turn_left;until(SENSOR_2<=rl);Off(OUT_A+OUT_C);          //センサー2がrl以下になるまで左旋回
 		go_back;Wait(50);Off(OUT_A+OUT_C);                       //少し後進
 		start follow_line_back;until(SENSOR_2>=rs10);Off(OUT_A+OUT_C);
 										      //センサー2がrs10以上になるまで後進
 		n=n+1;								     //part10終了
 		}
 
	if(n>5)							     //5回目終了後以下のプログラムを行う
 		{							     //part11開始
		start follow_line_forward;until(SENSOR_2>=-rs1_2);
 		stop follow_line_back;Off(OUT_A+OUT_C);		     //センサー2が-rs1_2以上になるまで前進
 		go_forward;Wait(50);Off(OUT_A+OUT_C);		     //少し前進
 		start follow_line_forward;until(SENSOR_2<=rs1_1);
 		stop follow_line_back;Off(OUT_A+OUT_C);		     //センサー2が-rs1_1以上になるまで前進
 		}                                                         //part11終わり								   
 }
        
 task follow_line_forward()				    //ラインに沿って前進するプログラム
 {
 	while(true)
 		{
		if(SENSOR_1>THRESHOLD)			    //左側のセンサーが白で
			{
			if(SENSOR_3>THRESHOLD)		    //かつ右側のセンサーが白なら
  				{Off(OUT_A+OUT_C);go_forward;}//直進する
 			else if(SENSOR_3<THRESHOLD)	    //かつ右側のセンサーが黒なら
 				{Off(OUT_A+OUT_C);turn_right;}//右折する
 			}
 		else if(SENSOR_1<THRESHOLD)		    //左側のセンサーが黒で
 			{
 			if(SENSOR_3>THRESHOLD)		    //かつ右側のセンサーが白なら 
 				{Off(OUT_A+OUT_C);turn_left;} //左折する
 			else if(SENSOR_3<THRESHOLD)	    //かつ右側のセンサーが黒なら
 				{Off(OUT_A+OUT_C);go_forward;}//直進する。
 			}                    
 		}
 }
 
 task follow_line_back()					    //ラインに沿って後進するプログラム
 {
 	while(true)
 		{
		if(SENSOR_1>THRESHOLD)                     //左側のセンサーが白で
			{ 
 			if(SENSOR_3>THRESHOLD)		    //かつ右側のセンサーが白なら
				{Off(OUT_A+OUT_C);go_back;}   //後進
 			else if(SENSOR_3<THRESHOLD)	    //かつ右側のセンサーが黒なら
 				{Off(OUT_A+OUT_C);turn_left;} //左旋回
 			}
 		else if(SENSOR_1<THRESHOLD)		    //左側のセンサーが黒で
 			{
 			if(SENSOR_3>THRESHOLD)		    //かつ右側のセンサーが白なら 
 				{Off(OUT_A+OUT_C);turn_right;}//右旋回
 			else if(SENSOR_3<THRESHOLD)	    //かつ右側のセンサーが黒なら
 				{Off(OUT_A+OUT_C);go_back;}   //後進
 			}
 		}                    
 }

*感想 [#jad47c94]

*コメント [#me0d2489]


#comment


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