2019a/Member/Mars/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
目次
#contents
*課題2 [#g0012c33]
A地点を出発し、次の経路を黒い線にそって動くロボットを作成...
#ref(2019a/Member/Mars/Mission2/C89E0517-4D44-4BA2-93FE-8...
経路は以下の通り。
・A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K...
*ロボットの説明 [#l5e3555a]
ロボットの全体像は次の写真の通り。
#ref(2019a/Member/Mars/Mission2/C20D770E-F322-488A-8F4E-E...
これより下に各部位の説明をする。
**ボールキャッチの部分 [#u6e614fc]
ボールを掴み、離す部分は以下の通り。
#ref(2019a/Member/Mars/Mission2/E6CF5DE4-1B71-4B94-BF14-4...
モーターを回すことで写真の左を部分が回転するようになって...
写真で見て反時計回りに回せばキャッチ、時計回りに回せばリ...
ボールは3点で支え、ロボットが動いても離すことなく、安定し...
**車輪の部分 [#ube8bec6]
車輪の部分は以下の通り。
#ref(2019a/Member/Mars/Mission2/B48B744B-0F1E-4967-8171-7...
安定感を増すために四輪ではなく二輪にした。光センサーの左...
#ref(2019a/Member/Mars/Mission2/03CC224D-FBB7-4ED6-A7A1-1...
手前にある灰色のT字のパーツは、ロボットが車輪を軸としてシ...
*プログラムの説明 [#a9395b62]
プログラムは全体を通して線の境界をトレースするようにして...
また、プログラム全体で以下のようにマクロを定義した。
#define turn_left OnFwd(OUT_C);Off(OUT_A);
#define turn_right OnFwd(OUT_A);Off(OUT_C);
#define circling_left OnFwd(OUT_C);OnRev(OUT_A);
#define circling_right OnRev(OUT_C);OnFwd(OUT_A);
#define go_ahead OnFwd(OUT_AC);
turnは片方の車輪を止め、もう片方の車輪を動かすことで、lef...
circlingは二つの車輪をそれぞれ前転、後転させることで、二...
go_aheadは直進する。
**サブルーチンについて [#kc273026]
サブルーチンは線の境界をトレースし交差点で止まるものと、...
***線の境界をトレースし、交差点で止まるプログラム [#z1a83...
黒線の左側の境界を使用する。光センターの感知する色が、真...
またwhileを使うことで、交差点まではトレースし続けることが...
Timer(0)で、グローバル変数tを使って、左旋回(真っ黒)が続い...
実際に光センサーを使って値を測定し、プログラムにしたもの...
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while((FastTimer(0)<t)){
if(SENSOR_2<40){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<50){turn_right;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
ただし、実際に動かしたプログラムは、大部分は似ているが、...
sub follow_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);ClearTimer(1);
while((FastTimer(0)<t1)&&(FastTimer(1)<t2)){
if(SENSOR_2<40){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<50){turn_right;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);ClearTimer(1);
while((FastTimer(0)<t1)||(FastTimer(1)<t2)){
if(SENSOR_2<41){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
実際には、follow_line1とfollow_line2という二つのサブルー...
1と2の違いはwhileの二つの条件が「かつ」か「または」かの違いだ...
この二つに分けた理由は、交差点ではなくても止まって欲しい...
follow_line1を使えば、交差点ではないところでも止めること...
follow_line2を使えば、交差点でも止まらなくすることが出来...
follow_Line1もfollow_line2も二つ目のタイマーであるTimer(1...
二つのグローバル変数はそれぞれ、int t1;とint t2;で指定す...
Timer(1)を必要としない過程では、follow_line2を使い、t2=0...
***交差点で止まった後、線を越えるサブルーチン [#v560f00e]
このサブルーチンも二つ使用した。使用した二つのサブルーチ...
sub cross_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<48)
{
go_ahead;
}
Off(OUT_AC);Wait(100);
while(SENSOR_2>47)
{
turn_right;
}
Off(OUT_AC);
}
sub cross_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<48)
{
go_ahead;
}
Off(OUT_AC);Wait(100);
while(SENSOR_2>47)
{
circling_right;
}
Off(OUT_AC);
}
二つの違いは、黒線を越え、回転する時に、右回転するか、右...
しかし、点Hや点Iで止まった後にcross_line1を使うと、他の黒...
前文の「進みすぎて止まらなくなってしまう」場合とはどういう...
この状況は主に点Iで止まり、越えた後に起こる。まず点Jから...
ではこの問題を解決するために交差点を判別する時間を短くす...
そしてさらに、cross_line2を使うと、今度は黒線に対して直角...
follow_lineもcross_lineも二つ導入することで、このような問...
*実際に使用したプログラム(全体) [#o32aa88a]
最終的に使用したのは以下のプログラムである。ただし、この...
task main()
{
SetPower(OUT_AC,4);
go_ahead;Wait(70);Off(OUT_AC);// M到達
t1=15;t2=700;follow_line2();// K到達
cross_line1();// K越え
t1=10000;t2=100;follow_line1();// L到達
OnRev(OUT_B);Wait(30);Off(OUT_B);Wait(100);// ピンポン...
t1=25;t2=400;follow_line1();Wait(100);// K到達
circling_right;Wait(40);Off(OUT_AC);// ?
t1=15;t2=0;follow_line2();// J到達
t1=10;t2=150;follow_line2();// I到達
cross_line2();// I越え
t1=10;t2=150;follow_line2();// H到達
cross_line2();// H越え
t1=15;t2=100;follow_line2();// G到達
t1=20;t2=300;follow_line2();// D到達
cross_line1();// D越え
t1=20;t2=0;follow_line2();// C到達
cross_line1();// C越え
t1=20;t2=0;follow_line2();// B到達
circling_right;Wait(10);Off(OUT_B);// ロボットの角度を...
OnFwd(OUT_B);Wait(50);Off(OUT_B);// ピンポン玉リリース
go_ahead;Wait(50);Off(OUT_AC);// A到達
}
「(アルファベット)到達」は、点A以外はその点で止まったことを...
?について説明するが、その前に?のすぐ上のK到達について説明...
E到達とF到達がないことについて説明する。点Gから点F、点E、...
*反省 [#ked5b51c]
**プログラムの反省 [#t430a2d7]
点A(最初)→点J、点J→点A(最後)のそれぞれは上手くいったが、...
**ロボットの反省 [#k75fdd25]
ロボットは四輪から二輪に変えたことでひとつひとつの挙動が...
終了行:
[[2019a/Member]]
目次
#contents
*課題2 [#g0012c33]
A地点を出発し、次の経路を黒い線にそって動くロボットを作成...
#ref(2019a/Member/Mars/Mission2/C89E0517-4D44-4BA2-93FE-8...
経路は以下の通り。
・A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K...
*ロボットの説明 [#l5e3555a]
ロボットの全体像は次の写真の通り。
#ref(2019a/Member/Mars/Mission2/C20D770E-F322-488A-8F4E-E...
これより下に各部位の説明をする。
**ボールキャッチの部分 [#u6e614fc]
ボールを掴み、離す部分は以下の通り。
#ref(2019a/Member/Mars/Mission2/E6CF5DE4-1B71-4B94-BF14-4...
モーターを回すことで写真の左を部分が回転するようになって...
写真で見て反時計回りに回せばキャッチ、時計回りに回せばリ...
ボールは3点で支え、ロボットが動いても離すことなく、安定し...
**車輪の部分 [#ube8bec6]
車輪の部分は以下の通り。
#ref(2019a/Member/Mars/Mission2/B48B744B-0F1E-4967-8171-7...
安定感を増すために四輪ではなく二輪にした。光センサーの左...
#ref(2019a/Member/Mars/Mission2/03CC224D-FBB7-4ED6-A7A1-1...
手前にある灰色のT字のパーツは、ロボットが車輪を軸としてシ...
*プログラムの説明 [#a9395b62]
プログラムは全体を通して線の境界をトレースするようにして...
また、プログラム全体で以下のようにマクロを定義した。
#define turn_left OnFwd(OUT_C);Off(OUT_A);
#define turn_right OnFwd(OUT_A);Off(OUT_C);
#define circling_left OnFwd(OUT_C);OnRev(OUT_A);
#define circling_right OnRev(OUT_C);OnFwd(OUT_A);
#define go_ahead OnFwd(OUT_AC);
turnは片方の車輪を止め、もう片方の車輪を動かすことで、lef...
circlingは二つの車輪をそれぞれ前転、後転させることで、二...
go_aheadは直進する。
**サブルーチンについて [#kc273026]
サブルーチンは線の境界をトレースし交差点で止まるものと、...
***線の境界をトレースし、交差点で止まるプログラム [#z1a83...
黒線の左側の境界を使用する。光センターの感知する色が、真...
またwhileを使うことで、交差点まではトレースし続けることが...
Timer(0)で、グローバル変数tを使って、左旋回(真っ黒)が続い...
実際に光センサーを使って値を測定し、プログラムにしたもの...
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while((FastTimer(0)<t)){
if(SENSOR_2<40){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<50){turn_right;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
ただし、実際に動かしたプログラムは、大部分は似ているが、...
sub follow_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);ClearTimer(1);
while((FastTimer(0)<t1)&&(FastTimer(1)<t2)){
if(SENSOR_2<40){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<50){turn_right;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);ClearTimer(1);
while((FastTimer(0)<t1)||(FastTimer(1)<t2)){
if(SENSOR_2<41){circling_left;}
else if(SENSOR_2<43){turn_left;ClearTimer(0);}
else if(SENSOR_2<48){go_ahead;ClearTimer(0);}
else if(SENSOR_2<55){circling_right;ClearTimer(0);}
}
Off(OUT_AC);
}
実際には、follow_line1とfollow_line2という二つのサブルー...
1と2の違いはwhileの二つの条件が「かつ」か「または」かの違いだ...
この二つに分けた理由は、交差点ではなくても止まって欲しい...
follow_line1を使えば、交差点ではないところでも止めること...
follow_line2を使えば、交差点でも止まらなくすることが出来...
follow_Line1もfollow_line2も二つ目のタイマーであるTimer(1...
二つのグローバル変数はそれぞれ、int t1;とint t2;で指定す...
Timer(1)を必要としない過程では、follow_line2を使い、t2=0...
***交差点で止まった後、線を越えるサブルーチン [#v560f00e]
このサブルーチンも二つ使用した。使用した二つのサブルーチ...
sub cross_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<48)
{
go_ahead;
}
Off(OUT_AC);Wait(100);
while(SENSOR_2>47)
{
turn_right;
}
Off(OUT_AC);
}
sub cross_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<48)
{
go_ahead;
}
Off(OUT_AC);Wait(100);
while(SENSOR_2>47)
{
circling_right;
}
Off(OUT_AC);
}
二つの違いは、黒線を越え、回転する時に、右回転するか、右...
しかし、点Hや点Iで止まった後にcross_line1を使うと、他の黒...
前文の「進みすぎて止まらなくなってしまう」場合とはどういう...
この状況は主に点Iで止まり、越えた後に起こる。まず点Jから...
ではこの問題を解決するために交差点を判別する時間を短くす...
そしてさらに、cross_line2を使うと、今度は黒線に対して直角...
follow_lineもcross_lineも二つ導入することで、このような問...
*実際に使用したプログラム(全体) [#o32aa88a]
最終的に使用したのは以下のプログラムである。ただし、この...
task main()
{
SetPower(OUT_AC,4);
go_ahead;Wait(70);Off(OUT_AC);// M到達
t1=15;t2=700;follow_line2();// K到達
cross_line1();// K越え
t1=10000;t2=100;follow_line1();// L到達
OnRev(OUT_B);Wait(30);Off(OUT_B);Wait(100);// ピンポン...
t1=25;t2=400;follow_line1();Wait(100);// K到達
circling_right;Wait(40);Off(OUT_AC);// ?
t1=15;t2=0;follow_line2();// J到達
t1=10;t2=150;follow_line2();// I到達
cross_line2();// I越え
t1=10;t2=150;follow_line2();// H到達
cross_line2();// H越え
t1=15;t2=100;follow_line2();// G到達
t1=20;t2=300;follow_line2();// D到達
cross_line1();// D越え
t1=20;t2=0;follow_line2();// C到達
cross_line1();// C越え
t1=20;t2=0;follow_line2();// B到達
circling_right;Wait(10);Off(OUT_B);// ロボットの角度を...
OnFwd(OUT_B);Wait(50);Off(OUT_B);// ピンポン玉リリース
go_ahead;Wait(50);Off(OUT_AC);// A到達
}
「(アルファベット)到達」は、点A以外はその点で止まったことを...
?について説明するが、その前に?のすぐ上のK到達について説明...
E到達とF到達がないことについて説明する。点Gから点F、点E、...
*反省 [#ked5b51c]
**プログラムの反省 [#t430a2d7]
点A(最初)→点J、点J→点A(最後)のそれぞれは上手くいったが、...
**ロボットの反省 [#k75fdd25]
ロボットは四輪から二輪に変えたことでひとつひとつの挙動が...
ページ名: