2016a/Member/Tea/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2016a/Member]]
&size(30){目次};
#contents
*課題2 [#m0930383]
詳しい説明ページ[[2016a/Mission2]]
#br
今回は、ライントレースをするために下にあるコースの作成か...
黒線の幅は20mmでライントレースをさせる。コースは全部で3種...
私は、「A地点からB地点まで」のコースを担当した。~
#br
#ref(2016a/Member/Tea/Mission2/コース.png,70%,制作したコ...
(Fig.1 制作したコース)~
**A地点からB地点へ [#ge64c2a9]
&size(20){?A地点スタート➡?P直進(交差点)➡?Q...
#ref(2016a/Member/Tea/Mission2/Aコース経路.jpg,90%,Ae...
(Fig.2 A➡Bコース図)
*ロボット概要 [#e15eb3ea]
今回、ロボット制作に時間を取られることはなかった。~
**正面 [#cdc21caf]
ロボット前方中心に光センサーを装着。
#ref(2016a/Member/Tea/Mission2/正面1.jpg,100%,ロボット正面)
(Fig.3 ロボット正面)
**側面 [#x64a5b4e]
#ref(2016a/Member/Tea/Mission2/横1.jpg,100%,ロボット側面)
(Fig.4 ロボット側面)
**裏側 [#lda6ab1c]
赤枠に囲われた所が、今回ライントレースを行うために必要な...
#ref(2016a/Member/Tea/Mission2/裏1.jpg,100%,ロボット裏側)
(Fig.5 ロボット裏側)
*ライントレース概要 [#g3fc2c2e]
ライントレースをするために、&size(15){黒線左側};を走らせ...
私が担当したA➡Bコースは、交差点で直進と左折だけを...
**直線 [#j2ccd8e4]
(1)センサーが黒と判断したとき、左旋回または左折をして方向...
#br
(2)センサーが白と判断したとき、右旋回または右折をして方向...
#br
(3)センサーが薄黒と判断したとき、直進して進む。~
#br
(1)〜(3)を繰り返して直線を進む。
#ref(2016a/Member/Tea/Mission2/ライントレース1.png,40%,直...
(Fig.6 直線のライントレース)
**交差点(直進) [#fe911fa3]
センサーが交差点と判断したとき(車体が大きく傾くことなく交...
その後、ライントレースで進む。
#ref(2016a/Member/Tea/Mission2/直進.png,60%,交差点を直進)
(Fig.7 交差点を直進)
**交差点(左折) [#m04d15b2]
センサーが交差点と判断したとき、車体を左旋回させ左の黒線...
その後、ライントレースで進むと左折ができる。
#ref(2016a/Member/Tea/Mission2/左折.jpg,30%,交差点を左折)
(Fig.8 交差点を左折)
*プログラム概要 [#b10f8bdd]
**定義 [#ba28666c]
定義する閾値は4つ。これにより細かい動作により動きに無駄を...
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
スピードは、2種類。速いとセンサーの判断が鈍くなったり曲...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
交差点を直進するときの動作時間。
#define TIME_CROSS 230 //交差点を渡る時の時間
大切な定義。1回の判断で進む時間。nMAXとは、ある同じ動作で...
#define STEP 1 //1回の判定で進む時間
#define nMAX 280 //交差点での黒の判定基準
サブルーチンで使う基本動作を変数で定義。
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd...
交差点で動作するとき1回止まる。
#define short_break Off(OUT_BC); Wait(500); /...
**サブルーチン [#ac6b450c]
必要なすべての動作をサブルーチンにした。~
定義された基本動作を使い、変数を変えるだけで各動作を簡単...
sub go_forward() //直進
{
move_RL(SPEED_H,SPEED_H);
}
sub turn_left_A() //左折
{
move_RL(SPEED_L,0);
}
sub turn_left_B() //左旋回
{
move_RL(SPEED_L,-SPEED_L);
}
sub turn_right_A() //右折
{
move_RL(0, SPEED_L);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,SPEED_L);
}
sub go_crossline() //交差点を渡る
{
move_RL(SPEED_H,SPEED_H);
Wait(TIME_CROSS);short_break;
}
sub left_crossline() //交差点を左折
{
move_RL(SPEED_L,-SPEED_L);
Wait(1400);short_break;
}
**メインプログラム [#xb17aafa]
&size(18){注:交差点は4回しかないが、最後B地点に入るとき...
#ref(2016a/Member/Tea/Mission2/ゴール1.png,30%,B地点へ入る)
(Fig.9 B地点へ入る)~
#br
以下、プログラム~
プログラムは、交差点の判定を5回行うまで動き続けます。
task main ()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 5) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)が...
if (SENSOR_1 < THRES1) { //もし黒のと...
turn_left_B();
n_black++;
} else { //そうでない...
if (SENSOR_1 < THRES2) { //もし黒に...
turn_left_A();
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
go_forward();
} else if (SENSOR_1 < THRES4) { //白に近い...
turn_right_A();
} else { //白のとき...
turn_right_B();
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ず...
}
ここまでで、センサーが&size(15){n_blackの(黒である)回数が...
#br
交差点と判断した後、交差点の数をカウントしながら交差点で...
簡単に示すと、~
&size(15){交差点3回目までは交差点を直進➡交差点4回...
if (m_kousa < 3) { //もし交差点が3回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
go_crossline();
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 4) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
turn_left_B();
Wait(1100);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
go_forward();
Wait(1500);
Off(OUT_BC);
m_kousa++; //m_kousa(交差点)=5回目と...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
**全体 [#lb24f140]
ここに、全体のプログラムを載せておく。これをコピーして試...
しかし、他のコースでは閾値などが異なる可能性があるので注...
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
#define TIME_CROSS 230 //交差点を渡る時の時間
#define STEP 1 //1回の判定で進む時間
#define nMAX 280 //交差点での黒の判定基準
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd...
#define short_break Off(OUT_BC); Wait(500); /...
sub go_forward() //直進
{
move_RL(SPEED_H,SPEED_H);
}
sub turn_left_A() //左折
{
move_RL(SPEED_L,0);
}
sub turn_left_B() //左旋回
{
move_RL(SPEED_L,-SPEED_L);
}
sub turn_right_A() //右折
{
move_RL(0, SPEED_L);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,SPEED_L);
}
sub go_crossline() //交差点を渡る
{
move_RL(SPEED_H,SPEED_H);
Wait(TIME_CROSS);short_break;
}
sub left_crossline() //交差点を左折
{
move_RL(SPEED_L,-SPEED_L);
Wait(1400);short_break;
}
task main ()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 5) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)が...
if (SENSOR_1 < THRES1) { //もし黒のと...
turn_left_B();
n_black++;
} else { //そうでない...
if (SENSOR_1 < THRES2) { //もし黒に...
turn_left_A();
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
go_forward();
} else if (SENSOR_1 < THRES4) { //白に近い...
turn_right_A();
} else { //白のとき...
turn_right_B();
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ず...
}
if (m_kousa < 3) { //もし交差点が3回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
go_crossline();
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 4) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
turn_left_B();
Wait(1100);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
go_forward();
Wait(1500);
Off(OUT_BC);
m_kousa++; //m_kousa(交差点)=5回目と...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
*結果 [#l930ae1f]
正確にライントレースをすることができ、交差点もすべて判定...
特に直線で、必ずロボットが直進だけをすることができ時間短...
**タイム [#z558a545]
54.33秒
*感想&反省 [#qe40c6b3]
今回、課題通りに目的を達成することができてよかった。~
プログラムも同じことを書くことがなく、論理的に順序良く組...
ただ、サブルーチンでライントレースの動きを作っればメイン...
次の課題も、うまく班員とクリアしていきたい。
終了行:
[[2016a/Member]]
&size(30){目次};
#contents
*課題2 [#m0930383]
詳しい説明ページ[[2016a/Mission2]]
#br
今回は、ライントレースをするために下にあるコースの作成か...
黒線の幅は20mmでライントレースをさせる。コースは全部で3種...
私は、「A地点からB地点まで」のコースを担当した。~
#br
#ref(2016a/Member/Tea/Mission2/コース.png,70%,制作したコ...
(Fig.1 制作したコース)~
**A地点からB地点へ [#ge64c2a9]
&size(20){?A地点スタート➡?P直進(交差点)➡?Q...
#ref(2016a/Member/Tea/Mission2/Aコース経路.jpg,90%,Ae...
(Fig.2 A➡Bコース図)
*ロボット概要 [#e15eb3ea]
今回、ロボット制作に時間を取られることはなかった。~
**正面 [#cdc21caf]
ロボット前方中心に光センサーを装着。
#ref(2016a/Member/Tea/Mission2/正面1.jpg,100%,ロボット正面)
(Fig.3 ロボット正面)
**側面 [#x64a5b4e]
#ref(2016a/Member/Tea/Mission2/横1.jpg,100%,ロボット側面)
(Fig.4 ロボット側面)
**裏側 [#lda6ab1c]
赤枠に囲われた所が、今回ライントレースを行うために必要な...
#ref(2016a/Member/Tea/Mission2/裏1.jpg,100%,ロボット裏側)
(Fig.5 ロボット裏側)
*ライントレース概要 [#g3fc2c2e]
ライントレースをするために、&size(15){黒線左側};を走らせ...
私が担当したA➡Bコースは、交差点で直進と左折だけを...
**直線 [#j2ccd8e4]
(1)センサーが黒と判断したとき、左旋回または左折をして方向...
#br
(2)センサーが白と判断したとき、右旋回または右折をして方向...
#br
(3)センサーが薄黒と判断したとき、直進して進む。~
#br
(1)〜(3)を繰り返して直線を進む。
#ref(2016a/Member/Tea/Mission2/ライントレース1.png,40%,直...
(Fig.6 直線のライントレース)
**交差点(直進) [#fe911fa3]
センサーが交差点と判断したとき(車体が大きく傾くことなく交...
その後、ライントレースで進む。
#ref(2016a/Member/Tea/Mission2/直進.png,60%,交差点を直進)
(Fig.7 交差点を直進)
**交差点(左折) [#m04d15b2]
センサーが交差点と判断したとき、車体を左旋回させ左の黒線...
その後、ライントレースで進むと左折ができる。
#ref(2016a/Member/Tea/Mission2/左折.jpg,30%,交差点を左折)
(Fig.8 交差点を左折)
*プログラム概要 [#b10f8bdd]
**定義 [#ba28666c]
定義する閾値は4つ。これにより細かい動作により動きに無駄を...
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
スピードは、2種類。速いとセンサーの判断が鈍くなったり曲...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
交差点を直進するときの動作時間。
#define TIME_CROSS 230 //交差点を渡る時の時間
大切な定義。1回の判断で進む時間。nMAXとは、ある同じ動作で...
#define STEP 1 //1回の判定で進む時間
#define nMAX 280 //交差点での黒の判定基準
サブルーチンで使う基本動作を変数で定義。
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd...
交差点で動作するとき1回止まる。
#define short_break Off(OUT_BC); Wait(500); /...
**サブルーチン [#ac6b450c]
必要なすべての動作をサブルーチンにした。~
定義された基本動作を使い、変数を変えるだけで各動作を簡単...
sub go_forward() //直進
{
move_RL(SPEED_H,SPEED_H);
}
sub turn_left_A() //左折
{
move_RL(SPEED_L,0);
}
sub turn_left_B() //左旋回
{
move_RL(SPEED_L,-SPEED_L);
}
sub turn_right_A() //右折
{
move_RL(0, SPEED_L);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,SPEED_L);
}
sub go_crossline() //交差点を渡る
{
move_RL(SPEED_H,SPEED_H);
Wait(TIME_CROSS);short_break;
}
sub left_crossline() //交差点を左折
{
move_RL(SPEED_L,-SPEED_L);
Wait(1400);short_break;
}
**メインプログラム [#xb17aafa]
&size(18){注:交差点は4回しかないが、最後B地点に入るとき...
#ref(2016a/Member/Tea/Mission2/ゴール1.png,30%,B地点へ入る)
(Fig.9 B地点へ入る)~
#br
以下、プログラム~
プログラムは、交差点の判定を5回行うまで動き続けます。
task main ()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 5) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)が...
if (SENSOR_1 < THRES1) { //もし黒のと...
turn_left_B();
n_black++;
} else { //そうでない...
if (SENSOR_1 < THRES2) { //もし黒に...
turn_left_A();
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
go_forward();
} else if (SENSOR_1 < THRES4) { //白に近い...
turn_right_A();
} else { //白のとき...
turn_right_B();
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ず...
}
ここまでで、センサーが&size(15){n_blackの(黒である)回数が...
#br
交差点と判断した後、交差点の数をカウントしながら交差点で...
簡単に示すと、~
&size(15){交差点3回目までは交差点を直進➡交差点4回...
if (m_kousa < 3) { //もし交差点が3回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
go_crossline();
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 4) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
turn_left_B();
Wait(1100);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
go_forward();
Wait(1500);
Off(OUT_BC);
m_kousa++; //m_kousa(交差点)=5回目と...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
**全体 [#lb24f140]
ここに、全体のプログラムを載せておく。これをコピーして試...
しかし、他のコースでは閾値などが異なる可能性があるので注...
#define THRES1 39 //閾値1(黒、黒線中央)
#define THRES2 43 //閾値2(黒に近い黒、黒線中央から少...
#define THRES3 53 //閾値3(薄黒、黒線中央と境界の中間)
#define THRES4 59 //閾値4(白に近い黒、黒線境界から少...
#define SPEED_H 40 //速いスピード
#define SPEED_L 17 //遅いスピード
#define TIME_CROSS 230 //交差点を渡る時の時間
#define STEP 1 //1回の判定で進む時間
#define nMAX 280 //交差点での黒の判定基準
#define move_RL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd...
#define short_break Off(OUT_BC); Wait(500); /...
sub go_forward() //直進
{
move_RL(SPEED_H,SPEED_H);
}
sub turn_left_A() //左折
{
move_RL(SPEED_L,0);
}
sub turn_left_B() //左旋回
{
move_RL(SPEED_L,-SPEED_L);
}
sub turn_right_A() //右折
{
move_RL(0, SPEED_L);
}
sub turn_right_B() //右旋回
{
move_RL(-SPEED_L,SPEED_L);
}
sub go_crossline() //交差点を渡る
{
move_RL(SPEED_H,SPEED_H);
Wait(TIME_CROSS);short_break;
}
sub left_crossline() //交差点を左折
{
move_RL(SPEED_L,-SPEED_L);
Wait(1400);short_break;
}
task main ()
{
SetSensorLight(S1);
int n_black=0; //黒をカウント
int m_kousa=0; //交差点をカウント
while(m_kousa < 5) { //交差点が5回目未...
while (n_black < nMAX) { //n_black(黒)が...
if (SENSOR_1 < THRES1) { //もし黒のと...
turn_left_B();
n_black++;
} else { //そうでない...
if (SENSOR_1 < THRES2) { //もし黒に...
turn_left_A();
} else if (SENSOR_1 < THRES3) { //薄黒⇔黒に...
go_forward();
} else if (SENSOR_1 < THRES4) { //白に近い...
turn_right_A();
} else { //白のとき...
turn_right_B();
}
n_black=0; //n_black(黒)...
}
Wait(STEP); //上記の動作を、STEP(1回)ず...
}
if (m_kousa < 3) { //もし交差点が3回...
short_break;
PlaySound(SOUND_DOUBLE_BEEP); //直進の合図
go_crossline();
m_kousa++; //交差点をカウント
n_black=0; //n_blackを0に戻すことでライ...
} else if (m_kousa < 4) { //交差点が4回目のと...
short_break;
PlaySound(SOUND_DOWN); //左折の合図
turn_left_B();
Wait(1100);
m_kousa++;
n_black=0;
} else { //B地点前T字を交差点5回目...
short_break;
go_forward();
Wait(1500);
Off(OUT_BC);
m_kousa++; //m_kousa(交差点)=5回目と...
PlaySound(SOUND_FAST_UP); //終了の合図
}
}
}
*結果 [#l930ae1f]
正確にライントレースをすることができ、交差点もすべて判定...
特に直線で、必ずロボットが直進だけをすることができ時間短...
**タイム [#z558a545]
54.33秒
*感想&反省 [#qe40c6b3]
今回、課題通りに目的を達成することができてよかった。~
プログラムも同じことを書くことがなく、論理的に順序良く組...
ただ、サブルーチンでライントレースの動きを作っればメイン...
次の課題も、うまく班員とクリアしていきたい。
ページ名: