2015a/Member/riesteria/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ライン・トレースロボット [#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++;
} 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);//停止して終了
}
**工夫点 [#w910cb33]
・タイヤとタイヤの幅をある程度狭くすることで、小回りが利くようにした。
~・光センサーを地面ギリギリに持ってくることで、感知しやすくし、精度を高めた。
~・光センサーを向って正面左側につけることで、ロボットの動きが細かくなるようにした。
**感想と反省 [#y550e953]
・割と時間ギリギリまでかかってしまった。予定が合わなかったり、ロボットの設計をミスしたりして、予定よりも時間がかかってしまったためだと思う。次の最終課題では、メンバーが6人になるので、さらに予定を合わせるのが難しくなる。できるだけ授業中にロボットの構成について話し合い、各自が作るパーツを決め、それぞれのパーツを作り、最後にそれらを組み合わせるという形で作っていきたい。
~・ロボットがもろくなってしまった。走らせる分には問題ないのだが、少しの衝撃で壊れてしまったり、アームの時間調整を間違えると、外れてしまったりすることもあった。今度のロボットはその点を特に工夫したい。
~・アームのギア調整がうまくいかず、小さいギアから大きいギアへ持っていくことができず、時間調節が大変だった。
~・いろいろと大変なことがあったが、最後は何とか完成させられた。大変だったがやはりその分できた時の喜びが大きかった。次回の最終課題では、満足のいくものを完成させたい。
終了行:
*ライン・トレースロボット [#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++;
} 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);//停止して終了
}
**工夫点 [#w910cb33]
・タイヤとタイヤの幅をある程度狭くすることで、小回りが利くようにした。
~・光センサーを地面ギリギリに持ってくることで、感知しやすくし、精度を高めた。
~・光センサーを向って正面左側につけることで、ロボットの動きが細かくなるようにした。
**感想と反省 [#y550e953]
・割と時間ギリギリまでかかってしまった。予定が合わなかったり、ロボットの設計をミスしたりして、予定よりも時間がかかってしまったためだと思う。次の最終課題では、メンバーが6人になるので、さらに予定を合わせるのが難しくなる。できるだけ授業中にロボットの構成について話し合い、各自が作るパーツを決め、それぞれのパーツを作り、最後にそれらを組み合わせるという形で作っていきたい。
~・ロボットがもろくなってしまった。走らせる分には問題ないのだが、少しの衝撃で壊れてしまったり、アームの時間調整を間違えると、外れてしまったりすることもあった。今度のロボットはその点を特に工夫したい。
~・アームのギア調整がうまくいかず、小さいギアから大きいギアへ持っていくことができず、時間調節が大変だった。
~・いろいろと大変なことがあったが、最後は何とか完成させられた。大変だったがやはりその分できた時の喜びが大きかった。次回の最終課題では、満足のいくものを完成させたい。
ページ名: