番号:R3
メンバー
・梅木
・桜井
・藤村
今回の課題は、あらかじめ指定されたコース(以下の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)
完成図
分解図
このように簡単に分解でき、簡単に箱にしまうことができ、持ち運びも簡単。ただしその分多少もろくなってしまった。
アームはモータとギアで回す。アームの両方にギアをつけ、片方のアームのギアをモーターで回すことで、もう片方のアームのギアが反対に回り、アームの開閉が行えるようになっている。
光センサーは正面向かって左側にある。光センサーは地面ギリギリにすることで色を感知しやすくした。
少し中心よりも左側につけることで、少しだけ光センサーが振れるようになり、ロボットの動きを細かくできる。
#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++; } else { 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++; } else { 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);//停止して終了 }
・タイヤとタイヤの幅をある程度狭くすることで、小回りが利くようにした。
・光センサーを地面ギリギリに持ってくることで、感知しやすくし、精度を高めた。
・光センサーを向って正面左側につけることで、ロボットの動きが細かくなるようにした。
・割と時間ギリギリまでかかってしまった。予定が合わなかったり、ロボットの設計をミスしたりして、予定よりも時間がかかってしまったためだと思う。次の最終課題では、メンバーが6人になるので、さらに予定を合わせるのが難しくなる。できるだけ授業中にロボットの構成について話し合い、各自が作るパーツを決め、それぞれのパーツを作り、最後にそれらを組み合わせるという形で作っていきたい。
・ロボットがもろくなってしまった。走らせる分には問題ないのだが、少しの衝撃で壊れてしまったり、アームの時間調整を間違えると、外れてしまったりすることもあった。今度のロボットはその点を特に工夫したい。
・アームのギア調整がうまくいかず、小さいギアから大きいギアへ持っていくことができず、時間調節が大変だった。
・いろいろと大変なことがあったが、最後は何とか完成させられた。大変だったがやはりその分できた時の喜びが大きかった。次回の最終課題では、満足のいくものを完成させたい。