[[2012b/Member]] *ライントレースを応用してボールを運んでシュート!をする。(ロボティクス入門ゼミ2012後期課題1)[#top] **課題 [#l5ef10d6] 図のようなコースを各自で作成した上で、次のような動作をするロボットを作成せよ。 <1人目> +スタート地点から出発し、スタート地点外のすぐ近くに置かれたピンポン玉をつかむ。 +ピンポン玉をつかんだら速やかにスタート地点の境界の黒線に戻り、そこから黒線に沿って動いてゴール地点を目指す。ただしT字路では、直進、右折、左折を正しく判断させること。また、曲線部中央の障害物に接触しないようにすること。 +ゴール地点に到達したら、ゴールエリア外からピンポン玉をゴールにシュートする。ただし、どうしてもエリア外からのシュートが難しい場合は、エリア内からシュートした後、エリアから出てもよい。 <2人目> +上の動作でスタートとゴールを逆にして同様の動きをするプログラムを作成せよ。ロボット本体は共通のものを使うとする。 **プログラム [#x668c00a] 使用したプログラム #define BLACK 35 // 定義 BLACK=35ということを示す #define u_turn OnRev(OUT_A); OnFwd(OUT_C); // 定義 Aを逆回転、Cを前回転 つまり左に曲がる #define go_forward OnFwd(OUT_AC); // 定義 ACともに前回転 つまり直進 #define turn_left OnRev(OUT_A); OnFwd(OUT_C); // 定義 Aを逆回転、Cを前回転 つまり左に曲がる #define turn_right OnFwd(OUT_A); OnRev(OUT_C); // 定義 Cを逆回転、Aを前回転 つまり右に曲がる #define n_turn OnFwd(OUT_A); OnRev(OUT_C); // 定義 Cを逆回転、Aを前回転 つまり右に曲がる #define STEP 1 task main() { SetSensor(SENSOR_3, SENSOR_LIGHT); // 光センサーを入れる。 ClearTimer(3); // 3のタイマーを切る(以下同様) OnFwd(OUT_B); // 前回転(以下同様) この場合Bの位置に接続されているモーター Wait(20); // 時間調節(以下同様) この場合20秒 OnFwd(OUT_AC); Wait(90); Off(OUT_B); // 停止(以下同様) この場合Bを停止する。 Off(OUT_AC); Wait(70); OnFwd(OUT_AC); Wait(30); ClearTimer(3); while (FastTimer(3) <=100){ // 条件 タイマー3が1秒以内のとき if (SENSOR_3 <= BLACK){ // 条件 センサー3がBLACKよりも低いとき(以下同様) Off(OUT_AC); Wait(50); } else if(SENSOR_3 > BLACK && FastTimer(3) <=40){ // 条件 タイマー3がBLACKより大きいかつタイマー3が0.4秒以下のとき OnFwd(OUT_AC); Wait(5); } else if(SENSOR_3 > BLACK && FastTimer(3) >40){ // 条件 タイマー3がBLACKより大きいかつタイマー3が0.4秒より大きいとき OnRev(OUT_AC); Wait(5); } } ClearTimer(3); while (FastTimer(3) <=600){ // 条件 タイマーが6秒以内のとき if (SENSOR_3 <= BLACK){ // go_forward; Wait(10); turn_right; Wait(10); ClearTimer(0); } else if(FastTimer(0) >=100){ // 条件 タイマー0が1秒以上のとき u_turn; ClearTimer(0); } else if(FastTimer(0) >40){ // 条件 タイマー0が0.4秒より大きいとき turn_right; } else if(SENSOR_3 > BLACK){ // 条件 センサー3がBLACKより低いとき turn_left; } } Off(OUT_AC); Wait(5); u_turn; Wait(40); ClearTimer(3); while (FastTimer(3) <=100){ if (SENSOR_3 <= BLACK){ Off(OUT_AC); Wait(50); } else if(SENSOR_3 > BLACK){ u_turn; Wait(10); } } Off(OUT_AC); Wait(10); ClearTimer(3); while (FastTimer(3) <=1400){ if (SENSOR_3 < BLACK ){ go_forward; ClearTimer(0); } else if(SENSOR_3 > BLACK && FastTimer(0) >=70){ u_turn; ClearTimer(0); } else if(SENSOR_3 > BLACK && FastTimer(0) >=30){ turn_left; } else if(SENSOR_3 > BLACK ){ turn_right; } } Off(OUT_AC); Wait(5); ClearTimer(0); ClearTimer(1); ClearTimer(3); while (FastTimer(3) <=800){ if (SENSOR_3 < BLACK ){ go_forward; ClearTimer(1); ClearTimer(0); } else if( FastTimer(1) >=10){ u_turn; } else if( FastTimer(0) >=70){ turn_right; } else if(SENSOR_3 > BLACK ){ turn_left; } } Off(OUT_AC); Wait(50); ClearTimer(3); ClearTimer(0); ClearTimer(1); while (FastTimer(3) <= 750){ if (SENSOR_3 < BLACK){ go_forward; Wait(10); ClearTimer(0); ClearTimer(1); } else if(SENSOR_3 > BLACK && FastTimer(0) >=40){ n_turn; } else if(SENSOR_3 > BLACK && FastTimer(1) >=10){ turn_left; } else if(SENSOR_3 > BLACK){ turn_right; } } Off(OUT_AC); Wait(100); OnRev(OUT_AC); Wait(60); Off(OUT_AC); turn_right; Wait(42); OnFwd(OUT_B); Wait(20); Off(OUT_B); Off(OUT_AC); } ***説明 [#wb47742e] ⑴l1~l7 以降に使用する言葉であったり数値を定義し、後に省略して記述出来るようにしている。 -アメリ -イギリス -スイス -イタリア ++ヴェネチア ++ローマ ---バチカン ++ナポリ