#contents

*ロボットの構造 [#r327de9a]
まず初めに私たちが作ったロボットを説明しよう。

今回は黒のラインの上をなぞって走行し、途中に置いてあるボールを取る。

そして最後にそれをゴールにシュートするというロボットを作った。

今回は重心も考えて安定したロボットを目指した。

**タイヤ [#o640751c]

タイヤの部分はこうなっている。

&ref(./ロボ2.1.jpg,30%);

3輪にすることでプログラムの制御が楽になっている。

反省はタイヤとタイヤの隙間をもっと狭くしたい。

なぜかというと小回りがききなめらかなライントレースができるからである。

**アーム [#w1ab14f0]

これが今回のアームである。

下のアームの間のところに光センサーがついている。

こうすることによりライン上に置いてあるボールを確実につかむようになっている。

&ref(./ロボ2.5.jpg,30%);

***アームの動き [#b3697d87]

アームはこのように上からアームを下すようになっている。

動かない残りの2本とで挟むようになっている。

アームの数は全部で3本だ。

&ref(./ロボ2.3.jpg,30%);
&ref(./ロボ2.4.jpg,30%);

なぜこの形にしたかというと持ち上げるより簡単であるうえ、シュートをどうするかと考えたときに

この方がシュートしやすいと考えたからである。

*コースを走る [#h061bfa0]

**コース [#s07c7343]

今回はAからCのこの赤い部分のコースを走る。

ボールは青い丸の位置に置く。

&ref(./ライン図.png,50%);

**プログラム [#le7b3f31]

***定義 [#r65fc005]

  #define GOLL OnFwd(OUT_B,30);OnFwd(OUT_C,0);          // 左折 緩
  #define GOL OnFwd(OUT_B,30);OnFwd(OUT_C,-15);         // 左折 急
  #define GOR OnFwd(OUT_B,-15);OnFwd(OUT_C,30);         // 右折 急
  #define GORL OnFwd(OUT_B,0);OnFwd(OUT_C,30);          // 右折 緩
  #define SR OnFwd(OUT_B,-55);OnFwd(OUT_C,35);          // 右旋回
  #define GOS OnFwd(OUT_BC,40);                         // 直進

***ライン上を走る [#q24d1d56]

  while(ture){
  
          if(SENSOR_3<28){
              GOR;                                      // 濃い黒の時 右折急
          } else if(SENSOR_3<35){
              GORL;                                     // 薄い黒の時 右折緩
          } else if(SENSOR_3<50){
              GOS;                                      // 中間の時 直進
          } else if(SENSOR_3<57){
              GOLL;                                     // 暗い白の時 左折緩 
          } else {
              GOL;                                      // 明るい白の時 左折急
          }
  
               
  }

***交差点 [#a0799a86]

今回は交差点を直進した。

  while(ture){
  
          if(SENSOR_3<28){                  // 濃い黒と判断
              GOR;
          } else if(SENSOR_3<35){           // 薄い黒と判断
              GORL;
          } else if(SENSOR_3<50){           // 中間と判断
              t0=CurrentTick();             // 黒と判断した時以外タイマーをリセット
              GOS;
          } else if(SENSOR_3<57){           // 暗い白と判断
              t0=CurrentTick();             // 黒と判断した時以外タイマーをリセット
              GOLL;
          } else {                          // 明るい白と判断
              t0=CurrentTick();             // 黒と判断した時以外タイマーをリセット
              GOL;
          }
    
          if(CurrentTick()-t0>300){         // 黒が0.3秒続いたら
  
              Off(OUT_BC); 
              Wait(2000);        // 交差点で2秒停止  
              BGOR;             // 元の位置に戻って
              Wait(1300);          
              GO;                           // 直進
              Wait(1500);
          }
     
  }

***全体 [#sea759e8]

  task main ()
  {
  
      SetSensorLight(S3);
      SetSensorLight(S3);                             //光センサーをセット
      int n=0;
      long t1=CurrentTick();
      long t0=CurrentTick();
      long t1=CurrentTick();                          //タイマー1をセット
      long t0=CurrentTick();                          //タイマー0をセット
  
      while(CurrentTick()-t1<9000){                       //走行開始から9秒はライン上を走行
  
          if(SENSOR_3<28){                       
              GOR;
          } else if(SENSOR_3<35){
              GORL;
          } else if(SENSOR_3<50){
              GOS;
          } else if(SENSOR_3<57){
              GOLL;
          } else {
              GOL;
          }
  
                 
        }
  
                      Off(OUT_BC);
                      Wait(2000);             // 三叉路で2秒停止
      
       while(CurrentTick()-t1<13000){                   //  さらに13秒後までライン上を走る 
          if(SENSOR_3<28){                       
              GOR;
          } else if(SENSOR_3<35){
              GORL;
          } else if(SENSOR_3<50){
              GOS;
          } else if(SENSOR_3<57){
              GOLL;
          } else {
              GOL;
          }
  
                 
        }
  
  
                      Off(OUT_BC);                          // ボールをとる
                      OnFwd(OUT_A,10);                      // アームを下す
                      Wait(1500);
                      Off(OUT_A);
                      
       while(CurrentTick()-t1<26000){                       // 再び13秒後から26秒後までは交差点を直進するプログラムを持つプログラムでライン上を走行
  
          if(SENSOR_3<28){ 
              GOR;
          } else if(SENSOR_3<35){
              GORL;
          } else if(SENSOR_3<50){
              t0=CurrentTick();
              GOS;
          } else if(SENSOR_3<57){
              t0=CurrentTick();
              GOLL;
          } else {
              t0=CurrentTick();
              GOL;
          }
  
          if(CurrentTick()-t0>300){                     // 交差点を直進
              
              Off(OUT_BC);
              Wait(2000);         
              BGOR;             
              Wait(1300);          
              GO;                           
              Wait(1500);
          }
     
        }
  
       while(CurrentTick()-t1<32000){                   //  さらに32秒後までライン上を走る 
          if(SENSOR_3<28){                       
              GOR;
          } else if(SENSOR_3<35){
              GORL;
          } else if(SENSOR_3<50){
              GOS;
          } else if(SENSOR_3<57){
              GOLL;
          } else {
              GOL;
          }
  
                 
        }
  
  
                     Off(OUT_BC);                             // シュート
                     OnFwd(OUT_BC,-40);            // 後退
                     Wait(100);
                     OnFwd(OUT_A,-10);             // アームを上げる
                     Wait(1500);
                     Off(OUT_BC);
                     OnFwd(OUT_BC,70);            // 前進
                     Wait(60);      
  
  
  }

*反省・課題・感想 [#eedbfe4b]

**反省・課題 [#l335f1d9]
今回はライントレースするロボットを製作しプログラミングを行った。

今回ライントレースをしボールをゴールまで運んでシュートするロボットは完成した。

しかし改善できるところはたくさんある。例えばもっとなめらかにライントレースを行うために関数などを使うなどしてみたい。

ほかにはもっと早くゴールするようタイムにもこだわりたい。

**感想 [#fe4ddfab]
今回はロボットをしっかり目的に合わせて作成することができ楽しかった。

ただライントレースをすればよいというのもではなく少し難しく感じたが

細かい調整をしてボールがゴールに入ったときはとてもうれしかった。

ぜひ次は関数を使ってみたい。

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