[[2007b/A2]]

*ライントレースロボット [#sa9c239c]
#ref(PA0_0050.JPG,around,wrap) 
#contents



~
~
~
*課題2の説明 [#f829c0f6]
詳しい課題の内容は
[[こちら:http://yakushi.shinshu-u.ac.jp/robotics/?2007b%2F%CE%FD%BD%AC%CC%E4%C2%EA#content_1_1]]から

課題2のポイントとしては、~
#ref(ポイント.jpg,around,wrap)
1)ラインをたどる点~
2)ラインが交差する地点~
3)ぶつかった時の対応~
4)スピードの追求~
の4点です。
           の4点です。
~
~
~
~
~
~
*ロボットの構造 [#u7248080]
**最初に制作したロボットの特徴 [#g1f53de3]
1)三輪にした。~
理由…4輪駆動と比較して小回りが可能。なぜなら、4輪駆動は旋回するときに前後のタイヤがそれぞれの回転軌道で回ろうとするので、お互いに動きの邪魔をして、結果として無理矢理回転しようとしているので、ストレスがかかっているので、3輪駆動にすることで、無駄な力がかからずスムーズな旋回ができる。~
2)タイヤの幅を狭くした。~
理由…タイヤの幅の間隔が狭い方が、小回りすることが可能だから。~
3)前輪にキャスターを使った。~
理由…空転するキャスターは後輪駆動の動きを邪魔しないので光センサーが感知した動きを的確に伝えることができる。~
4)光センサーを前輪のすぐ後方に設置した。~
理由…光センサーが感知したラインをトレースするのに前輪のすぐ後ろにあった方が良いと考えた。~
5)光センサーを地面にできるだけ近くした。~
理由…その方がセンサーの感度が良さそうだと考えたから。~
6)タッチセンサーを2つ使用した。~
理由…タッチセンサーを2つ使用した方が、広い範囲の衝突に対応できるから。
**最初のロボットの問題点 [#z8fa5aec]
1)急なカーブが曲がりきれない~
理由…光センサーとタイヤの距離が広かったため、センサーが感知したラインの情報とタイヤがある位置のラインに形状の差が出たので、直線や緩いカーブの時は問題ないが、急なカーブのときには的確な動きがとれなくなり


**改良したロボットの特徴 [#j2f2a31d]
1)前輪駆動にした。~
理由…光センサーとの距離が狭まりラインを的確におえるようになった。~
2)キャスターを後ろに持ってきた。~
理由…キャスターがついてくるだけなのでスムーズにカーブを回れるようになった。~
3)バンパーに高さを持たせた。~
理由…衝突の幅が増え衝突が上手く行えるようになった。~

*プログラムについて [#n054c279]
// kadai2 program //
 
 #define THRESHOLD 40 //閾値:黒と白を判断するための値、
                 暫定的に40と設定しておいたが、
                               特に問題なかったのでそのまま使用
 
 task main ()
 {
     SetSensor(SENSOR_1, SENSOR_LIGHT); //センサー端子1に接続されたセンサーが
                                           光センサーであると宣言してやる必要がある
     SetSensor(SENSOR_2, SENSOR_TOUCH); //センサー端子2に接続されたセンサーは
                                           タッチセンサーであると宣言
     SetSensor(SENSOR_3, SENSOR_LIGHT); //センサー端子3に接続されたセンサーが
                                           光センサーであると宣言
 
 while(true){                 //trueがwhileの中に入っているため
                                           常に条件が成り立っている
                                           すなわち無限ループになっている
 while (SENSOR_2==0){                    //センサー2が反応していないとき
                                           すなわち、タッチセンサーに何も触れて
                                           いないとき、以下の動作を繰り返す
 
       if((SENSOR_1 > THRESHOLD) && (SENSOR_3 > THRESHOLD))
                                         //もし、左右の光センサーが閾値より
                                           大きい値を示している、
                                           すなわち白い部分にいるならば…
           {   OnFwd(OUT_A+OUT_C);    //左右のタイヤを正回転させる
           }
       if(SENSOR_3 < THRESHOLD)          //もし、センサー3が閾値より小さい値を
                                           示しているならば、すなわち
                                           右の光センサーが黒いラインに触たら
           { OnFwd(OUT_A);               //左のタイヤを正回転
             OnRev(OUT_C);         右のタイヤを逆回転させる
           }                すなわちロボットは時計回りをし、
                                           右センサーが黒いラインから離れるように動く
       if(SENSOR_1 < THRESHOLD)
           { OnFwd(OUT_C);
             OnRev(OUT_A);
           }
       if((SENSOR_1 < THRESHOLD) && (SENSOR_3 < THRESHOLD))
           {   Off(OUT_A+OUT_C)  ;
                Wait(50);
               OnFwd(OUT_A+OUT_C) ;
               Wait(70);
           }
     }   
 
   while(SENSOR_2==1) {
    Rev(OUT_A+OUT_C);
    Wait(30);
    OnFwd(OUT_C);OnRev(OUT_A);
    Wait(255);
    Off(OUT_A+OUT_C);
  }
  }
 }
*感想 [#c5075f94]
最も苦労した点は、やはり上手くラインをトレースできるかという点であった。そのためにプログラミングに技巧を凝らし、ロボットの製作にも苦労を費やした。3輪の前輪駆動にしたことで小回りがきき、カーブもスムーズに進むことができるようになった。次に苦労した点は、ロボット同士の衝突するところである。最初は、ロボット同士のバンパーの高さがあわずに正面衝突した時に上手くいかなかった。でも、バンパーに高さを持たせることで幾分ましとなった。ロボットが他のロボットの側面に衝突する場合にも同様の理由でスムーズに行うことができるようになった。コースを少し複雑にしてしまったために衝突の可能性が高くなってしまったのが難点んだが、本番では練習の時よりも上手くできたと思う。反省点は、プログラミングやロボットの製作に時間がかかり過ぎてしまったことだろう。次の課題は効率良く質の高いものを製作したい。


***コメントをお願いします。 [#j054655f]
#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS