[[2009a]]
目次
*目次 [#h58a79f3]

#contents
*メンバー [#w1410ea6]
~Ds…ロボット1及びプログラム1担当
~恵…ロボット2及びプログラム2担当
~堀内…ロボット2及びプログラム2担当
*ロボコン [#mab1b4c9]
[[2009a/ロボコン]]を参照してください。
*ロボットの概要 [#hf162777]

**ロボット [#ne19cb3d]
#ref(2009a/A3/ロボコン/本体1.jpg)
~↑タラップをあげた状態
#ref(2009a/A3/ロボコン/本体2.jpg)
~↑タラップを下げた状態の本体です。2号機がトラップを押し下げて進む仕組み。
#ref(2009a/A3/ロボコン/光センサー.jpg)
~光センサーは図のように取り付けました。なお、中央の黒い部品は、
#ref(2009a/A3/ロボコン/タッチセンサー.jpg)
~タッチセンサーを反応させるために取り付けたもの。タッチセンサー自体がバンパーになっています。
#ref(2009a/A3/ロボコン/補助輪.jpg)
~補助輪は上に2号機を乗せたときに後ろに転ばないように取り付けたもの。
**ロボット [#o4596b4d]

#ref(2009a/A3/ロボコン/全体像.jpg,50%)
#ref(2009a/A3/ロボコン/側面.jpg,50%)
全体の様子です。

#ref(2009a/A3/ロボコン/アーム全体.jpg,50%)
#ref(2009a/A3/ロボコン/アームのギア部分.jpg,50%)
牛乳パックを掴むアームです。
真ん中の黒いものが回ると、両側の腕が開けたり、閉めたりします。

*プログラムの説明 [#m8b91d82]

**ロボット,離廛蹈哀薀 [#y71c52fd]
 #define L 43 //閾値を設定
 #define ON 11 //送るメッセージを設定
 #define go OnFwd(OUT_A+OUT_C); //前進を設定
 #define right OnFwd(OUT_A);OnRev(OUT_C); //右折を設定
 #define left OnFwd(OUT_C);OnRev(OUT_A); //左折を設定
 task main()
 {SetSensor(SENSOR_1,SENSOR_LIGHT); //光センサーを設定
   SetSensor(SENSOR_2,SENSOR_TOUCH); //タッチセンサーを設定
   SetSensor(SENSOR_3,SENSOR_LIGHT); //光センサーを設定
   int n=0; //変数を設定
  Wait(100); //いきなり動くと厄介かと思い、スイッチを押してから少し待って行動開始
  until(n==3){ if(SENSOR_1>L)  //ここから
              {if(SENSOR_3>L){OnFwd(OUT_A+OUT_C);}
               else {right;}
               }
          else{
          if (SENSOR_3>L){left;}  //ここまでは基本的なライントレースを変数が3になるまで行い、
          else{if(n==0){go;Wait(80);n++;} //一つ目の交差点(?)は直進
                  else if(n==1){go;Wait(40);right;Wait(90);n++;} // 二つ目は右折
                  else if(n==2){Off(OUT_A+OUT_C);n++;}  //三つ目では一瞬止まり、ライントレースを終了させ
           }       
         }
       }
       go;Wait(10);right;Wait(90); //右折して、
       go;Wait(248);left;Wait(90); //壁のへこんでいるポイントに向かって、
       until(SENSOR_2==1){go;}  //タッチセンサーが反応するまで進み、
       Off(OUT_A+OUT_C); //反応したらいったん止まって、
        PlaySound(SOUND_UP);Wait(1000);OnRev(OUT_A+OUT_C);Wait(60); //しばらく待ってタラップを下げるため少しバックして
       Off(OUT_A+OUT_C);  //終了!!  
       }
**ロボット△離廛蹈哀薀 [#d517f07b]

 
 #define L 40
 #define D (SENSOR_1<L)&&(SENSOR_3<L)
 #define go OnRev(OUT_A+OUT_C);
 #define back OnFwd(OUT_A+OUT_C);
 #define right OnFwd(OUT_A);OnRev(OUT_C);
 #define left OnRev(OUT_A);OnFwd(OUT_C);
 #define ON 11
 #define Stop Off(OUT_A+OUT_C+OUT_B);
 #define Catch OnRev(OUT_B);
 #define Put OnFwd(OUT_B);				//よく使うものは、面倒にならないように簡単化する
 
 task main()
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT); 		    //センサーを設置する
    int n=0;
    int m=1;				     //変数を設定する
    
    Off(OUT_A+OUT_C);Wait(2300);
    go;Wait(50);     			        //23秒待つ(1号機が2号機を向こうまで運ぶ時間)
    until(SENSOR_2==1){go;}
   until(D){m++;back;}
  if(D&&n==0){go;Wait(30);left;Wait(55);n++;Stop;}   
  start line; 				     
  if(D&&n==1){stop line;go;Wait(30);left;Wait(55);n++;}
  start line;				        
  if((SENSOR_2==1)&&(m==1)){stop line;Catch;Wait(400);
                             right;Wait(110);m++;}
  start line;				        
  if(D&&n==2){go;Wait(55);n++;}		       
  if((SENSOR_2==1)&&(m==2)){stop line;Put;Wait(400);Stop;left;Wait(55);m++;} 
  go;Wait(300);left;Wait(55);go;
  if((SENSOR_2==1)&&(m==3)){Catch;Wait(400);right;Wait(110);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==4)){back;Wait(50);right;Wait(55);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==5)){Put;Wait(400);Stop;right;Wait(55);m++;}
  go;Wait(300);left;Wait(55);go;Wait(30);
  right;Wait(55);
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==6)){Catch;Wait(400);right;Wait(110);m++;}
  start line; 
  if(D&&n==3){go;Wait(55);right;Wait(55);n++;}
  if(D&&n==4){go;Wait(55);n++;}
  if(D&&n==5){go;Wait(55);left;Wait(55);n++;}
  if((SENSOR_2==1)&&(m==7)){stop line;Put;Wait(400);right;Wait(110);m++;}
  start line;
  if(D&&n==6){go;Wait(50);n++;}
  if((SENSOR_2==1)&&(m==8)){stop line;Catch;Wait(400);right;Wait(110);m++;}
  start line;
  if(D&&n==7){go;Wait(55);n++;}
  if((SENSOR_2==1)&&(m==9)){stop line;Put;Wait(400);back;Wait(55);
                             right;Wait(55);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==10)){right;Wait(55);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==11)){Catch;Wait(400);right;Wait(110);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==12)){left;Wait(55);m++;}
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==13)){Put;Wait(400);back;Wait(55);
                             left;Wait(55);m++;}
  go;Wait(300);right;Wait(55);go;Wait(30);
  left;Wait(55);
  until(SENSOR_2==1){go;}
  if((SENSOR_2==1)&&(m==14)){Catch;Wait(400);right;Wait(110);m++;}
  start line;
  if(D&&n==8){go;Wait(55);left;Wait(55);n++;}
  if(D&&n==9){go;Wait(55);n++;}
  if(D&&n==10){go;Wait(55);right;Wait(55);n++;}
  if((SENSOR_2==1)&&(m==15)){Put;Wait(400);}
  Stop;
 }
 
 task line()						//ライントレース
 {
  SetSensor(SENSOR_1,SENSOR_LIGHT);
  SetSensor(SENSOR_2,SENSOR_TOUCH);
  SetSensor(SENSOR_3,SENSOR_LIGHT);
         if(SENSOR_1>L)
              {if(SENSOR_3>L){go;}
               else {right;}
              }
          else{
          if (SENSOR_3>L){left;}
                }
 } 

途中、説明が書いていないとこは、移動経路についての説明なので、

下の図をみて理解した方がいいかなと思って、あえて書いていない。(ライントレースをあまり使っていないゆえ、時間設定で、プログラムがわかりずらいかも)

#ref(2009a/A3/ロボコン/ロボコン移動経路.jpg,)
赤の線:移動経路

青の円:パックを掴むところ

緑の円:パックを放すところ

茶色の四角:タッチセンサーが反応するところ

*良かった点、工夫した点 [#jff0e369]
~いかに上手く壁の向こう側に運ぶかを考え、なるべく小さいロボット、正確性のあるプログラム(途中までライントレース、それから時間指定など)を組めるよう工夫した。by Ds

他のグループと違うとこは、「タッチセンサー」をフルに活用したこと。
ライントレースよりは、時間設定と、タッチセンサーで距離などをはかった。by恵
*苦労した点 [#u3f12556]
~とかくロボットが壊れやすかったので、いかに頑丈にするかというのと、上に2号機を乗せて動く際のプログラムの時間指定が厄介だった。 by Ds

時間設定をメインでやっていると、やっぱり、電池の調子によって、微妙にずれてしまうことがあって困った。by恵

*反省点 [#tbfaee3f]

~もう少しプログラミングに時間をかけられたらよかった。 by Ds

もう少し、調整の時間があったなら、うまくいったかもしれない。
最後の詰めが甘かったのだろう。by恵

*コメントどうぞ [#rdd798ad]
#comment

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