[[2015a/MemberOnly]]

課題2目次
#contents
*課題内容 [#if7fa4bd]
#ref(2015a-mission2.png)
上図のコースを走るロボットを完成させ、コース上に置かれている玉をゴールにある枠内に収めること。

自分はB→Aのコースを作成し,球は図の下の球の位置に置いた。
*ロボットの作成 [#o50af334]
#ref(DSC_0001.jpg)
#ref(IMG_1413.jpg)
・ロボットは付属のマニュアルにあるのをそのまま作成し、センサーは小回りが利きやすかったりプログラム通りに動きやすいようにと本体の近くに設置した。

・またセンサーの位置を紙とできるだけ近くにすることによって安定して数値を読み込み走るようにした。

・アームは上図のものをつけた。アームにはモーターを使っていないので、シュートが出来ないため、球をゴールまで運ぶことしかできなかった。

・アームをできるだけ大きくすることによって、つかめない代わりに、走っている最中にボールを落とさないようにした。
*プログラムの説明 [#w7bba71a]
・定義
   #define BLACK 40 //この値以下は黒
   #define WHITE 50  //この値以上は白
   #define go_forward OnFwd(OUT_AC);  //前進
   #define go_back OnRev(OUT_AC);  //後退
   #define turn_left Off(OUT_A); OnFwd(OUT_C);  //右に曲がる
   #define turn_right OnFwd(OUT_A); Off(OUT_C);  //左に曲がる
   #define STEP 1 //一回の判定で進む時間
   #define short_break Off(OUT_AC); Wait(400); //休止
   #define cross_line go_forward;Wait(20);short_break;  //交差点を渡る
   #define nMAX 8 //カウンタの最大値を定義

・出発点からQ点まで
   task main()
   {
   SetSensor(SENSOR_2, SENSOR_LIGHT);
   int nOnline=0 //黒と認識した回数
   while (nOnline<nMAX) { //カウンタの最大値に達しない限り通常のライントレースをする
   if(SENSOR_2<BLACK) { //黒にさしかかったら
    turn_left;    }  //左に曲がる
   nOnline++; //カウンタを増やす
   else {
   if(SENSOR_2<WHITE) { //境界付近なら
   go_forward;    }    } //前進
   else  { 
   if(SENSOR_2>WHITE) {    //完全に白と認識したら
   {    turn_right;    }    }  //右に曲がる
   nOnline=0;  //カウンタをリセット
   Wait(STEP);    }  
・Q点の交差点において
   int nOnline=0 //黒と認識した回数 
   while (nOnline<nMAX) { //カウンタの最大値に達しない限り通常のライントレースをする
   if(SENSOR_2<BLACK) { //黒にさしかかったら
   turn_left;    }   //左に曲がる
   nOnline++; //カウンタを増やす
   else {
   if(SENSOR_2<WHITE) {   //境界付近なら
   go_forward;    }    }  //前進
   else  {
   if(SENSOR_2>WHITE){    //完全に白と認識したら
   turn_right;  //右に曲がる
   nOnline=0;    }    }  //カウンタをリセット
   Wait(STEP);      
   short_break;  //休止
   turn_left;wait(20);  //左に方向修正
   closs_line;  //交差点を渡る
   nOnine=0;    }  //カウンタをリセット
・ゴール地点まで
   int nOnline=0 //黒と認識した回数 
   while (nOnline<nMAX) { //カウンタの最大値に達しない限り通常のライントレースをする
   if(SENSOR_2<BLACK) { //黒にさしかかったら
   turn_left;   //左に曲がる
   nOnline++;    } //カウンタを増やす
   else {
   if(SENSOR_2<WHITE)    { //境界付近なら
   go_forward;    }    } //前進
   else {  
   if(SENSOR_2>WHITE) {    //完全に白と認識したら
   turn_right;  //右に曲がる
   nOnline=0;    }    }  //カウンタをリセット
   Wait(STEP);  
   short_break;  //休止
   turn_left;wait(20); //左に方向修正
   Off(OUT_AC)    }
   }


*反省点 [#t740ca41]
・今回はプログラムを作る面でかなり苦戦をしたため、ボールをきちんとつかみ、シュートをするということができるロボットを作ることができなかったため、とても残念である。次回のろぼっとは、きちんと缶をつかむという事をしないといけないので、ろぼっと制作の面では力を入れていきたい。

・プログラムの面では条件節を今回はたくさん使ったため途中で自分でもよくわからないプログラムを作っていたりしていたので苦戦した。他にもnMAXの値をどのくらいにしたら交差点で一時停止をして直進してくれるのかを何回もやったりした。

・次回はタッチセンサーを上手に取り入れて最後まで安定したロボットを制作したい。


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