2009a 目次

目次

メンバー

Ds…ロボット1及びプログラム1担当

恵…ロボット2及びプログラム2担当

堀内…ロボット2及びプログラム2担当

ロボコン

2009a/ロボコンを参照してください。

ロボットの概要

ロボット

本体1.jpg

↑タラップをあげた状態

本体2.jpg

↑タラップを下げた状態の本体です。2号機がトラップを押し下げて進む仕組み。

光センサー.jpg

光センサーは図のように取り付けました。なお、中央の黒い部品は、

タッチセンサー.jpg

タッチセンサーを反応させるために取り付けたもの。タッチセンサー自体がバンパーになっています。

補助輪.jpg

補助輪は上に2号機を乗せたときに後ろに転ばないように取り付けたもの。

ロボット

全体像.jpg
側面.jpg

全体の様子です。

アーム全体.jpg
アームのギア部分.jpg

牛乳パックを掴むアームです。 真ん中の黒いものが回ると、両側の腕が開けたり、閉めたりします。

プログラムの説明

ロボット,離廛蹈哀薀

#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);  //終了!!  
      }

ロボット△離廛蹈哀薀

#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;}
               }
} 

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

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

ロボコン移動経路.jpg

赤の線:移動経路

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

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

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

良かった点、工夫した点

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

他のグループと違うとこは、「タッチセンサー」をフルに活用したこと。 ライントレースよりは、時間設定と、タッチセンサーで距離などをはかった。by恵

苦労した点

とかくロボットが壊れやすかったので、いかに頑丈にするかというのと、上に2号機を乗せて動く際のプログラムの時間指定が厄介だった。 by Ds

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

反省点

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

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

コメントどうぞ



添付ファイル: fileロボコン移動経路.jpg 214件 [詳細] file側面.jpg 224件 [詳細] file全体像.jpg 232件 [詳細] fileアーム全体.jpg 226件 [詳細] fileアームのギア部分.jpg 229件 [詳細] file本体1.jpg 222件 [詳細] file本体2.jpg 213件 [詳細] file補助輪.jpg 221件 [詳細] file光センサー.jpg 243件 [詳細] fileタッチセンサー.jpg 238件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-08-08 (土) 23:50:19 (3660d)