2016a/Member/yamazaki/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
目次
#contents
*ロボット本体の説明 [#mfcb7c3b]
今回はドライブベースの黒ブロックを短くして前の出っ張りを...
先生のアドバイスを参考に、タイヤを減らして小回りが利くよ...
無駄な部分が減り、動きも軽くなった。
&ref(1049.jpg);
赤丸の部分を合わせることで光センサを取り付けた。ブロック...
&ref(1053.jpg);
*プログラムの説明 [#cac8270b]
**数値の定義 [#q454df81]
光センサの数値を確認し、白と黒の中間値を定義した。
#define MIDDLE 50
**マクロの定義 [#g474f343]
ライントレースをするにあたって必要な動きを5つ定義した。Se...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnFwd...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); OnFw...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); Of...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); OnR...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
**ライントレース [#k39e301f]
***一本道 [#w8fcfe51]
ライントレースは、線の左側をなぞっていく方法にした。今い...
黒 → 左旋回~
中間に近い黒 → 左曲がり~
中間 → 直進~
中間に近い白 → 右曲がり~
白 → 右旋回~
***交差点の判別 [#c87808dd]
交差点では機体は線の左に沿って進んでいるので、左に曲がろ...
これを実現するためにFastTimerを使い、左旋回の場合はカウン...
sub trace() //黒線に沿って移動
{
while(FastTimer(0) < 25) //左旋回が一定時間続くまでループ
{
if(SENSOR_2 < MIDDLE-5) //黒
{
turn_left2; //左旋回
}
else
{
if(SENSOR_2 < MIDDLE-2) //中間に近い黒
{
turn_left1; //左曲がり
}
else if(SENSOR_2 < MIDDLE+3) //中間
{
go_forward; //直進
}
else if(SENSOR_2 < MIDDLE+6) //中間に近い白
{
turn_right1; //右曲がり
}
else //白
{
turn_right2; //右旋回
}
ClearTimer(0);
}
}
}
**交差点での動作 [#ye8be076]
交差点と判断した場合、動作を停止し、音を鳴らし、1秒待機す...
sub intersection() //交差点確認
{
Off(OUT_AC);
PlaySound(SOUND_UP);
Wait(100);
}
交差点からの移動は3種類あり、それぞれ旋回や前進を使い、行...
しかし、この方法だと電池の残量の影響で数値を変えなければ...
sub i_forward() //直進
{
turn_right2;
Wait(25);
go_forward;
Wait(50);
Off(OUT_AC);
}
sub i_left() //左折
{
turn_left2;
Wait(30);
Off(OUT_AC);
}
sub i_right() //右折
{
turn_right2;
Wait(25);
go_forward;
Wait(30);
turn_right2;
Wait(80);
Off(OUT_AC);
}
**メインプログラム [#u5adecb3]
変数cで交差点を数え、switch文で対応した動作をするようにし...
線の中からスタートするということを考えていなかったので、...
A地点の線まできたら交差点と認識するので、中に入るための方...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int c=1; //交差点のカウント
go_forward; //黒い線まで直進
Wait(80);
while(true)
{
ClearTimer(0); //タイマリセット
trace();
intersection();
switch(c)
{
case 1: //1番目の交差点
i_left();
break;
case 2: //2番目の交差点 同様に続く
i_left();
break;
case 3:
i_forward();
break;
case 4:
i_forward();
break;
case 5:
i_right();
break;
case 6:
i_left();
break;
case 7: //A地点への方向調整
i_forward();
break;
}
c++;
if(c > 7)
{
break;
}
}
go_forward; //A地点の中まで直進
Wait(70);
Off(OUT_AC); //停止
}
*結果 [#z8723a8c]
私は、C地点からA地点へ移動する~
C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A...
のコースです。
タイムは57秒でした。
*感想・考察 [#f4d4589a]
今回は、前回よりもロボットの制作が早く終わり、プログラム...
交差点での動きをもう少しきれいにしたかった。~
1分を切るタイムを出すことができてよかった。~
最初から最後までほぼ確実に到達することができ、安定したプ...
これ以上タイムを縮めるには、直線はほぼ完璧に進むことがで...
終了行:
[[2016a/Member]]
目次
#contents
*ロボット本体の説明 [#mfcb7c3b]
今回はドライブベースの黒ブロックを短くして前の出っ張りを...
先生のアドバイスを参考に、タイヤを減らして小回りが利くよ...
無駄な部分が減り、動きも軽くなった。
&ref(1049.jpg);
赤丸の部分を合わせることで光センサを取り付けた。ブロック...
&ref(1053.jpg);
*プログラムの説明 [#cac8270b]
**数値の定義 [#q454df81]
光センサの数値を確認し、白と黒の中間値を定義した。
#define MIDDLE 50
**マクロの定義 [#g474f343]
ライントレースをするにあたって必要な動きを5つ定義した。Se...
#define turn_left1 SetPower(OUT_AC,2); Off(OUT_A); OnFwd...
#define turn_left2 SetPower(OUT_A,1); OnRev(OUT_A); OnFw...
#define turn_right1 SetPower(OUT_AC,2); OnFwd(OUT_A); Of...
#define turn_right2 SetPower(OUT_C,1); OnFwd(OUT_A); OnR...
#define go_forward SetPower(OUT_AC,7); OnFwd(OUT_AC); ...
**ライントレース [#k39e301f]
***一本道 [#w8fcfe51]
ライントレースは、線の左側をなぞっていく方法にした。今い...
黒 → 左旋回~
中間に近い黒 → 左曲がり~
中間 → 直進~
中間に近い白 → 右曲がり~
白 → 右旋回~
***交差点の判別 [#c87808dd]
交差点では機体は線の左に沿って進んでいるので、左に曲がろ...
これを実現するためにFastTimerを使い、左旋回の場合はカウン...
sub trace() //黒線に沿って移動
{
while(FastTimer(0) < 25) //左旋回が一定時間続くまでループ
{
if(SENSOR_2 < MIDDLE-5) //黒
{
turn_left2; //左旋回
}
else
{
if(SENSOR_2 < MIDDLE-2) //中間に近い黒
{
turn_left1; //左曲がり
}
else if(SENSOR_2 < MIDDLE+3) //中間
{
go_forward; //直進
}
else if(SENSOR_2 < MIDDLE+6) //中間に近い白
{
turn_right1; //右曲がり
}
else //白
{
turn_right2; //右旋回
}
ClearTimer(0);
}
}
}
**交差点での動作 [#ye8be076]
交差点と判断した場合、動作を停止し、音を鳴らし、1秒待機す...
sub intersection() //交差点確認
{
Off(OUT_AC);
PlaySound(SOUND_UP);
Wait(100);
}
交差点からの移動は3種類あり、それぞれ旋回や前進を使い、行...
しかし、この方法だと電池の残量の影響で数値を変えなければ...
sub i_forward() //直進
{
turn_right2;
Wait(25);
go_forward;
Wait(50);
Off(OUT_AC);
}
sub i_left() //左折
{
turn_left2;
Wait(30);
Off(OUT_AC);
}
sub i_right() //右折
{
turn_right2;
Wait(25);
go_forward;
Wait(30);
turn_right2;
Wait(80);
Off(OUT_AC);
}
**メインプログラム [#u5adecb3]
変数cで交差点を数え、switch文で対応した動作をするようにし...
線の中からスタートするということを考えていなかったので、...
A地点の線まできたら交差点と認識するので、中に入るための方...
task main()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int c=1; //交差点のカウント
go_forward; //黒い線まで直進
Wait(80);
while(true)
{
ClearTimer(0); //タイマリセット
trace();
intersection();
switch(c)
{
case 1: //1番目の交差点
i_left();
break;
case 2: //2番目の交差点 同様に続く
i_left();
break;
case 3:
i_forward();
break;
case 4:
i_forward();
break;
case 5:
i_right();
break;
case 6:
i_left();
break;
case 7: //A地点への方向調整
i_forward();
break;
}
c++;
if(c > 7)
{
break;
}
}
go_forward; //A地点の中まで直進
Wait(70);
Off(OUT_AC); //停止
}
*結果 [#z8723a8c]
私は、C地点からA地点へ移動する~
C地点 → S左折 → P左折 → Q直進 → Q直進 → R右折 → P左折 → A...
のコースです。
タイムは57秒でした。
*感想・考察 [#f4d4589a]
今回は、前回よりもロボットの制作が早く終わり、プログラム...
交差点での動きをもう少しきれいにしたかった。~
1分を切るタイムを出すことができてよかった。~
最初から最後までほぼ確実に到達することができ、安定したプ...
これ以上タイムを縮めるには、直線はほぼ完璧に進むことがで...
ページ名: