''チームメンバー こだま&ふかさわ''

'''もくじ'''

今回の課題について

各チームで作成したコースを1周するロボットを製作せよ。交差点以外のコース上に350mlの空の空き缶を2個以上おき、空き缶にぶつかった時には次のような動作するプログラムを作成せよ。(他のメンバーと重ならないように一人一つのプログラムを作成する)

  1. 空き缶をコース上に戻して再びコースに戻って進む
  2. 空き缶を次の交差点まで運んで行き、その交差点に空き缶を残してさらにコースに沿って進む
  3. 奇数回目に空き缶に遭遇したら、その場で反転して進み、偶数回目に遭遇したら、空き缶を押しのけて進む

ただし、

   * 速さと正確さを追求すること
   * コースを1周したら自動的に止まること
   * 交差点では一時停止すること

作成したロボット

正面から見た写真

20100701195934.jpg

パーツの数をできるだけ、少なくし、軽量化することによって、 スムーズに動くようになっている。

裏から見た写真

20100701200043.jpg

光センサの感覚を狭くすることで、早めに軌道を修正し、より正確にライントレースができるようになっている。

横から見た写真

20100701195949.jpg

棒を長くして、梃の原理で、タッチセンサが反応しやすいようにしました。

上から見た写真

20100701200006.jpg

2輪にすることで、小回りが利くようになり、より正確にコースを走行できるようになっている。

作成したコース

まっすぐな部分がほとんどない少し変わったコースにしてみました。

20100701195844.jpg

工夫した点

ロボットの小回りが利くように、二輪にしました。

早めに軌道修正できるように、光センサの幅を狭くしました。

車軸と光センサとの距離を短くすることにより、ライントレースの微調整が可能になりました。

苦労した点

コース上にまっすぐなところがほとんどなく、交差点に入るときにうまくセンサが反応しなくて、何回も修正しなければ、いけませんでした。

曲がったコースにも対応できるように、光センサ同士の感覚を狭くしすぐに軌道を修正するようにしました。

プログラム

こだまver

#define THRESHOLD 52  //閾値52

task main()
{
    SetSensor(SENSOR_1,SENSOR_LIGHT);  //センサ1は光センサに接続
    SetSensor(SENSOR_2,SENSOR_TOUCH);  //センサ2はタッチセンサに接続
    SetSensor(SENSOR_3,SENSOR_LIGHT);  //センサ3は光センサに接続

      start follow_line;                  //ライントレースを始める
    while ((Timer(0) > 720) && (SENSOR_1<THRESHOLD) && (SENSOR_3<THRESHOLD)){
        ClearTimer(0);
        start follow_line;                //ライントレースを始める

        until (SENSOR_2 == 1);                //センサ2が缶に触れたら
            stop follow_line;                 //ライントレースをやめる
          {Off(OUT_A+OUT_C);
           OnFwd(OUT_A); Wait(600);           //回転する
           OnRev(OUT_A); Wait(600);           //逆に回転する
           Off(OUT_A);start follow_line;}     //再びライントレースを始める
       
           stop follow_line;
           {Off(OUT_A+OUT_C);}
}}

task follow_line()
{ OnFwd(OUT_A+OUT_C);
     while (true){
        if ((SENSOR_1<THRESHOLD) && (SENSOR_3<THRESHOLD))  //センサ1、3が黒線に触れたら
            {Off(OUT_A+OUT_C); Wait(20);                   //モータを一瞬止める
             OnFwd(OUT_A+OUT_C); Wait(100);}               //前進する

        if (SENSOR_1<THRESHOLD)                //センサ1が黒線に触れたら
          {OnRev(OUT_A); Wait(10);OnFwd(OUT_A);}  //モータAを一瞬止める


        if (SENSOR_3<THRESHOLD)                 //センサ3が黒線に触れたら
          {OnRev(OUT_C); Wait(10); OnFwd(OUT_C);}  //モータCを一瞬止める

}}

ふかさわver 

   #define hikari 52  //閾値52
 
 
 task main()
   
 {SetSensor(SENSOR_1,SENSOR_LIGHT); // センサ端子1に接続されたセンサが光センサであると宣言
  SetSensor(SENSOR_2,SENSOR_TOUCH); // センサ端子2に接続されたセンサがタッチセンサであると宣言
  SetSensor(SENSOR_3,SENSOR_LIGHT); // センサ端子3に接続されたセンサが光センサであると宣言

   ClearTimer(0);
     while (true) 
     {  
      
        if(Timer(0) < 200);{start follow_line;}     // ライントレースを開始
        until ((Timer(0) > 300) && (Timer(0) < 400) && (SENSOR_1 < hikari) && (SENSOR_3 < hikari)); //ここから
        {stop follow_line;      // 一旦 follow_line のタスクを停止
        Off(OUT_A+OUT_C);Wait(30);
         OnRev(OUT_A+OUT_C);Wait(70);OnFwd(OUT_A);Wait(70);OnFwd(OUT_C);Wait(80);Off(OUT_A);Wait(150);
         OnFwd(OUT_A);Wait(80);Off(OUT_A);Wait(70);OnFwd(OUT_A);Wait(80);start follow_line;}//ここまでが缶を避ける動作
  
        until ((Timer(0) > 500) && (SENSOR_1 < hikari) && (SENSOR_3 < hikari)); 
        {stop follow_line;      // 一旦 follow_line のタスクを停止
          Off(OUT_A+OUT_C);}//完全停止
         
     }
  
   task follow_line()
    {    OnFwd(OUT_A+OUT_C) ; 
         while (true) {
        
         if ((SENSOR_1 < hikari) && (SENSOR_3 < hikari))
         {Off(OUT_A+OUT_C);Wait(20);OnFwd(OUT_A+OUT_C);Wait(100);}//交差点を横断
   
         if (SENSOR_1 < hikari)
         {OnRev(OUT_A) ;Wait(10);OnFwd(OUT_A);}//ライントレースの左へ曲がる動作
 
         if (SENSOR_3 < hikari)
         {OnRev(OUT_C) ;Wait(10);OnFwd(OUT_C);}//ライントレースの右へ曲がる動作
                          }
     }
 }

プログラムについて

最初の200は大きい数時ならば何でもよかったので後に出てくる300と400の流れから200にしただけで、得に意味ありません。また、300から400の間と指定したのは大体いつも350くらいで交差点を通過するのでそうしました。500は530くらいで一周終わるので500を使いました。

今回の感想

こだま

前回やった似顔絵のプログラムと比べて、今回の課題はとても大変だった。

時間が足りなくて大変だったけれど、ちゃんと動いた時は、うれしかった。

ふかさわ

シンプルイズザベストということで、缶を挟むアームを作らないでロボットを作成してみた。

缶を認識するタッチセンサが反応しにくく、改良が大変だった。

コメントに対して

タッチセンサの改良はてこの原理で少しの力でセンサが反応するようにしました。 今回のロボットはシンプルで、改良したくてもなかなかできませんでした。 強度の事も考えると後付のパーツはとれやすく、ほぼ最初から組み直すことになってしまいました。 文量についてですが、タッチセンサの問題ぐらいしかなく、簡単に出来すぎて書くことがありませんでした。 プログラムもこうすればいいかなっていう考えをそのまま書いたら二人共できてしまいました。

コメントに対して2

速さは、コースに直線が全くないのである程度ゆっくりにしました。ゆっくりでない場合、コースから外れてしまうことがあったからです。また、左右の動力輪をはなして、ライントレースの際に右や左に進ませる速度を遅くすることができました。これにより、より確実なライントレースを実現しました。また、ほかのチームと違い、缶を挟む機構を作らなかったのである程度ゆっくりでないと缶が倒れてしまい、課題が達成できませんでした。缶を運ぶという面での安定性は低かったと思います。今回一番ほかの班より苦労したのはライントレースだと思います。コースを最初に作ったのですが、グネグネと曲がった複雑なコースにしてしまったためライントレースが難しくなってしまいました。また、交差点前に急なカーブがあるため、その交差点の通過成功確率も低くなてしまいましたが、コースに微調整を加えて何とか解決できました。

コメント

コメントお願いします。

  • 改良前と後の違い、苦労した点への改善策をあげてみてください。簡潔ですが、文量が少ないと思います -- TAKA? 2010-07-09 (金) 17:19:59
  • 「レポートについて」のページにもありますが、書くことがないのならば、速さや安定性、他チームとの違いについて触れると良いと思います -- TAKA? 2010-07-23 (金) 17:32:34
  • ポイントは抑えていますが、ロボットなど全体的にもう少し詳しく説明しましょう。プログラムに関しては以下の通りです。一人目は、コピペミスか真ん中あたりに重複があります。またwhile(true)としているので、最後にOff(OUT_A+OUT_C);Wait(9000);としてもまた1行目から繰り返されるのではないでしょうか?mainの20行目の条件を最初のwhileの()に入れるとすっきりすると思います。2人目に関してはTimerを使っていますが、200や300等という数字に説明がないと、意味がわかりにくいかもしれません -- FI? 2010-07-29 (木) 10:13:59
  • もうロボットは壊してしまっているので、説明やプログラムの方を充実させてください。ロボットの写真をはるだけではなく、説明を少しは入れましょう。二人目のプログラムに関しては、(1)テンプレをそのまま使うのではなく、while(true)でよいのか、if(Timer(0) < 200)は必要なのかを考えてみてください(2)缶をよける動作が始まる条件が、どうして光センサと時間なのでしょうか?缶は交差点でないところに置かれているはずですし。そもそも、タッチセンサは設定されていますが、その後一切出てこないのはなぜでしょうか? -- FI? 2010-08-06 (金) 12:51:00


添付ファイル: file20100701200043.jpg 169件 [詳細] file20100701200006.jpg 159件 [詳細] file20100701195949.jpg 164件 [詳細] file20100701195934.jpg 167件 [詳細] file20100701195844.jpg 164件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-08-17 (火) 22:24:55 (3234d)