2017a/Member/Kobakazu/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017a/Member]]
#contents
*課題? [#q952db12]
今回の課題は、光センサを利用して黒い線をたどることでゴー...
詳しくは[[こちらを参照>http://yakushi.shinshu-u.ac.jp/rob...
私はE地点直進コースを制作した。
*ロボット本体について [#h602091e]
&ref(2017a/Member/Kobakazu/Mission2/IMG_3.jpg,前方);
&ref(2017a/Member/Kobakazu/Mission2/IMG_4.jpg,横);
ライントレースに重要な光センサは、タイヤとセンサの位置が...
最初はアームのようなものをつけてもう少し機体の前方に設置...
2つのタイヤの間に設置してやってみたこともあるが、そうす...
よって、タイヤと光センサの位置が三角形くらいの形になるよ...
&ref(2017a/Member/Kobakazu/Mission2/IMG_1.jpg,裏);
&ref(2017a/Member/Kobakazu/Mission2/IMG_2.jpg,キャスター);
また、コースの中の一部に厳しいコーナーがあったのでできる...
そのためモーター間の距離は最小にし設置し、タイヤもできる...
後ろにはキャスターをつけることで小回りをきかせ、自由に動...
*プログラムについて [#ie9c12a8]
**マクロ [#u3b2f1f8]
#define go_forward OnFwd(OUT_AC);//前進
#define turn_right OnFwd(OUT_A);//右折
#define turn_left OnFwd(OUT_C);//左折
#define migisenkai OnFwd(OUT_A); OnRev(OUT_C);//右旋回
#define hidarisenkai OnFwd(OUT_C); OnRev(OUT_A);//左旋回
#define power(s) SetPower(OUT_AC,s); //モーターの出力が...
#define sound1 PlaySound(SOUND_UP);//SOUND_UPを鳴らす
#define sound2 PlaySound(SOUND_DOWN);Wait(100);//SOUND_D...
#define GO(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//時間...
必要となる動作を定義した。 それぞれの定義についてはコメ...
**サブルーチン [#h31d7a69]
***ライントレース [#he81bb87]
ライントレースは光センサの値で右旋回したり左旋回してコー...
詳しい光センサの値はプログラムを見てほしい。 たどるコー...
私はコースの左側をたどるプログラムなので交差点では基本的...
sub trace()
{
ClearTimer(0);
while (FastTimer(0)<=30){
if (SENSOR_1 > 49){//右旋回
migisenkai; ClearTimer(0);
} else if (SENSOR_1 > 44){//右折
turn_right; ClearTimer(0);
} else if (SENSOR_1 > 42){//前進
go_forward; ClearTimer(0);
} else if (SENSOR_1 > 39){//左折
turn_left; ClearTimer(0);
} else if (SENSOR_1 > 35){//左旋回
hidarisenkai;//タイマをリセットせずに左回転...
}
}
Off(OUT_AC);
}
上のサブルーチンではFastTimerの値が30以上の値になった場合...
sub trace2()
{
ClearTimer(0);
while (FastTimer(0)<=25){
if (SENSOR_1 > 49){//右旋回
migisenkai; ClearTimer(0);
} else if (SENSOR_1 > 44){//右折
turn_right; ClearTimer(0);
} else if (SENSOR_1 > 40){//前進
go_forward; ClearTimer(0);
} else if (SENSOR_1 > 36){//左折
turn_left; ClearTimer(0);
} else if (SENSOR_1 > 33){//左旋回
hidarisenkai;//タイマをリセットせずに左旋回...
}
}
Off(OUT_AC);
}
上のサブルーチンではFastTimerの値が25以上の値になった時に...
sub trace3()
{
ClearTimer(0);
ClearTimer(1);
while ((FastTimer(0)<=30) || (FastTimer(1)<=1500)){/...
if (SENSOR_1 > 49){//右旋回
migisenkai;ClearTimer(0);
} else if (SENSOR_1 > 46){//右折
turn_right;ClearTimer(0);
} else if (SENSOR_1 > 40){//前進
go_forward;ClearTimer(0);
} else if (SENSOR_1 > 35){//左折
turn_left;ClearTimer(0);
} else if (SENSOR_1 > 33){//左旋回
hidarisenkai;//タイマをリセットせずに左旋回...
}
}
Off(OUT_AC);
}
上のサブルーチンは上の2つのサブルーチンとは違いタイマを2...
反対にループを抜け出す条件はFastTimer(0)の値が30より大き...
このサブルーチンは急なカーブがあるG-Hの区間で用いた。Fast...
これにより困難であった急カーブを交差点だと認識することな...
***交差点での動作 [#zbe48e8d]
sub hidari1()
{
sound1;
go_forward;
Wait(20);
hidarisenkai;
Wait(40);
turn_left;
Wait(30);
}
sub hidari2()
{
sound2;
go_forward;
Wait(20);
hidarisenkai;
Wait(40);
turn_left;
Wait(30);
}
上のサブルーチンは左方向に進むときに用いた。hidari1()はSO...
で用い、hidari2()はSOUND_DOWNを鳴らして一秒停止する必要が...
前進、左旋回、左回転を組み合わせることによって曲がってか...
sub tyokushin()
{
sound2;
turn_right;//左に傾いた分を右に向かせる
Wait(30);
go_forward;//前進
Wait(40);
}
上のサブルーチンはT地点で直進するために利用した。
sub RS()
{
sound1;
turn_right;//停止した時は左を向いているので右回転す...
Wait(70);
}
上のサブルーチンはR(一回目)、S(二回目)の地点で直進するた...
sub Goal()
{
sound2;
turn_right;//左に傾いた分を右に向かせる
Wait(30);
GO(150);
}
上のサブルーチンは最後にゴールの枠に侵入するために利用し...
**タスクメイン [#k7588b6b]
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
power(0);//モーターの出力を調整
GO(100);//スタート枠から前進
trace();//A-F区間
hidari1();//Fを左折
trace2();//F-Q区間
hidari2();//Qを左方向
trace2();//Q-R区間
RS();//Rを直進
trace2();//R-S区間
hidari1();//Sを左方向
trace();//S-G区間
hidari1();//Gを左折
trace3();//G-H区間
hidari1();//Hを左折
trace();//H-T区間
tyokushin();//Tを直進
trace();//T-T区間
tyokushin();//Tを直進
trace2();//T-R区間
hidari2();//Rを左方向
trace2();//R-S区間
RS();//Sを直進
trace2();//S-P区間
hidari1();//Pを左方向
trace();//P-E区間
hidari2();//Eを左折
trace();//E-A区間
Goal();//ゴール!!
}
タスクメインの中身、同じ動作をする部分が多かったのでサブ...
*まとめ [#xb7d541a]
**問題点・良い点 [#d144effe]
交差点での反応が完全ではなく、交差点だと判断できずにスル...
モーターのパワーの調整でpower1だと速すぎて交差点が反応で...
前回の課題の問題点であった、タスクメインの中身を簡潔にす...
**感想 [#ib276b26]
センサの反応によって動作を行うため課題?よりも複雑なプログ...
終了行:
[[2017a/Member]]
#contents
*課題? [#q952db12]
今回の課題は、光センサを利用して黒い線をたどることでゴー...
詳しくは[[こちらを参照>http://yakushi.shinshu-u.ac.jp/rob...
私はE地点直進コースを制作した。
*ロボット本体について [#h602091e]
&ref(2017a/Member/Kobakazu/Mission2/IMG_3.jpg,前方);
&ref(2017a/Member/Kobakazu/Mission2/IMG_4.jpg,横);
ライントレースに重要な光センサは、タイヤとセンサの位置が...
最初はアームのようなものをつけてもう少し機体の前方に設置...
2つのタイヤの間に設置してやってみたこともあるが、そうす...
よって、タイヤと光センサの位置が三角形くらいの形になるよ...
&ref(2017a/Member/Kobakazu/Mission2/IMG_1.jpg,裏);
&ref(2017a/Member/Kobakazu/Mission2/IMG_2.jpg,キャスター);
また、コースの中の一部に厳しいコーナーがあったのでできる...
そのためモーター間の距離は最小にし設置し、タイヤもできる...
後ろにはキャスターをつけることで小回りをきかせ、自由に動...
*プログラムについて [#ie9c12a8]
**マクロ [#u3b2f1f8]
#define go_forward OnFwd(OUT_AC);//前進
#define turn_right OnFwd(OUT_A);//右折
#define turn_left OnFwd(OUT_C);//左折
#define migisenkai OnFwd(OUT_A); OnRev(OUT_C);//右旋回
#define hidarisenkai OnFwd(OUT_C); OnRev(OUT_A);//左旋回
#define power(s) SetPower(OUT_AC,s); //モーターの出力が...
#define sound1 PlaySound(SOUND_UP);//SOUND_UPを鳴らす
#define sound2 PlaySound(SOUND_DOWN);Wait(100);//SOUND_D...
#define GO(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);//時間...
必要となる動作を定義した。 それぞれの定義についてはコメ...
**サブルーチン [#h31d7a69]
***ライントレース [#he81bb87]
ライントレースは光センサの値で右旋回したり左旋回してコー...
詳しい光センサの値はプログラムを見てほしい。 たどるコー...
私はコースの左側をたどるプログラムなので交差点では基本的...
sub trace()
{
ClearTimer(0);
while (FastTimer(0)<=30){
if (SENSOR_1 > 49){//右旋回
migisenkai; ClearTimer(0);
} else if (SENSOR_1 > 44){//右折
turn_right; ClearTimer(0);
} else if (SENSOR_1 > 42){//前進
go_forward; ClearTimer(0);
} else if (SENSOR_1 > 39){//左折
turn_left; ClearTimer(0);
} else if (SENSOR_1 > 35){//左旋回
hidarisenkai;//タイマをリセットせずに左回転...
}
}
Off(OUT_AC);
}
上のサブルーチンではFastTimerの値が30以上の値になった場合...
sub trace2()
{
ClearTimer(0);
while (FastTimer(0)<=25){
if (SENSOR_1 > 49){//右旋回
migisenkai; ClearTimer(0);
} else if (SENSOR_1 > 44){//右折
turn_right; ClearTimer(0);
} else if (SENSOR_1 > 40){//前進
go_forward; ClearTimer(0);
} else if (SENSOR_1 > 36){//左折
turn_left; ClearTimer(0);
} else if (SENSOR_1 > 33){//左旋回
hidarisenkai;//タイマをリセットせずに左旋回...
}
}
Off(OUT_AC);
}
上のサブルーチンではFastTimerの値が25以上の値になった時に...
sub trace3()
{
ClearTimer(0);
ClearTimer(1);
while ((FastTimer(0)<=30) || (FastTimer(1)<=1500)){/...
if (SENSOR_1 > 49){//右旋回
migisenkai;ClearTimer(0);
} else if (SENSOR_1 > 46){//右折
turn_right;ClearTimer(0);
} else if (SENSOR_1 > 40){//前進
go_forward;ClearTimer(0);
} else if (SENSOR_1 > 35){//左折
turn_left;ClearTimer(0);
} else if (SENSOR_1 > 33){//左旋回
hidarisenkai;//タイマをリセットせずに左旋回...
}
}
Off(OUT_AC);
}
上のサブルーチンは上の2つのサブルーチンとは違いタイマを2...
反対にループを抜け出す条件はFastTimer(0)の値が30より大き...
このサブルーチンは急なカーブがあるG-Hの区間で用いた。Fast...
これにより困難であった急カーブを交差点だと認識することな...
***交差点での動作 [#zbe48e8d]
sub hidari1()
{
sound1;
go_forward;
Wait(20);
hidarisenkai;
Wait(40);
turn_left;
Wait(30);
}
sub hidari2()
{
sound2;
go_forward;
Wait(20);
hidarisenkai;
Wait(40);
turn_left;
Wait(30);
}
上のサブルーチンは左方向に進むときに用いた。hidari1()はSO...
で用い、hidari2()はSOUND_DOWNを鳴らして一秒停止する必要が...
前進、左旋回、左回転を組み合わせることによって曲がってか...
sub tyokushin()
{
sound2;
turn_right;//左に傾いた分を右に向かせる
Wait(30);
go_forward;//前進
Wait(40);
}
上のサブルーチンはT地点で直進するために利用した。
sub RS()
{
sound1;
turn_right;//停止した時は左を向いているので右回転す...
Wait(70);
}
上のサブルーチンはR(一回目)、S(二回目)の地点で直進するた...
sub Goal()
{
sound2;
turn_right;//左に傾いた分を右に向かせる
Wait(30);
GO(150);
}
上のサブルーチンは最後にゴールの枠に侵入するために利用し...
**タスクメイン [#k7588b6b]
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
power(0);//モーターの出力を調整
GO(100);//スタート枠から前進
trace();//A-F区間
hidari1();//Fを左折
trace2();//F-Q区間
hidari2();//Qを左方向
trace2();//Q-R区間
RS();//Rを直進
trace2();//R-S区間
hidari1();//Sを左方向
trace();//S-G区間
hidari1();//Gを左折
trace3();//G-H区間
hidari1();//Hを左折
trace();//H-T区間
tyokushin();//Tを直進
trace();//T-T区間
tyokushin();//Tを直進
trace2();//T-R区間
hidari2();//Rを左方向
trace2();//R-S区間
RS();//Sを直進
trace2();//S-P区間
hidari1();//Pを左方向
trace();//P-E区間
hidari2();//Eを左折
trace();//E-A区間
Goal();//ゴール!!
}
タスクメインの中身、同じ動作をする部分が多かったのでサブ...
*まとめ [#xb7d541a]
**問題点・良い点 [#d144effe]
交差点での反応が完全ではなく、交差点だと判断できずにスル...
モーターのパワーの調整でpower1だと速すぎて交差点が反応で...
前回の課題の問題点であった、タスクメインの中身を簡潔にす...
**感想 [#ib276b26]
センサの反応によって動作を行うため課題?よりも複雑なプログ...
ページ名: