[[2012b/Member]]
プログラムを貼り付ける時は整形済みテキストを使う
詳しく加工丁寧すぎるくらいがいい
写真は小さめで
コマンド convert -geometry サイズ 元のファイル
*ライントレースde空き缶運び [#fc3e4d1d]

*ロボットの紹介 [#n619a93f]
今回のライントレースでは、角やカーブがあり大きなロボットだと不利になると思ったので、できるだけ小さくシンプルなロボットを仕上げました。
~特徴的なのはやはり前面から延びる2本の棒です。棒の間隔をあき缶とほぼ同じ(空き缶を入れて1cm隙間が空くくらい)にして、倒れないようにしました。さらに、棒の先に下に伸びる板を取り付け、安定性をさらに高めました。
~棒の間隔と空き缶の幅が同じだと棒の間に入れ込むときに、ずれて入らないことがあると思うかもしれませんが、空き缶の側面は円形なので、棒が空き缶の側面の外側(棒の間の中心方向を内側とする)にあたるかぎり、必ず空き缶は入るようになっています。

  空き缶→○                  ○                            ○
    棒→| | ⇒  |○| これは入る      | |  これはキツイ        | | これは無理


*コースの攻略法 [#y4d4ac72]
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2013a%2FMission1&openfile=robotics-2013a-mission1.jpg
**時計回り [#h952dd39]
+スタート直後の曲がり角を曲がるためにスタートから�,泙任聾鮑硬世覆靴離薀ぅ鵐肇譟璽垢鬚靴泙后�
+空き缶をつかむまでは速度を落としたライントレースをする。
+それ以降は交差点有りのプログラムに切り替えてライントレースをする。
+空き缶を置くところをちょっとすぎたところで、空き缶を置くためのプログラムを切り替える。
+再びただのライントレース用プログラムに切り替える。

*プログラムの説明 [#e15a1eb1]
 #define off Off(OUT_BC);
 #define TURN_TIME 500 //1/4回転の時間
 #define BLACK 31 //下限
 #define WHITE 62 //上限
 #define go OnFwd(OUT_BC,);
 #define left OnFwd(OUT_B,35);Off(OUT_C);
 #define right OnFwd(OUT_C,35);Off(OUT_B);
 #define THRESHOLD 46
 #define lleft OnFwd(OUT_B,35);OnRev(OUT_C,35); 
 #define rright OnFwd(OUT_C,35);OnRev(OUT_B,35);
  
    
  task main()
 {
   SetSensorLight(S1);
   int n=0;
   long t0 = CurrentTick();
   long t1 = CurrentTick();
   
変数を定義する
      
 while(CurrentTick()-t0 <= 5350)
          {

時間指定でプログラムの切り替えを行う
    
       if (SENSOR_1 < 35){OnFwd(OUT_B,20);Off(OUT_C);}
       else {if(SENSOR_1 < 42){OnFwd(OUT_B,20);OnRev(OUT_C,20); } 
       else if (SENSOR_1 < 50){OnFwd(OUT_BC,20);}
       else {OnFwd(OUT_C,20);Off(OUT_B);}
         
               }
     }
  
速度を早くしすぎると脱線する確率が高くなるので最初だけ速度を遅くしておく
  
   while (true)
   {
           
       while(CurrentTick()-t1 <= 43500)
            {
         while(n<5000)
        {
        if (SENSOR_1 < 35){left;n++; }
        else {if(SENSOR_1 < 42){lleft} 
        else if (SENSOR_1 < 50){go}
        else if (SENSOR_1 < 56){right}
        else {rright}
        n=0;
             }
         }
         Wait(1000);
         rright;
         Wait(5000);
         go
         Wait(200);
         n=0;
            }
 
交差点用プログラム
交差点用プログラム:nが一定値を超えたら交差点と判断する
          
      off
      Wait(500);
      OnFwd(OUT_C,25);OnRev(OUT_B,25);
      Wait(1100);
      off
      Wait(500);
      OnRev(OUT_BC,30);
      Wait(900);
      off
      rright
      Wait(1000);

缶を指定の場所に置くためにプログラム
缶を指定の場所に置くためにプログラム。行動終了時に他のラインに乗り移らないように回転時間や交代距離を調整した。

      while(true)
          {
        if (SENSOR_1 < 35){left}
        else {if(SENSOR_1 < 42){lleft} 
        else if (SENSOR_1 < 50){go}
        else  {right}
             }
          }

缶をおいたあとのライントレース用プログラム
缶をおいたあとのライントレース用プログラム。右回転は必要ないので削除。
   
   }
 }
*まとめ [#yd2e7fd2]

交差点用のnの値がおかしいのか、最後の交差点を渡ることがたまに(1割〜2割くらい)できなかったので、そこが心残りです。他は結構うまくできていたと思います。
~次回の課題の時も、色々と工夫をして安定性に富んだものを作っていきたいです。

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