2019a/Member/shinshin/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
*目次 [#f57fc253]
#contents
*課題2について [#i1664c8e]
#ref(2019a/Member/shinshin/Mission2/D9FF9282-8186-416D-98...
A地点を出発し、次のいずれかの経路を黒い線にそって動くロボ...
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
#ref(2019a/Member/shinshin/Mission2/IMG_2245.png)
僕は後者のMからBに向かうルートを選びました。
*ロボットについて [#x2ebafb7]
#ref(2019a/Member/shinshin/Mission2/161D07AD-74F5-4BEC-89...
#ref(2019a/Member/shinshin/Mission2/90DDCB52-B9C0-49A7-AF...
今回は走らせるロボットをできるだけコンパクトにすることを...
#ref(2019a/Member/shinshin/Mission2/C62E7553-D07B-48C2-8F...
#ref(2019a/Member/shinshin/Mission2/529E8C5B-3BB9-4707-BC...
ピンポン玉を掴むアームは上下に動かすことができ、振り下ろ...
*プログラムについて [#h65e3b65]
Aを左のホイール、Cを右のホイール、Bをアームにそれぞれ接続...
**使用したマクロ [#ja644831]
まずは明るさと交差点で止まるまでの時間を以下のように設定...
明るさについては複数色に分けることも考えたのですが、プロ...
#define black 39
#define run_time 30
次に、左右回転や直進などの簡単な動作について以下のように...
一つ目と二つ目は右左折、四つ目と五つ目はその場回転です。
#define right OnFwd(OUT_A);Off(OUT_C);
#define left OnFwd(OUT_C);Off(OUT_A);
#define straight OnFwd(OUT_AC);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
**使用したサブルーチン [#e9466326]
ここではdefineとは違い、複雑な動作をサブルーチンによって...
***1.左側をライントレースして次の交差点で止まる [#ueeec...
光センサーの示す値が‘black’よりも高い(白の上を走っている...
2はこれの左右対称版です。
sub follow_line_left()
{
ClearTimer(0);
while(FastTimer(0)<run_time){
if(SENSOR_2>black){
right;
ClearTimer(0);
}else{
left;
}
}Off(OUT_AC);Wait(100);
}
***2.右側をライントレースして次の交差点で止まる [#cc426...
sub follow_line_right()
{
ClearTimer(0);
while(FastTimer(0)<run_time){
if(SENSOR_2>black){
left;
ClearTimer(0);
}else{
right;
}
}Off(OUT_AC);Wait(100);
}
***3.左側をライントレース(白を見過ぎると一旦停止) [#b48...
ここでは、直角の外側を曲がる際に、光センサーの位置が前に...
sub corner_stop_left()
{
ClearTimer(0);
while(FastTimer(0)<100){
if(SENSOR_2<black){
left;
ClearTimer(0);
}else{
right;
}
}
Off(OUT_AC);Wait(50);
while(SENSOR_2>black){
turn_right;
}
}
***4.右側をライントレース(白を見過ぎると一旦停止) [#v06...
sub corner_stop_right()
{
ClearTimer(0);
while(FastTimer(0)<100){
if(SENSOR_2<black){
right;
ClearTimer(0);
}else{
left;
}
}
Off(OUT_AC);Wait(50);
while(SENSOR_2>black){
turn_left;
}
}
***5.交差点を乗り越える [#w4896e7b]
これは黒の上にいる間はまっすぐ走り続けるプログラムで、交...
sub cross_line()
{
while(SENSOR_2<black){
straight;
}
}
***6.ピンポン玉に向かって走る [#rfbfd7de]
機体をピンポン玉の直前で止めるためには、1では難しいと感...
sub go_to_ball()
{
ClearTimer(1);
FastTimer(1);
while(FastTimer(1)<200){
if(SENSOR_2<black){
left;
}else{
right;
}
}
Off(OUT_AC);
}
***7.ピンポン玉を掴む [#x1a49914]
簡単です。アームを下げるだけです。ただ、下げる時間の調整...
sub ball_catch()
{
OnFwd(OUT_B);Wait(24);
Off(OUT_B);
}
***8.シュート [#tab94eba]
アームを上げるのですがそれだけではシュートにならないので...
sub ball_shoot()
{
OnRev(OUT_B);Wait(30);
Off(OUT_B);
straight;Wait(10);
}
**メインプログラムについて [#nd94b15b]
光センサーはセンサー2につなぎ、タイマーはFastTimerを使用...
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
FastTimer(0);
***MからKへ [#ode5a62c]
はじめのカーブは右側トレースで、急なカーブにかかった時に...
follow_line_right();
cross_line();
corner_stop_left();
follow_line_left();
***KからLへ & ピンポン玉を掴む [#y125dbb7]
左側トレースでLに向かい、ピンポン玉を掴みました。
cross_line();
Off(OUT_AC);Wait(50);
go_to_ball();
ball_catch();
***反転してLからKへ [#sb04de32]
その場で左回転をし、右側トレースでKに戻ります。
turn_left;Wait(170);
follow_line_right();
***KからJへ [#q4769446]
できるだけ円に沿うようにトレースさせるために一旦右を向か...
turn_right;Wait(20);
cross_line();
Off(OUT_AC);Wait(50);
left;Wait(40);
***JからI、Hを越えてGへ [#la99a04e]
左側トレースと交差点の乗り越えを、交互に2回ずつ行い、最後...
repeat(2){
follow_line_left();
cross_line();
}
follow_line_left();
***Gの交差点を乗り越えてFに向かうように方向転換 [#o132c3f2]
Gの交差点を乗り越え、左回転によってFの方向を向きます。
cross_line();
Off(OUT_AC);Wait(50);
turn_left;Wait(20);
***F、Eを曲がってDへ [#o1bff68c]
サブルーチンの4を使ってE、Fの外側をきれいに曲がり、右側...
corner_stop_right();
corner_stop_right();
follow_line_right();
***Dを越えてBへ [#x849b34e]
Dの交差点を乗り越えて、右側トレースでBに向かいます。
cross_line();
Off(OUT_AC);Wait(50);
follow_line_right();
***向きを微調整&シュート! [#z1f15cde]
最後止まる際に多少右側に向きが傾いてしまうので、左小回転...
turn_left;Wait(10);
ball_shoot();
Off(OUT_AC);
}
*最後に [#ec49e003]
今回、走らせるロボットの概形自体は簡単にできたのですが、...
悔しかったと感じたのは、「丁字路では直角方向に進入する時...
また、プログラムのほかにもピンポン玉をつかむことやシュー...
総合的には、難しい点や失敗も多々あったけど、多くの達成感...
終了行:
[[2019a/Member]]
*目次 [#f57fc253]
#contents
*課題2について [#i1664c8e]
#ref(2019a/Member/shinshin/Mission2/D9FF9282-8186-416D-98...
A地点を出発し、次のいずれかの経路を黒い線にそって動くロボ...
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
#ref(2019a/Member/shinshin/Mission2/IMG_2245.png)
僕は後者のMからBに向かうルートを選びました。
*ロボットについて [#x2ebafb7]
#ref(2019a/Member/shinshin/Mission2/161D07AD-74F5-4BEC-89...
#ref(2019a/Member/shinshin/Mission2/90DDCB52-B9C0-49A7-AF...
今回は走らせるロボットをできるだけコンパクトにすることを...
#ref(2019a/Member/shinshin/Mission2/C62E7553-D07B-48C2-8F...
#ref(2019a/Member/shinshin/Mission2/529E8C5B-3BB9-4707-BC...
ピンポン玉を掴むアームは上下に動かすことができ、振り下ろ...
*プログラムについて [#h65e3b65]
Aを左のホイール、Cを右のホイール、Bをアームにそれぞれ接続...
**使用したマクロ [#ja644831]
まずは明るさと交差点で止まるまでの時間を以下のように設定...
明るさについては複数色に分けることも考えたのですが、プロ...
#define black 39
#define run_time 30
次に、左右回転や直進などの簡単な動作について以下のように...
一つ目と二つ目は右左折、四つ目と五つ目はその場回転です。
#define right OnFwd(OUT_A);Off(OUT_C);
#define left OnFwd(OUT_C);Off(OUT_A);
#define straight OnFwd(OUT_AC);
#define turn_left OnFwd(OUT_C);OnRev(OUT_A);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
**使用したサブルーチン [#e9466326]
ここではdefineとは違い、複雑な動作をサブルーチンによって...
***1.左側をライントレースして次の交差点で止まる [#ueeec...
光センサーの示す値が‘black’よりも高い(白の上を走っている...
2はこれの左右対称版です。
sub follow_line_left()
{
ClearTimer(0);
while(FastTimer(0)<run_time){
if(SENSOR_2>black){
right;
ClearTimer(0);
}else{
left;
}
}Off(OUT_AC);Wait(100);
}
***2.右側をライントレースして次の交差点で止まる [#cc426...
sub follow_line_right()
{
ClearTimer(0);
while(FastTimer(0)<run_time){
if(SENSOR_2>black){
left;
ClearTimer(0);
}else{
right;
}
}Off(OUT_AC);Wait(100);
}
***3.左側をライントレース(白を見過ぎると一旦停止) [#b48...
ここでは、直角の外側を曲がる際に、光センサーの位置が前に...
sub corner_stop_left()
{
ClearTimer(0);
while(FastTimer(0)<100){
if(SENSOR_2<black){
left;
ClearTimer(0);
}else{
right;
}
}
Off(OUT_AC);Wait(50);
while(SENSOR_2>black){
turn_right;
}
}
***4.右側をライントレース(白を見過ぎると一旦停止) [#v06...
sub corner_stop_right()
{
ClearTimer(0);
while(FastTimer(0)<100){
if(SENSOR_2<black){
right;
ClearTimer(0);
}else{
left;
}
}
Off(OUT_AC);Wait(50);
while(SENSOR_2>black){
turn_left;
}
}
***5.交差点を乗り越える [#w4896e7b]
これは黒の上にいる間はまっすぐ走り続けるプログラムで、交...
sub cross_line()
{
while(SENSOR_2<black){
straight;
}
}
***6.ピンポン玉に向かって走る [#rfbfd7de]
機体をピンポン玉の直前で止めるためには、1では難しいと感...
sub go_to_ball()
{
ClearTimer(1);
FastTimer(1);
while(FastTimer(1)<200){
if(SENSOR_2<black){
left;
}else{
right;
}
}
Off(OUT_AC);
}
***7.ピンポン玉を掴む [#x1a49914]
簡単です。アームを下げるだけです。ただ、下げる時間の調整...
sub ball_catch()
{
OnFwd(OUT_B);Wait(24);
Off(OUT_B);
}
***8.シュート [#tab94eba]
アームを上げるのですがそれだけではシュートにならないので...
sub ball_shoot()
{
OnRev(OUT_B);Wait(30);
Off(OUT_B);
straight;Wait(10);
}
**メインプログラムについて [#nd94b15b]
光センサーはセンサー2につなぎ、タイマーはFastTimerを使用...
task main()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
FastTimer(0);
***MからKへ [#ode5a62c]
はじめのカーブは右側トレースで、急なカーブにかかった時に...
follow_line_right();
cross_line();
corner_stop_left();
follow_line_left();
***KからLへ & ピンポン玉を掴む [#y125dbb7]
左側トレースでLに向かい、ピンポン玉を掴みました。
cross_line();
Off(OUT_AC);Wait(50);
go_to_ball();
ball_catch();
***反転してLからKへ [#sb04de32]
その場で左回転をし、右側トレースでKに戻ります。
turn_left;Wait(170);
follow_line_right();
***KからJへ [#q4769446]
できるだけ円に沿うようにトレースさせるために一旦右を向か...
turn_right;Wait(20);
cross_line();
Off(OUT_AC);Wait(50);
left;Wait(40);
***JからI、Hを越えてGへ [#la99a04e]
左側トレースと交差点の乗り越えを、交互に2回ずつ行い、最後...
repeat(2){
follow_line_left();
cross_line();
}
follow_line_left();
***Gの交差点を乗り越えてFに向かうように方向転換 [#o132c3f2]
Gの交差点を乗り越え、左回転によってFの方向を向きます。
cross_line();
Off(OUT_AC);Wait(50);
turn_left;Wait(20);
***F、Eを曲がってDへ [#o1bff68c]
サブルーチンの4を使ってE、Fの外側をきれいに曲がり、右側...
corner_stop_right();
corner_stop_right();
follow_line_right();
***Dを越えてBへ [#x849b34e]
Dの交差点を乗り越えて、右側トレースでBに向かいます。
cross_line();
Off(OUT_AC);Wait(50);
follow_line_right();
***向きを微調整&シュート! [#z1f15cde]
最後止まる際に多少右側に向きが傾いてしまうので、左小回転...
turn_left;Wait(10);
ball_shoot();
Off(OUT_AC);
}
*最後に [#ec49e003]
今回、走らせるロボットの概形自体は簡単にできたのですが、...
悔しかったと感じたのは、「丁字路では直角方向に進入する時...
また、プログラムのほかにもピンポン玉をつかむことやシュー...
総合的には、難しい点や失敗も多々あったけど、多くの達成感...
ページ名: