2016a/Member/bambi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*今回の課題について [#b8f9634b]
#ref(s_IMG_1335.PNG)
ロボティクス入門ゼミ2つ目の課題は、ロボットにセンサーをつ...
しかし、今回の課題は「決められたコースを走るロボットを作...
*制作したロボットについて [#m8d3c615]
#ref(s_IMG_1325.JPG)
これが今回制作したロボットです。なるべくセンサーが地面に...
#ref(s_IMG_1323.JPG)
ロボット本体と、センサーの部分を別にするとこのようになり...
*今回の課題のポイントとそれに対する工夫 [#j6416d9d]
プログラムについて説明する前に、今回の課題の難しい点と、...
今回の課題で最も難しい点は、交差点をどのように攻略するか...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
その工夫というのは、このfind_lineと定義されたものです。tu...
#ref(s_IMG_1328.JPG)
まず、ロボットが交差点でこのように止まります。ここでは例...
cross_right2;
find_line;
cross_right2についてはまた後程説明しますが、要するに右旋...
#ref(s_IMG_1329.JPG)
このようになります。cross_right2でセンサーが線外に出るま...
*カウンタについて [#bf2d0138]
交差点を判断する基準として、カウンタを使いました。例えば...
**コースによるカウンタの値の違い [#t405b082]
カウンタの値は交差点から交差点までのコースによって大きく...
**ロボットのコンディションによるカウンタの値の違い [#g987...
これに関しては、プログラム製作中に特に変化は感じなかった...
*プログラムについて [#g92f8ce3]
#define THRESHOLD 55 ...
#define SPEED_H 50
#define SPEED_H2 45
#define SPEED_L 25 ...
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define turn_left1 OnRL(SPEED_L,-SPEED_L); ...
#define turn_left0 OnRL(SPEED_L,0); ...
#define turn_left2 OnRL(SPEED_H2,0); ...
#define turn_right0 OnRL(0,SPEED_L); ...
#define turn_right1 OnRL(-SPEED_L,SPEED_L); ...
#define turn_right2 OnRL(0,SPEED_H2); ...
#define cross_right1 turn_right2;Wait(500);Off(OUT_AC); ...
#define cross_right2 turn_right2;Wait(250);Off(OUT_AC); ...
#define cross_left turn_left2;Wait(500);Off(OUT_AC); ...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
まずはdefineです。白黒の判断の基準となる値や、スピード、...
今回の課題に取り組むうえで、コースを5つに分け、5つのサブ...
CROSS4()、「R左折→B地点」をCROSS5()としました。
まずは「A地点→P直進」のCROSS1()について説明します。
sub CROSS1()
{
SetSensorLight(S1); //S1は光センサーである。
int n ; //続けて黒になった回(カウンタ...
while(n < 4300) //nが4300以下のとき、
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1; //線上なら、その場で...
n++; //そして、カウンタ...
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0; //少し白ければ、前進しなが...
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward; //境界付近(白黒半々...
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0; //少し黒ければ、前...
}
else
{
turn_right1; //それらのどれでも...
}
}
Float(OUT_AC); //カウンタが4300になったら、...
PlaySound(SOUND_UP); //音を鳴らす。
Wait(400); //少し停止
cross_right2; //直進するために1度線の外へ...
find_line; //センサーを線の上へ
n=0; //カウンタをリセット
}
他のサブルーチンは交差点を右折、左折、直進のどれをするか...
「P直進 →Q直進」のCROSS2()
sub CROSS2()
{
SetSensorLight(S1);
int j ;
while(j < 6000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
j++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
cross_right2; //大きく右旋回
j=0;
}
カウンタを表すアルファベットをjにしました。
「Q直進→Q直進」のCROSS3()
sub CROSS3()
{
SetSensorLight(S1);
int k ;
while(k < 15000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
k++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
cross_right2;
find_line;
k=0;
}
今度はkにしました。
「Q直進→R左折」のCROSS4()
sub CROSS4()
{
SetSensorLight(S1);
int n ;
while(n < 5300)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
n=0;
}
なぜかここでまたnです。なぜアルファベットを変えていたかと...
「R左折→B地点」のCROSS5()
sub CROSS5()
{
SetSensorLight(S1);
int n ;
while(n < 3000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_FAST_UP);
Wait(400);
go_forward;
Wait(800);
n=0;
}
5つのサブルーチンの最後です。そして、それらを組み合わせた...
task main()
{
CROSS1();
Wait(1000);
CROSS2();
Wait(1000);
CROSS3();
Wait(1000);
CROSS4();
Wait(1000);
CROSS5();
Float(OUT_AC);
}
これで、A地点からB地点までロボットを走らせることができ...
*結果と感想 [#b74e7b3d]
今回作ったプログラムでロボットを走らせた結果、A地点から...
今回の課題は前回の課題よりはやりやすいように感じました。...
終了行:
[[2016a/Member]]
*今回の課題について [#b8f9634b]
#ref(s_IMG_1335.PNG)
ロボティクス入門ゼミ2つ目の課題は、ロボットにセンサーをつ...
しかし、今回の課題は「決められたコースを走るロボットを作...
*制作したロボットについて [#m8d3c615]
#ref(s_IMG_1325.JPG)
これが今回制作したロボットです。なるべくセンサーが地面に...
#ref(s_IMG_1323.JPG)
ロボット本体と、センサーの部分を別にするとこのようになり...
*今回の課題のポイントとそれに対する工夫 [#j6416d9d]
プログラムについて説明する前に、今回の課題の難しい点と、...
今回の課題で最も難しい点は、交差点をどのように攻略するか...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
その工夫というのは、このfind_lineと定義されたものです。tu...
#ref(s_IMG_1328.JPG)
まず、ロボットが交差点でこのように止まります。ここでは例...
cross_right2;
find_line;
cross_right2についてはまた後程説明しますが、要するに右旋...
#ref(s_IMG_1329.JPG)
このようになります。cross_right2でセンサーが線外に出るま...
*カウンタについて [#bf2d0138]
交差点を判断する基準として、カウンタを使いました。例えば...
**コースによるカウンタの値の違い [#t405b082]
カウンタの値は交差点から交差点までのコースによって大きく...
**ロボットのコンディションによるカウンタの値の違い [#g987...
これに関しては、プログラム製作中に特に変化は感じなかった...
*プログラムについて [#g92f8ce3]
#define THRESHOLD 55 ...
#define SPEED_H 50
#define SPEED_H2 45
#define SPEED_L 25 ...
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define turn_left1 OnRL(SPEED_L,-SPEED_L); ...
#define turn_left0 OnRL(SPEED_L,0); ...
#define turn_left2 OnRL(SPEED_H2,0); ...
#define turn_right0 OnRL(0,SPEED_L); ...
#define turn_right1 OnRL(-SPEED_L,SPEED_L); ...
#define turn_right2 OnRL(0,SPEED_H2); ...
#define cross_right1 turn_right2;Wait(500);Off(OUT_AC); ...
#define cross_right2 turn_right2;Wait(250);Off(OUT_AC); ...
#define cross_left turn_left2;Wait(500);Off(OUT_AC); ...
#define find_line turn_right1;until(SENSOR_1 < THRESHOLD...
まずはdefineです。白黒の判断の基準となる値や、スピード、...
今回の課題に取り組むうえで、コースを5つに分け、5つのサブ...
CROSS4()、「R左折→B地点」をCROSS5()としました。
まずは「A地点→P直進」のCROSS1()について説明します。
sub CROSS1()
{
SetSensorLight(S1); //S1は光センサーである。
int n ; //続けて黒になった回(カウンタ...
while(n < 4300) //nが4300以下のとき、
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1; //線上なら、その場で...
n++; //そして、カウンタ...
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0; //少し白ければ、前進しなが...
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward; //境界付近(白黒半々...
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0; //少し黒ければ、前...
}
else
{
turn_right1; //それらのどれでも...
}
}
Float(OUT_AC); //カウンタが4300になったら、...
PlaySound(SOUND_UP); //音を鳴らす。
Wait(400); //少し停止
cross_right2; //直進するために1度線の外へ...
find_line; //センサーを線の上へ
n=0; //カウンタをリセット
}
他のサブルーチンは交差点を右折、左折、直進のどれをするか...
「P直進 →Q直進」のCROSS2()
sub CROSS2()
{
SetSensorLight(S1);
int j ;
while(j < 6000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
j++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
cross_right2; //大きく右旋回
j=0;
}
カウンタを表すアルファベットをjにしました。
「Q直進→Q直進」のCROSS3()
sub CROSS3()
{
SetSensorLight(S1);
int k ;
while(k < 15000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
k++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
cross_right2;
find_line;
k=0;
}
今度はkにしました。
「Q直進→R左折」のCROSS4()
sub CROSS4()
{
SetSensorLight(S1);
int n ;
while(n < 5300)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_UP);
Wait(400);
n=0;
}
なぜかここでまたnです。なぜアルファベットを変えていたかと...
「R左折→B地点」のCROSS5()
sub CROSS5()
{
SetSensorLight(S1);
int n ;
while(n < 3000)
{
if(SENSOR_1<THRESHOLD-15)
{
turn_left1;
n++;
}
else if(SENSOR_1<THRESHOLD-7)
{
turn_left0;
}
else if(SENSOR_1<THRESHOLD+7)
{
go_forward;
}
else if(SENSOR_1<THRESHOLD+15)
{
turn_right0;
}
else
{
turn_right1;
}
}
Float(OUT_AC);
PlaySound(SOUND_FAST_UP);
Wait(400);
go_forward;
Wait(800);
n=0;
}
5つのサブルーチンの最後です。そして、それらを組み合わせた...
task main()
{
CROSS1();
Wait(1000);
CROSS2();
Wait(1000);
CROSS3();
Wait(1000);
CROSS4();
Wait(1000);
CROSS5();
Float(OUT_AC);
}
これで、A地点からB地点までロボットを走らせることができ...
*結果と感想 [#b74e7b3d]
今回作ったプログラムでロボットを走らせた結果、A地点から...
今回の課題は前回の課題よりはやりやすいように感じました。...
ページ名: