*ライン・トレースロボット [#dba9122f]
#contents
**チームメンバー及び番号 [#w5548558]
番号:R3
~メンバー
~・梅木
~・桜井
~・藤村
**課題の説明 [#r427d8fc]
今回の課題は、あらかじめ指定されたコース(以下のURL先にコース画像がある)を黒線で書き、その上をロボットに走らせ、ライン上のボールをゴールまで持っていくというものである。ルートはA→B、B→A、C→Aの3通りあり、各チームのメンバー一人ひとりが別々のルートをロボットに走らせる。なお三叉路Pおよび交差点Qでは2秒間停止しなければならない。今回私はAからBのルートを担当した。
(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=attach&refer=2015a%2FMission2&openfile=2015a-mission2.png)
**ロボット [#fb341a2e]
***全体 [#v9ace547]
#ref(./s_IMG_0299.JPG)
完成図
#ref(./s_IMG_0301.JPG)
分解図
~このように簡単に分解でき、簡単に箱にしまうことができ、持ち運びも簡単。ただしその分多少もろくなってしまった。
***アーム [#c1667e61]
#ref(./new_IMG_0301.jpg,100%,アーム)
アームはモータとギアで回す。アームの両方にギアをつけ、片方のアームのギアをモーターで回すことで、もう片方のアームのギアが反対に回り、アームの開閉が行えるようになっている。
***センサー [#k226cf44]
#ref(./s_IMG_0300.JPG,100%,前方)
光センサーは正面向かって左側にある。光センサーは地面ギリギリにすることで色を感知しやすくした。
~少し中心よりも左側につけることで、少しだけ光センサーが振れるようになり、ロボットの動きを細かくできる。
**プログラム [#hb92b51e]
 #define THRESHOLD 42//閾値を42に設定
 #define turn_leftA Off(OUT_A); OnFwd(OUT_C);//左に回転
 #define turn_leftB OnFwd(OUT_C); OnRev(OUT_A); Wait(20);//その場で左に回転
 #define turn_rightA OnFwd(OUT_A); Off(OUT_C);//右に回転
 #define turn_rightB OnFwd(OUT_A); OnRev(OUT_C);//その場で右に回転
 #define go_foward1 OnFwd(OUT_AC); Wait(8);//少し前に進む
 #define go_back1 OnRev(OUT_AC); Wait(10);//少し後ろに進む
 #define go_back2 OnRev(OUT_AC); Wait(100);//後ろに進む
 #define nMAX1 10//三叉路Pを認識するカウンタの回数
 #define nMAX2 50//交差点Qの前で角度調整を行うことを認識するカウンタの回数
 #define nMAX3 10//交差点Qを認識するカウンタの回数
 #define nMAX4 8//直角カーブを認識するカウンタの回数
 #define nMAX5 2//B地点についたことを認識するカウンタの回数
 #define BallCatch 120//三叉路Pからボールをキャッチする場所に行ったことを認識するカウンタの回数
 #define armopen OnFwd(OUT_B); Wait(7);//
 #define armclose OnRev(OUT_B); Wait(7);//
 
 task main(){
     SetSensor(SENSOR_2,SENSOR_LIGHT);
     int nOnline=0;//三叉路Pを認識するカウンタ
     int nOnline1=0;//交差点Qの前で角度調整を行うことを認識するカウンタ
     int nOnline2=0;//交差点Qを認識するカウンタ
     int nOnline3=0;//直角カーブを認識するカウンタ
     int nOnline4=0;//B地点についたことを認識するカウンタ
     int ball=0;//三叉路Pからボールをキャッチする場所に行ったことを認識するカウンタ
     while(nOnline < nMAX1){//三叉路Pまで移動
         if(SENSOR_2 < THRESHOLD){
         turn_leftA;
         nOnline++;
             turn_leftA;
             nOnline++;
         } else {
         turn_rightA;
         nOnline=0;
           }
             turn_rightA;
             nOnline=0;
         }
         Wait(1);
     } 
     Off(OUT_AC);//三叉路Pで2秒間停止
     Wait(200);
     turn_rightB;//進む角度のズレを調整
     Wait(18);
     go_foward1;//進む角度のズレを調整
     nOnline=0; 
     while(ball < BallCatch){//ボールをキャッチするところまで移動
         if (SENSOR_2 < THRESHOLD) {
         turn_leftA;
         ball++;
             turn_leftA;
             ball++;
         } else {
         turn_rightA; 
         ball++;
           }
             turn_rightA; 
             ball++;
         }
         Wait(1);
     }
     Off(OUT_AC);//停止して
     Wait(200);
     armclose;//アームを閉じてボールをキャッチ
     Off(OUT_B);
     while(nOnline1<nMAX2){//ボールをつかんだところから交差点Qの少し前まで移動
         if (SENSOR_2 < THRESHOLD) {
             turn_leftA;
             nOnline1=0;
         } else {
             turn_rightA; 
             nOnline1++;
           }
         }
         Wait(1);
     } 
     go_back1;//交差点Qの直前でロボットの構造上生じたズレを調整
     turn_rightB;
     Wait(20);
     nOnline1=0;
     while(nOnline2<nMAX3){//ズレを修正し終わったところから交差点Qまで移動
         if (SENSOR_2 < THRESHOLD) {
             turn_leftA;
             nOnline2++;
         } else {
             turn_rightA; 
             nOnline2=0;
           }
         }
         Wait(1);
     }
     Off(OUT_AC);//交差点Qで2秒間停止
     Wait(200);
     turn_rightB;//進む角度のズレを調整
     Wait(50);
     go_foward1;
     nOnline2=0;
     while(nOnline3<nMAX4){//交差点Qから直角カーブまで移動
         if (SENSOR_2 < THRESHOLD) {
             turn_leftA;
             nOnline3=0;
         } else {
             turn_rightA;
             nOnline3++; 
           }
         }
         Wait(1);
     }
     turn_rightB;//直角カーブを曲がる
     Wait(90);
     while(nOnline4 < nMAX5){//直角カーブからBまで移動
         if (SENSOR_2 < THRESHOLD) {
             turn_leftA;
             nOnline4=0;
         } else {
             turn_rightA;
             nOnline4++; 
           }
         }
         Wait(1);
     }  
     go_back2;//B地点でゴールの方へ角度を調整
     turn_leftB;
     armopen;//アームを開き、少し後ろに下がったあと少し前に行くことでボールを転がしシュート
     Off(OUT_B);
     go_back2;
     go_foward1;
     Off(OUT_AC);//停止して終了
 }
**工夫点 [#w910cb33]
・タイヤとタイヤの幅をある程度狭くすることで、小回りが利くようにした。
~・光センサーを地面ギリギリに持ってくることで、感知しやすくし、精度を高めた。
~・光センサーを向って正面左側につけることで、ロボットの動きが細かくなるようにした。
**感想と反省 [#y550e953]
・割と時間ギリギリまでかかってしまった。予定が合わなかったり、ロボットの設計をミスしたりして、予定よりも時間がかかってしまったためだと思う。次の最終課題では、メンバーが6人になるので、さらに予定を合わせるのが難しくなる。できるだけ授業中にロボットの構成について話し合い、各自が作るパーツを決め、それぞれのパーツを作り、最後にそれらを組み合わせるという形で作っていきたい。
~・ロボットがもろくなってしまった。走らせる分には問題ないのだが、少しの衝撃で壊れてしまったり、アームの時間調整を間違えると、外れてしまったりすることもあった。今度のロボットはその点を特に工夫したい。
~・アームのギア調整がうまくいかず、小さいギアから大きいギアへ持っていくことができず、時間調節が大変だった。
~・いろいろと大変なことがあったが、最後は何とか完成させられた。大変だったがやはりその分できた時の喜びが大きかった。次回の最終課題では、満足のいくものを完成させたい。

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