2013a/Member/free/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*メンバー紹介 [#f73dc71c]
-花岡佳太 工学部機械システム工学科
-市川大騎 繊維学部機械ロボット学系
*課題 [#icc3e4e6]
[目標]
-ライントレースをしてゴールを目指す。
-コースの途中にある空き缶を掴み目標の位置に運ぶ。
-コースは下図である
[図]
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=...
*ロボット紹介 [#of9c4bdd]
-基本は元々のロボットのままで、アーム部分を取り付けたのみ...
-極力使うパーツを減らして、ライントレースの際の光センサー...
-歯車を利用してモーターの回転方法を変更しました。最初はモ...
&ref(2013a/Member/free/Mission1/3.JPG,480×640,写真1);
-アーム部分は缶に合うように設計したが、ライントレースの最...
&ref(2013a/Member/free/Mission1/2.JPG,640×480,写真2);
*プログラムの概要(反時計周り) [#v9ba94d7]
?スタートから7.5秒後、アームを閉じて缶を掴む。
?そのままライントレースを行い、26秒後トレースする位置の変更
?36秒後再び位置の変更
?もし55秒後以降に交差点にぶつかった場合、向きを180度回転...
?ライントレースによりゴールへ向かう。
*プログラム [#t51bb992]
#define white1 39
#define white2 45
#define black1 60
#define black2 65
#define go_forward OnFwd(OUT_BC,40) //前進
#define turn_left2 OnFwd(OUT_C,40);Off(OUT_B) //左折
#define turn_left1 OnFwd(OUT_C,40);OnRev(OUT_B,30) //急...
#define turn_right2 OnFwd(OUT_B,40);Off(OUT_C) //右折
#define turn_right1 OnFwd(OUT_B,40);OnRev(OUT_C,20) //...
#define STEP 1
#define nMAX 180
#define short_break Off(OUT_BC);Wait(1000);
task main ()
{
SetSensorLight(S3);
int nOnline=0;
long t0 = CurrentTick();
int n=0;
while (CurrentTick()-t0 <= 7500) { /スタートから7.5...
if (SENSOR_3 < white1) {
turn_left1;
} else if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
Wait(STEP);
}
OnFwd(OUT_A,50);Wait(800);Off(OUT_A); / 7.5秒に...
while (CurrentTick()-t0 <= 26000) { / スタートから...
while(nOnline < nMAX && CurrentTick()-t0 <= 26000...
if (SENSOR_3 < white1) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
turn_right2;Wait(nMAX*STEP);
OnFwd(OUT_BC,30);Wait(200); / 0.2秒だけ前進する事...
nOnline=0; / カウンターのリセット
}turn_right1;Wait(100);
&ref(2013a/Member/free/Mission1/6.jpg,819×460,写真3);
(※)について
上の図は黄色の線がロボットの軌跡である。
上のプログラムでは赤い丸で囲まれた辺りに来た時に斜めに前...
線の右側を通っていたロボットを線の左側に移動させる。
そうする事で交差点を渡る際に鋭角な交差点を通る事ができる。
また、赤丸が2つあるのは、この後のプログラムにもこの動作...
その箇所を(※2)とする
while (CurrentTick()-t0 <= 36000) { / スタートから36...
while(nOnline < nMAX && CurrentTick()-t0 <= 36000...
if (SENSOR_3 < white1) {
turn_right1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_right2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_left2;
} else {
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
turn_left2;Wait(nMAX*STEP);
OnFwd(OUT_BC,30);Wait(200); /前進させることによりト...
nOnline=0;
}turn_left1;Wait(200);
while (n<2) {
while(nOnline < nMAX && n<2) { /もし2回目の交差...
if (SENSOR_3 < white1) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
turn_right2;Wait(nMAX*STEP);
OnRev(OUT_BC,30);Wait(200); /後ろに下がる
nOnline=0;n++;
}
OnRev(OUT_BC,50);Wait(500);OnFwd(OUT_C,50);OnRev(OUT_...
OnFwd(OUT_C,50);OnRev(OUT_B,50);until(SENSOR_3 < 50);...
long t1 = CurrentTick(); / ㊟ここからt0からt1...
while (CurrentTick()-t1 <= 1800) {
if (SENSOR_3 < white1) {
turn_right1;
} else if (SENSOR_3 < white2) {
turn_right2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_left2;
} else {
turn_left1;
}
Wait(STEP);
}
turn_left1;Wait(270);Off(OUT_BC);OnRev(OUT_A,50);Wait...
OnRev(OUT_BC,50);Wait(600);OnFwd(OUT_B,50);OnRev(OUT_...
OnFwd(OUT_B,50);OnRev(OUT_C,50);until(SENSOR_3 < 50);
long t2 = CurrentTick(); / 上の3行のプログラムに...
/ ㊟ここからはt1か...
while (CurrentTick()-t2 <= 3900) {
if (SENSOR_3 < white1)
{
turn_left1;
} else if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
Wait(STEP);
}
Off(OUT_BC); /ゴールしたためプログラムの終了
}
*感想 [#o11c00ca]
・今回の課題を通じて、最初は上手くライントレースしなかっ...
・発表の際には、今まで上手くいっていたのに、本番では急に...
・交差点での失敗が多かったため、もう少し改良すべきであっ...
終了行:
*メンバー紹介 [#f73dc71c]
-花岡佳太 工学部機械システム工学科
-市川大騎 繊維学部機械ロボット学系
*課題 [#icc3e4e6]
[目標]
-ライントレースをしてゴールを目指す。
-コースの途中にある空き缶を掴み目標の位置に運ぶ。
-コースは下図である
[図]
http://yakushi.shinshu-u.ac.jp/robotics/?plugin=ref&page=...
*ロボット紹介 [#of9c4bdd]
-基本は元々のロボットのままで、アーム部分を取り付けたのみ...
-極力使うパーツを減らして、ライントレースの際の光センサー...
-歯車を利用してモーターの回転方法を変更しました。最初はモ...
&ref(2013a/Member/free/Mission1/3.JPG,480×640,写真1);
-アーム部分は缶に合うように設計したが、ライントレースの最...
&ref(2013a/Member/free/Mission1/2.JPG,640×480,写真2);
*プログラムの概要(反時計周り) [#v9ba94d7]
?スタートから7.5秒後、アームを閉じて缶を掴む。
?そのままライントレースを行い、26秒後トレースする位置の変更
?36秒後再び位置の変更
?もし55秒後以降に交差点にぶつかった場合、向きを180度回転...
?ライントレースによりゴールへ向かう。
*プログラム [#t51bb992]
#define white1 39
#define white2 45
#define black1 60
#define black2 65
#define go_forward OnFwd(OUT_BC,40) //前進
#define turn_left2 OnFwd(OUT_C,40);Off(OUT_B) //左折
#define turn_left1 OnFwd(OUT_C,40);OnRev(OUT_B,30) //急...
#define turn_right2 OnFwd(OUT_B,40);Off(OUT_C) //右折
#define turn_right1 OnFwd(OUT_B,40);OnRev(OUT_C,20) //...
#define STEP 1
#define nMAX 180
#define short_break Off(OUT_BC);Wait(1000);
task main ()
{
SetSensorLight(S3);
int nOnline=0;
long t0 = CurrentTick();
int n=0;
while (CurrentTick()-t0 <= 7500) { /スタートから7.5...
if (SENSOR_3 < white1) {
turn_left1;
} else if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
Wait(STEP);
}
OnFwd(OUT_A,50);Wait(800);Off(OUT_A); / 7.5秒に...
while (CurrentTick()-t0 <= 26000) { / スタートから...
while(nOnline < nMAX && CurrentTick()-t0 <= 26000...
if (SENSOR_3 < white1) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
turn_right2;Wait(nMAX*STEP);
OnFwd(OUT_BC,30);Wait(200); / 0.2秒だけ前進する事...
nOnline=0; / カウンターのリセット
}turn_right1;Wait(100);
&ref(2013a/Member/free/Mission1/6.jpg,819×460,写真3);
(※)について
上の図は黄色の線がロボットの軌跡である。
上のプログラムでは赤い丸で囲まれた辺りに来た時に斜めに前...
線の右側を通っていたロボットを線の左側に移動させる。
そうする事で交差点を渡る際に鋭角な交差点を通る事ができる。
また、赤丸が2つあるのは、この後のプログラムにもこの動作...
その箇所を(※2)とする
while (CurrentTick()-t0 <= 36000) { / スタートから36...
while(nOnline < nMAX && CurrentTick()-t0 <= 36000...
if (SENSOR_3 < white1) {
turn_right1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_right2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_left2;
} else {
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
turn_left2;Wait(nMAX*STEP);
OnFwd(OUT_BC,30);Wait(200); /前進させることによりト...
nOnline=0;
}turn_left1;Wait(200);
while (n<2) {
while(nOnline < nMAX && n<2) { /もし2回目の交差...
if (SENSOR_3 < white1) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
turn_right2;Wait(nMAX*STEP);
OnRev(OUT_BC,30);Wait(200); /後ろに下がる
nOnline=0;n++;
}
OnRev(OUT_BC,50);Wait(500);OnFwd(OUT_C,50);OnRev(OUT_...
OnFwd(OUT_C,50);OnRev(OUT_B,50);until(SENSOR_3 < 50);...
long t1 = CurrentTick(); / ㊟ここからt0からt1...
while (CurrentTick()-t1 <= 1800) {
if (SENSOR_3 < white1) {
turn_right1;
} else if (SENSOR_3 < white2) {
turn_right2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_left2;
} else {
turn_left1;
}
Wait(STEP);
}
turn_left1;Wait(270);Off(OUT_BC);OnRev(OUT_A,50);Wait...
OnRev(OUT_BC,50);Wait(600);OnFwd(OUT_B,50);OnRev(OUT_...
OnFwd(OUT_B,50);OnRev(OUT_C,50);until(SENSOR_3 < 50);
long t2 = CurrentTick(); / 上の3行のプログラムに...
/ ㊟ここからはt1か...
while (CurrentTick()-t2 <= 3900) {
if (SENSOR_3 < white1)
{
turn_left1;
} else if (SENSOR_3 < white2) {
turn_left2;
} else if (SENSOR_3 < black1) {
go_forward;
} else if (SENSOR_3 < black2) {
turn_right2;
} else {
turn_right1;
}
Wait(STEP);
}
Off(OUT_BC); /ゴールしたためプログラムの終了
}
*感想 [#o11c00ca]
・今回の課題を通じて、最初は上手くライントレースしなかっ...
・発表の際には、今まで上手くいっていたのに、本番では急に...
・交差点での失敗が多かったため、もう少し改良すべきであっ...
ページ名: