2016a/Member/rin331/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
*目次 [#offd988a]
#contents
*機体の説明 [#b380836f]
前回より少し機体を小さくし、交差点や円で曲がりやすいよう...
具体的にはギアボックス自体を回収、タイヤ間の距離を変え、...
&ref(./機体01.jpg,45%,機体画像1);
タイヤは先生からのアドバイスで摩擦の小さいものを使用。
(それまでは厚いタイヤで回転が下手な機体だった。)
&ref(./機体02.jpg,45%,機体画像2);
また画像を見ればわかるように今回はタイヤ、センサからなる...
これはセンサで読み取った値が反映させるまでに起こるラグを...
センサの値が変わるとタイヤが大幅に動いてしまうようになる...
&ref(./機体03.jpg,45%,機体画像3);
*プログラムの仕組みについて [#k4ffe550]
今回のプログラムは前回に比べて複雑なため、別に説明のペー...
**レース用プログラム [#b1a6cb71]
黒い線を走るプログラムは&br;
•白 → 大きく右回転&br;
•白っぽい → 右回転&br;
•中間 → 直進&br;
•黒っぽい → 左回転&br;
•黒 → 大きく左回転&br;
という形になっている。
sub go()
{
ClearTimer(0);//タイマ1の初期化
while(FastTimer(0) < TMAX){
if(SENSOR_2 >Tyukan+4)//白
{ //大きく右旋回
OnFwd(OUT_A);
OnRev(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan+2)//しろっぽい
{ //右旋回
Off(OUT_A);
OnFwd(OUT_A);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan)//中間点
{ //直進
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan-2)//黒っぽい
{ //左旋回
Off(OUT_C);
OnFwd(OUT_C);
}
else
{ //大きく左旋回
OnFwd(OUT_C);
OnRev(OUT_A);
}
}
Off(OUT_AC);//交差点のため停止
PlaySound(SOUND_CLICK);//確認音
Wait(100);//1秒停止
}
これによって普通の直線などでは線にそって走ることができる。
** 交差点の判別 [#k78aa1eb]
交差点の判別は先ほど上で示したプログラムの中の一部で判別...
それは
while(FastTimer(0) < TMAX)
と白、中間に存在する。
ClearTimer(0);
で行っている。
これによって一定数黒が連続するとタイマーが増加し
交差点のような、黒が連続で判定される場所だと、ループを抜...
** 判別後の処理 [#k78aa1eb]
交差点の判別後の処理は3つ存在し、それは以下の画像の通り...
&ref(./判別1.png,60%,交差点処理1);
?内側を進む。&br;
これは一番簡単な処理で、判別が終了している時には、機体は...
自分はこのように書いてセンサが黒にある状態から、左回転を...
sub turn1()//内側の交差点移動処理
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
{
OnFwd(OUT_C);
}
Off(OUT_AC);
}
&ref(./判別2.png,60%,交差点処理2);
?そのまま進む。&br;
まっすぐ進むには、普通は直線で進むが、先ほど説明したよう...
この機体は交差点を判別した際、若干左に機体が曲がる。
それを利用して、右回転を白になるまで繰り返し、直進という...
sub move()
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
OnFwd(OUT_A);
Off(OUT_AC);
}
&ref(./判別3.png,60%,交差点処理3);
?外側を進む&br;
外側を進むには他のプログラムと違い処理が複雑になる。
考えられるつくり方としては黒→白→黒→白と繰り返すまで回転を...
工程が増えるとミスする確立が高くなるので今回は下に書いた...
その後、move()をもう一度使用し回転している。
sub turn2()//内側の交差点移動処理
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(20);
Off(OUT_AC);
move();
}
*プログラムの全体像 [#j62118fe]
#define TMAX 27 //何秒間黒ならループを抜けるか30だと...
#define Tyukan 44 //中間のしきい値+-2で黒白 +-4で大きく...
/*
交差点の説明
D側 4 C側
|
|
3--------------------------------1
|
|
A側 2 B側
*/
task main()
{
//目標
setting();
//*汚くなりそうなためあえてrepeat()を使っていない
go();//一度目の交差点(S)1から2へ
turn1();
go();//2度目の交差点(P)4から1へ
turn1();
go();//3度目の交差点(Q1) 2から4へ
move();
go();//4度目の交差点(Q2) 3から1へ
move();
go();//5度目の交差点(R) 4から3へ
turn2();
go();//5度目の交差点(P) 2から3へ
turn1();
go();//end
}
sub setting()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,5);
}
sub go()
{
ClearTimer(0);//タイマ1の初期化
while(FastTimer(0) < TMAX){
if(SENSOR_2 >Tyukan+4)//白
{ //大きく右旋回
OnFwd(OUT_A);
OnRev(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan+2)//しろっぽい
{ //右旋回
Off(OUT_A);
OnFwd(OUT_A);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan)//中間点
{ //直進
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan-2)//黒っぽい
{ //左旋回
Off(OUT_C);
OnFwd(OUT_C);
}
else
{ //大きく左旋回
OnFwd(OUT_C);
OnRev(OUT_A);
}
}
Off(OUT_AC);//交差点のため停止
PlaySound(SOUND_CLICK);//確認音
Wait(100);//1秒停止
}
sub move()
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
OnFwd(OUT_A);
Off(OUT_AC);
}
sub turn1()//内側の交差点移動処理
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
{
OnFwd(OUT_C);
}
Off(OUT_AC);
}
sub turn2()//内側の交差点移動処理
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(20);
Off(OUT_AC);
move();
}
*課題の感想 [#bbb8c6fd]
今回は前回と違い、センサーも含めた構造になり処理も複雑化...
ロボの構造、プログラムの中身もよりいっそう面白い中身にな...
ただ、自分はプログラムだけで問題を解決しようとしてしまう...
時間がかかってしまった。場合によっては機体のほうを改善し...
ときもあることを忘れてはいけない。
また今回は中間試験や家のアクシデントも重なり、時間に余裕...
だがいつも忙しかった訳ではない。課題が近くなってから急に...
暇なときに少しでも作業をする癖をつけて最後のロボコンに望...
終了行:
[[2016a/Member]]
*目次 [#offd988a]
#contents
*機体の説明 [#b380836f]
前回より少し機体を小さくし、交差点や円で曲がりやすいよう...
具体的にはギアボックス自体を回収、タイヤ間の距離を変え、...
&ref(./機体01.jpg,45%,機体画像1);
タイヤは先生からのアドバイスで摩擦の小さいものを使用。
(それまでは厚いタイヤで回転が下手な機体だった。)
&ref(./機体02.jpg,45%,機体画像2);
また画像を見ればわかるように今回はタイヤ、センサからなる...
これはセンサで読み取った値が反映させるまでに起こるラグを...
センサの値が変わるとタイヤが大幅に動いてしまうようになる...
&ref(./機体03.jpg,45%,機体画像3);
*プログラムの仕組みについて [#k4ffe550]
今回のプログラムは前回に比べて複雑なため、別に説明のペー...
**レース用プログラム [#b1a6cb71]
黒い線を走るプログラムは&br;
•白 → 大きく右回転&br;
•白っぽい → 右回転&br;
•中間 → 直進&br;
•黒っぽい → 左回転&br;
•黒 → 大きく左回転&br;
という形になっている。
sub go()
{
ClearTimer(0);//タイマ1の初期化
while(FastTimer(0) < TMAX){
if(SENSOR_2 >Tyukan+4)//白
{ //大きく右旋回
OnFwd(OUT_A);
OnRev(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan+2)//しろっぽい
{ //右旋回
Off(OUT_A);
OnFwd(OUT_A);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan)//中間点
{ //直進
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan-2)//黒っぽい
{ //左旋回
Off(OUT_C);
OnFwd(OUT_C);
}
else
{ //大きく左旋回
OnFwd(OUT_C);
OnRev(OUT_A);
}
}
Off(OUT_AC);//交差点のため停止
PlaySound(SOUND_CLICK);//確認音
Wait(100);//1秒停止
}
これによって普通の直線などでは線にそって走ることができる。
** 交差点の判別 [#k78aa1eb]
交差点の判別は先ほど上で示したプログラムの中の一部で判別...
それは
while(FastTimer(0) < TMAX)
と白、中間に存在する。
ClearTimer(0);
で行っている。
これによって一定数黒が連続するとタイマーが増加し
交差点のような、黒が連続で判定される場所だと、ループを抜...
** 判別後の処理 [#k78aa1eb]
交差点の判別後の処理は3つ存在し、それは以下の画像の通り...
&ref(./判別1.png,60%,交差点処理1);
?内側を進む。&br;
これは一番簡単な処理で、判別が終了している時には、機体は...
自分はこのように書いてセンサが黒にある状態から、左回転を...
sub turn1()//内側の交差点移動処理
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
{
OnFwd(OUT_C);
}
Off(OUT_AC);
}
&ref(./判別2.png,60%,交差点処理2);
?そのまま進む。&br;
まっすぐ進むには、普通は直線で進むが、先ほど説明したよう...
この機体は交差点を判別した際、若干左に機体が曲がる。
それを利用して、右回転を白になるまで繰り返し、直進という...
sub move()
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
OnFwd(OUT_A);
Off(OUT_AC);
}
&ref(./判別3.png,60%,交差点処理3);
?外側を進む&br;
外側を進むには他のプログラムと違い処理が複雑になる。
考えられるつくり方としては黒→白→黒→白と繰り返すまで回転を...
工程が増えるとミスする確立が高くなるので今回は下に書いた...
その後、move()をもう一度使用し回転している。
sub turn2()//内側の交差点移動処理
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(20);
Off(OUT_AC);
move();
}
*プログラムの全体像 [#j62118fe]
#define TMAX 27 //何秒間黒ならループを抜けるか30だと...
#define Tyukan 44 //中間のしきい値+-2で黒白 +-4で大きく...
/*
交差点の説明
D側 4 C側
|
|
3--------------------------------1
|
|
A側 2 B側
*/
task main()
{
//目標
setting();
//*汚くなりそうなためあえてrepeat()を使っていない
go();//一度目の交差点(S)1から2へ
turn1();
go();//2度目の交差点(P)4から1へ
turn1();
go();//3度目の交差点(Q1) 2から4へ
move();
go();//4度目の交差点(Q2) 3から1へ
move();
go();//5度目の交差点(R) 4から3へ
turn2();
go();//5度目の交差点(P) 2から3へ
turn1();
go();//end
}
sub setting()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
SetPower(OUT_AC,5);
}
sub go()
{
ClearTimer(0);//タイマ1の初期化
while(FastTimer(0) < TMAX){
if(SENSOR_2 >Tyukan+4)//白
{ //大きく右旋回
OnFwd(OUT_A);
OnRev(OUT_C);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan+2)//しろっぽい
{ //右旋回
Off(OUT_A);
OnFwd(OUT_A);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan)//中間点
{ //直進
OnFwd(OUT_AC);
ClearTimer(0);
}
else if(SENSOR_2 > Tyukan-2)//黒っぽい
{ //左旋回
Off(OUT_C);
OnFwd(OUT_C);
}
else
{ //大きく左旋回
OnFwd(OUT_C);
OnRev(OUT_A);
}
}
Off(OUT_AC);//交差点のため停止
PlaySound(SOUND_CLICK);//確認音
Wait(100);//1秒停止
}
sub move()
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
OnFwd(OUT_A);
Off(OUT_AC);
}
sub turn1()//内側の交差点移動処理
{
while(SENSOR_2 < Tyukan+5)//センサ値が中間より小さい間
{
OnFwd(OUT_C);
}
Off(OUT_AC);
}
sub turn2()//内側の交差点移動処理
{
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(20);
Off(OUT_AC);
move();
}
*課題の感想 [#bbb8c6fd]
今回は前回と違い、センサーも含めた構造になり処理も複雑化...
ロボの構造、プログラムの中身もよりいっそう面白い中身にな...
ただ、自分はプログラムだけで問題を解決しようとしてしまう...
時間がかかってしまった。場合によっては機体のほうを改善し...
ときもあることを忘れてはいけない。
また今回は中間試験や家のアクシデントも重なり、時間に余裕...
だがいつも忙しかった訳ではない。課題が近くなってから急に...
暇なときに少しでも作業をする癖をつけて最後のロボコンに望...
ページ名: