2014a/Member/suiden/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
* メンバー [#ibb85475]
suiden : 主に機体を担当~
kiyomizu : 主にアーム全体を担当~
kowhich: 主にプログラムを担当~
ryu-abe: 主に数値計測を担当~
* 課題の内容 [#w222b816]
左半分に設置されたA,B,Cの紙コップを、ロボットを右上の...
ただし、A,B,Cの紙コップは、さいころを振り、その結果に...
&ref(robo mission2.png);
** ルール [#gcb7688d]
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図の右上のスタートエリアからスタートする(課題1と同じ)。...
-右半分の紙コップは10cm内の移動は認める
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
** 細かいルール [#q561b39a]
紙コップの置き方や得点の計算方法などの細かいルールは http...
* ロボットの紹介 [#qd0e48a4]
** ロボットの外観 [#e9cd888b]
&ref(robo1.jpg);~
最初に組み立てた機体は、本体を最後に取り付けようとしたが...
そのため、本体を下部に取り付けられるように、一から足回り...
** 光センサー ・ アーム ・ バンパー [#l1d78243]
&ref(robo5.jpg);~
光センサーは、ライントレース用と紙コップの識別用に2つを...
アームは、紙コップを確実に取るために、滑り止めとして摩擦...
バンパーは、紙コップをより確実に取ることができるように取...
そのため、あまり成功率の上昇には影響しなかった。
** 紙コップの取り方 ・ 重ね方[#t5345db0]
&ref(robo2.jpg);
&ref(robo3.jpg);
&ref(robo4.jpg);~
モーターが回転することにより、歯車が連動していき、アーム...
さらに、モーターが回転すると、歯車の連動が止まり、アーム...
紙コップを重ねるときは、モーターを逆回転させる。
* プログラムの内容 [#t4cb2c52]
&ref(robo mission.jpg);~
紙コップを識別するプログラムを組めなかったので、上図のよ...
このプログラムでは、上図におけるAを1、Bを2、Cを3に...
※本番ではA,B,Cはランダムに設置されるため、高得点を狙う...
** 定義 [#g2e707e7]
#define THRESHOLD 50
#define turn_left0 OnFwd(OUT_B,30);
#define turn_left1 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);
#define turn_right0 OnFwd(OUT_C,30);
#define turn_right1 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);
#define STEP 1
#define nMAX 250
#define short_break Off(OUT_BC);Wait(1000);
#define cross_line;OnFwd(OUT_BC,40);Wait(300);short_brea...
** サブルーチン [#r87f74a8]
sub catch()
{
OnFwd(OUT_A,-20);Wait(1000);
OnFwd(OUT_A,-50);Wait(400);
Off(OUT_A);
}
sub release()
{
OnFwd(OUT_A,20);Wait(1000);
OnFwd(OUT_A,50);Wait(100);
Off(OUT_A);
}
紙コップを取るプログラムと、重ねるプログラムをサブルーチ...
** Part1 [#o91ad579]
task main()
{
SetSensorLight(S2);
SetSensorLight(S3);
int nOnline = 0;
int nPoint = 0;
OnFwdSync(OUT_BC,60,0);Wait(2000);Off(OUT_BC);
OnFwdSync(OUT_BC,75,-100);Wait(450);Off(OUT_BC);Wait...
OnFwdSync(OUT_BC,60,0);Wait(1200);Off(OUT_BC);
catch();
OnFwdSync(OUT_BC,60,0);Wait(700);
OnFwdSync(OUT_BC,60,-100);Wait(500);Off(OUT_BC);Wait...
スタート地点から出発し、直進 → 旋回 → 直進 → 紙コップを取...
** Part2 [#b4ae5e03]
long t0 = CurrentTick();
while (CurrentTick() - t0 < 3000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_B,40);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
3秒間、白い部分の上では左折し、黒い部分の上では静止する。
** Part3 [#ga188815]
while (nPoint <= 1) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_right1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_right0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_left0;
} else {
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part4 [#y7bb456e]
while (nPoint == 2) {
OnFwdSync(OUT_BC,30,0);Wait(1500);Off(OUT_BC);Wait(...
OnFwdSync(OUT_BC,-30,0);Wait(500);Off(OUT_BC);
release();
OnFwd(OUT_C,-30);Wait(200);
OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
catch();
OnFwdSync(OUT_BC,75,-100);Wait(900);Off(OUT_BC);
nPoint++;
}
交差点を渡った後、前進 → 後退 → 紙コップを重ねる → 旋回 →...
** Part5 [#s021d185]
long t1 = CurrentTick();
while (CurrentTick() - t1 < 3000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_C,40);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
3秒間、白い部分の上では右折し、黒い部分の上では静止する。
** Part6 [#f2e0d9b2]
while (nPoint <= 6) {
while (nOnline < nMAX + 50){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part7 [#q86e5235]
while (nPoint == 7) {
OnFwdSync(OUT_BC,75,100);Wait(300);Off(OUT_BC);Wait...
OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
OnFwdSync(OUT_BC,75,100);Wait(200);Off(OUT_BC);Wait...
release();
OnFwdSync(OUT_BC,60,0);Wait(1000);Off(OUT_BC);Wait(...
catch();
OnFwdSync(OUT_BC,60,0);Wait(500);Off(OUT_BC);Wait(1...
nPoint++;
}
交差点を渡った後、旋回 → 後退 → 旋回 → アームを開く → 前...
** Part8 [#oa27304a]
long t2 = CurrentTick();
while (CurrentTick() - t2 < 5000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_B,-20);OnFwd(OUT_C,50);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
5秒間、白い部分の上では右折し、黒い部分の上では静止する。
** Part9 [#raa5b6d5]
while (nPoint == 8) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP + 600);
cross_line;
OnFwd(OUT_BC,30);Wait(200);
nPoint++;
nOnline=0;
}
ラインの左側をトレースし、交差点があれば渡る。
** Part10 [#k25c65bf]
long t3 = CurrentTick();
while (CurrentTick() - t3 < 18000) {
if (SENSOR_3 < THRESHOLD -10) {
turn_right1;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_right0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwd(OUT_BC,30);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_left0;
} else {
turn_left1;
}
Wait(STEP);
}
}
OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait...
18秒間、ラインの左側をトレースする。その後、旋回する。
** Part11 [#sa23a666]
while (nPoint == 9) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part12 [#f5cf206b]
while (nPoint == 10) {
OnFwdSync(OUT_BC,30,0);Wait(800);Off(OUT_BC);Wait(1...
OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(...
release();
nPoint++;
}
交差点を渡った後、前進 → 後退 → 紙コップを重ねる の順で動...
** Part13 [#w37593ae]
while (nPoint == 11) {
OnFwdSync(OUT_BC,-60,0);Wait(1200);Off(OUT_BC);
OnFwdSync(OUT_BC,75,-100);Wait(500);Off(OUT_BC);Wai...
OnFwdSync(OUT_BC,60,0);Wait(1800);Off(OUT_BC);
catch();
nPoint++;
}
紙コップを重ねた後、後退 → 旋回 → 前進 → 紙コップを取る ...
** Part14 [#u6f59499]
while (nPoint == 12) {
OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wa...
OnFwdSync(OUT_BC,60,0);Wait(2500);Off(OUT_BC);
OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(...
release();
nPoint++;
}
}
紙コップを取った後、旋回 → 前進 → 後退 → 紙コップを重ねる...
** 実際のプログラム [#e092ea9a]
説明しやすくするためにPartごとに区切って説明したが、実際...
また、次のことに注意が必要である。
+ 電池残量が100%のときを想定してプログラムを組んだため、...
+ しきい値が日や時間によって変わることがあるため、しきい...
* 感想・反省 [#yb026e37]
ロボットの機体は、1回失敗したものの、最終的には安定感の...
プログラムは、時間不足や実力不足で、紙コップを識別するプ...
今回は全体的に時間が足りず、すべてにおいて中途半端な出来...
今回で終わりなので次回はないが、これからは「早く正確に」...
終了行:
目次
#contents
* メンバー [#ibb85475]
suiden : 主に機体を担当~
kiyomizu : 主にアーム全体を担当~
kowhich: 主にプログラムを担当~
ryu-abe: 主に数値計測を担当~
* 課題の内容 [#w222b816]
左半分に設置されたA,B,Cの紙コップを、ロボットを右上の...
ただし、A,B,Cの紙コップは、さいころを振り、その結果に...
&ref(robo mission2.png);
** ルール [#gcb7688d]
-競技時間は審判が続行不能と判断するまで、あるいはリタイア...
-図の右上のスタートエリアからスタートする(課題1と同じ)。...
-右半分の紙コップは10cm内の移動は認める
-開始の合図から5秒以内にスタートボタンを押す作業を完了す...
-競技が終了するまで、ロボットに触ったり人間が遠隔で操作し...
** 細かいルール [#q561b39a]
紙コップの置き方や得点の計算方法などの細かいルールは http...
* ロボットの紹介 [#qd0e48a4]
** ロボットの外観 [#e9cd888b]
&ref(robo1.jpg);~
最初に組み立てた機体は、本体を最後に取り付けようとしたが...
そのため、本体を下部に取り付けられるように、一から足回り...
** 光センサー ・ アーム ・ バンパー [#l1d78243]
&ref(robo5.jpg);~
光センサーは、ライントレース用と紙コップの識別用に2つを...
アームは、紙コップを確実に取るために、滑り止めとして摩擦...
バンパーは、紙コップをより確実に取ることができるように取...
そのため、あまり成功率の上昇には影響しなかった。
** 紙コップの取り方 ・ 重ね方[#t5345db0]
&ref(robo2.jpg);
&ref(robo3.jpg);
&ref(robo4.jpg);~
モーターが回転することにより、歯車が連動していき、アーム...
さらに、モーターが回転すると、歯車の連動が止まり、アーム...
紙コップを重ねるときは、モーターを逆回転させる。
* プログラムの内容 [#t4cb2c52]
&ref(robo mission.jpg);~
紙コップを識別するプログラムを組めなかったので、上図のよ...
このプログラムでは、上図におけるAを1、Bを2、Cを3に...
※本番ではA,B,Cはランダムに設置されるため、高得点を狙う...
** 定義 [#g2e707e7]
#define THRESHOLD 50
#define turn_left0 OnFwd(OUT_B,30);
#define turn_left1 OnFwd(OUT_B,30);OnFwd(OUT_C,-30);
#define turn_right0 OnFwd(OUT_C,30);
#define turn_right1 OnFwd(OUT_C,30);OnFwd(OUT_B,-30);
#define STEP 1
#define nMAX 250
#define short_break Off(OUT_BC);Wait(1000);
#define cross_line;OnFwd(OUT_BC,40);Wait(300);short_brea...
** サブルーチン [#r87f74a8]
sub catch()
{
OnFwd(OUT_A,-20);Wait(1000);
OnFwd(OUT_A,-50);Wait(400);
Off(OUT_A);
}
sub release()
{
OnFwd(OUT_A,20);Wait(1000);
OnFwd(OUT_A,50);Wait(100);
Off(OUT_A);
}
紙コップを取るプログラムと、重ねるプログラムをサブルーチ...
** Part1 [#o91ad579]
task main()
{
SetSensorLight(S2);
SetSensorLight(S3);
int nOnline = 0;
int nPoint = 0;
OnFwdSync(OUT_BC,60,0);Wait(2000);Off(OUT_BC);
OnFwdSync(OUT_BC,75,-100);Wait(450);Off(OUT_BC);Wait...
OnFwdSync(OUT_BC,60,0);Wait(1200);Off(OUT_BC);
catch();
OnFwdSync(OUT_BC,60,0);Wait(700);
OnFwdSync(OUT_BC,60,-100);Wait(500);Off(OUT_BC);Wait...
スタート地点から出発し、直進 → 旋回 → 直進 → 紙コップを取...
** Part2 [#b4ae5e03]
long t0 = CurrentTick();
while (CurrentTick() - t0 < 3000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_B,40);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
3秒間、白い部分の上では左折し、黒い部分の上では静止する。
** Part3 [#ga188815]
while (nPoint <= 1) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_right1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_right0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_left0;
} else {
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part4 [#y7bb456e]
while (nPoint == 2) {
OnFwdSync(OUT_BC,30,0);Wait(1500);Off(OUT_BC);Wait(...
OnFwdSync(OUT_BC,-30,0);Wait(500);Off(OUT_BC);
release();
OnFwd(OUT_C,-30);Wait(200);
OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
catch();
OnFwdSync(OUT_BC,75,-100);Wait(900);Off(OUT_BC);
nPoint++;
}
交差点を渡った後、前進 → 後退 → 紙コップを重ねる → 旋回 →...
** Part5 [#s021d185]
long t1 = CurrentTick();
while (CurrentTick() - t1 < 3000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_C,40);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
3秒間、白い部分の上では右折し、黒い部分の上では静止する。
** Part6 [#f2e0d9b2]
while (nPoint <= 6) {
while (nOnline < nMAX + 50){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part7 [#q86e5235]
while (nPoint == 7) {
OnFwdSync(OUT_BC,75,100);Wait(300);Off(OUT_BC);Wait...
OnFwdSync(OUT_BC,-60,0);Wait(900);Off(OUT_BC);
OnFwdSync(OUT_BC,75,100);Wait(200);Off(OUT_BC);Wait...
release();
OnFwdSync(OUT_BC,60,0);Wait(1000);Off(OUT_BC);Wait(...
catch();
OnFwdSync(OUT_BC,60,0);Wait(500);Off(OUT_BC);Wait(1...
nPoint++;
}
交差点を渡った後、旋回 → 後退 → 旋回 → アームを開く → 前...
** Part8 [#oa27304a]
long t2 = CurrentTick();
while (CurrentTick() - t2 < 5000) {
if (SENSOR_3 > THRESHOLD +2) {
OnFwd(OUT_B,-20);OnFwd(OUT_C,50);
} else {
Off(OUT_BC);
}
Wait(STEP);
}
5秒間、白い部分の上では右折し、黒い部分の上では静止する。
** Part9 [#raa5b6d5]
while (nPoint == 8) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP + 600);
cross_line;
OnFwd(OUT_BC,30);Wait(200);
nPoint++;
nOnline=0;
}
ラインの左側をトレースし、交差点があれば渡る。
** Part10 [#k25c65bf]
long t3 = CurrentTick();
while (CurrentTick() - t3 < 18000) {
if (SENSOR_3 < THRESHOLD -10) {
turn_right1;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_right0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwd(OUT_BC,30);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_left0;
} else {
turn_left1;
}
Wait(STEP);
}
}
OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wait...
18秒間、ラインの左側をトレースする。その後、旋回する。
** Part11 [#sa23a666]
while (nPoint == 9) {
while (nOnline < nMAX){
if (SENSOR_3 < THRESHOLD -10) {
turn_left1;
nOnline++;
} else {
if (SENSOR_3 < THRESHOLD -5) {
turn_left0;
} else if (SENSOR_3 < THRESHOLD +2) {
OnFwdSync(OUT_BC,30,0);
} else if (SENSOR_3 < THRESHOLD +8) {
turn_right0;
} else {
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1; Wait(nMAX*STEP);
cross_line;
nPoint++;
nOnline=0;
}
ラインの右側をトレースし、交差点があれば渡る。
** Part12 [#f5cf206b]
while (nPoint == 10) {
OnFwdSync(OUT_BC,30,0);Wait(800);Off(OUT_BC);Wait(1...
OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(...
release();
nPoint++;
}
交差点を渡った後、前進 → 後退 → 紙コップを重ねる の順で動...
** Part13 [#w37593ae]
while (nPoint == 11) {
OnFwdSync(OUT_BC,-60,0);Wait(1200);Off(OUT_BC);
OnFwdSync(OUT_BC,75,-100);Wait(500);Off(OUT_BC);Wai...
OnFwdSync(OUT_BC,60,0);Wait(1800);Off(OUT_BC);
catch();
nPoint++;
}
紙コップを重ねた後、後退 → 旋回 → 前進 → 紙コップを取る ...
** Part14 [#u6f59499]
while (nPoint == 12) {
OnFwdSync(OUT_BC,75,-100);Wait(1000);Off(OUT_BC);Wa...
OnFwdSync(OUT_BC,60,0);Wait(2500);Off(OUT_BC);
OnFwdSync(OUT_BC,-30,0);Wait(600);Off(OUT_BC);Wait(...
release();
nPoint++;
}
}
紙コップを取った後、旋回 → 前進 → 後退 → 紙コップを重ねる...
** 実際のプログラム [#e092ea9a]
説明しやすくするためにPartごとに区切って説明したが、実際...
また、次のことに注意が必要である。
+ 電池残量が100%のときを想定してプログラムを組んだため、...
+ しきい値が日や時間によって変わることがあるため、しきい...
* 感想・反省 [#yb026e37]
ロボットの機体は、1回失敗したものの、最終的には安定感の...
プログラムは、時間不足や実力不足で、紙コップを識別するプ...
今回は全体的に時間が足りず、すべてにおいて中途半端な出来...
今回で終わりなので次回はないが、これからは「早く正確に」...
ページ名: