2019a/Member/Watanabe/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
*課題について [#b7ba7c24]
#ref(./image4.png,課題)
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
*ロボットについて [#w76e15bd]
#ref(./image1.jpeg,全体の写真)
#ref(./image2.jpeg,アーム部分)
↑全体のバランスを保つため,できるだけ部品を少なく,軽くし...
#ref(./image3.jpeg,裏側)
↑急カーブでも小回りがきくように横幅を小さくした.後ろ側の...
*プログラムについて [#g4b8f002]
光センサーの値が36から47の間で得られたので、これを5分割し...
47〜…白~
43〜47…白灰~
39〜43…灰~
36〜39…黒灰~
〜36…黒~
とした。
黒色を判別している時間をblack_timeとして定義して,交差点...
**定義 [#ncc5009d]
プログラムを簡略化するため、defineを用いた。
int black_time=30; //黒色を判別している時間...
#define migisenkai OnFwd(OUT_A); OnFwd(OUT_C); ...
#define usetsu OnFwd(OUT_A); Off(OUT_C); ...
#define chokushin OnFwd(OUT_A); OnRev(OUT_C); ...
#define sasetsu Off(OUT_A); OnRev(OUT_C); ...
#define hidarisenkai OnRev(OUT_A); OnRev(OUT_C); ...
#define koutai OnRev(OUT_A); OnFwd(OUT_C); ...
#define close OnFwd(OUT_B); Wait(20); Off(OUT_B)...
#define open OnRev(OUT_B); Wait(20); Off(OUT_B)...
**サブルーチン [#ke58e0df]
-follow_line…交差点まで黒線の左側でライントレースするサブ...
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //blac...
if(SENSOR_2>=47){ //...
migisenkai ClearTimer(0); //...
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ ...
usetsu ClearTimer(0); ...
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ ...
chokushin ClearTimer(0); /...
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ /...
sasetsu ClearTimer(0); ...
}else if(SENSOR_2<36){ //...
hidarisenkai } ...
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-follow_line2…交差点まで黒線の右側をライントレースするサ...
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //black_timeが3...
if(SENSOR_2<36){ //黒色の時
migisenkai //右に旋回
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ //黒...
usetsu ClearTimer(0); //右折,タイマー...
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ //...
chokushin ClearTimer(0); //直進,タイマー...
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ //...
sasetsu ClearTimer(0); //左折,タイマー...
}else if(SENSOR_2>=47){ //白色の時
hidarisenkai ClearTimer(0); //左に旋回,タ...
}
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-cross_line…交差点を渡るサブルーチン。
sub cross_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<47){ //白色になるまでの間
chokushin } //直進
while(SENSOR_2>36){ //黒色の間
usetu } //右折
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
**メインプログラム [#j16ef405]
task main(){
SetPower(OUT_B,1);
アームの開閉はモーターを少し動かすだけでいいので,モータ...
cross_line();
follow_line(); //MからK
最初,follow_lineが作動されなかったので前にcross_lineを書...
cross_line(); //Kの交差点を渡る
OnRev(OUT_C); Wait(60); Off(OUT_C); Wait(100); //...
close; //ピンポン玉をつかむ
koutai Wait(150); Off(OUT_AC); Wait(100); //K...
cross_line();
follow_line(); //Kまで
最初と同じ理由でcross_lineを書いた.
follow_line(); //KからJまで
black_time=20;follow_line(); //JからIまで
cross_line(); //Iの交差点を渡る
black_time=20;follow_line(); //IからHまで
直角ではないI,Hの交差点で止まるためにblack_timeを小さく...
cross_line(); //Hの交差点を渡る
follow_line(); //HからGまで
chokushin Wait(40); Off(OUT_AC); Wait(100);
ここからはラインの右側をトレースしたかったので線GFの右側...
follow_line2();
follow_line2(); //線GFからDまで
この部分も最初と同じくfollow_line2ひとつだと動作しなかっ...
cross_line(); //Dの交差点を渡る
follow_line(); //DからBまで
open; //アームを開く
hidarisenkai Wait(40); Off(OUT_AC); //ピンポン...
}
アームを開いた状態で左に旋回することでピンポン玉をゴール...
*まとめ [#r7c84318]
メインプログラムの中でなぜかfollow_lineが動作しないことが...
defineやサブルーチンを用いて簡潔なプログラムを書けたと思...
終了行:
[[2019a/Member]]
*課題について [#b7ba7c24]
#ref(./image4.png,課題)
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(...
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
*ロボットについて [#w76e15bd]
#ref(./image1.jpeg,全体の写真)
#ref(./image2.jpeg,アーム部分)
↑全体のバランスを保つため,できるだけ部品を少なく,軽くし...
#ref(./image3.jpeg,裏側)
↑急カーブでも小回りがきくように横幅を小さくした.後ろ側の...
*プログラムについて [#g4b8f002]
光センサーの値が36から47の間で得られたので、これを5分割し...
47〜…白~
43〜47…白灰~
39〜43…灰~
36〜39…黒灰~
〜36…黒~
とした。
黒色を判別している時間をblack_timeとして定義して,交差点...
**定義 [#ncc5009d]
プログラムを簡略化するため、defineを用いた。
int black_time=30; //黒色を判別している時間...
#define migisenkai OnFwd(OUT_A); OnFwd(OUT_C); ...
#define usetsu OnFwd(OUT_A); Off(OUT_C); ...
#define chokushin OnFwd(OUT_A); OnRev(OUT_C); ...
#define sasetsu Off(OUT_A); OnRev(OUT_C); ...
#define hidarisenkai OnRev(OUT_A); OnRev(OUT_C); ...
#define koutai OnRev(OUT_A); OnFwd(OUT_C); ...
#define close OnFwd(OUT_B); Wait(20); Off(OUT_B)...
#define open OnRev(OUT_B); Wait(20); Off(OUT_B)...
**サブルーチン [#ke58e0df]
-follow_line…交差点まで黒線の左側でライントレースするサブ...
sub follow_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //blac...
if(SENSOR_2>=47){ //...
migisenkai ClearTimer(0); //...
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ ...
usetsu ClearTimer(0); ...
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ ...
chokushin ClearTimer(0); /...
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ /...
sasetsu ClearTimer(0); ...
}else if(SENSOR_2<36){ //...
hidarisenkai } ...
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-follow_line2…交差点まで黒線の右側をライントレースするサ...
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(FastTimer(0)<black_time){ //black_timeが3...
if(SENSOR_2<36){ //黒色の時
migisenkai //右に旋回
}else if((SENSOR_2>=36)&&(SENSOR_2<39)){ //黒...
usetsu ClearTimer(0); //右折,タイマー...
}else if((SENSOR_2>=39)&&(SENSOR_2<43)){ //...
chokushin ClearTimer(0); //直進,タイマー...
}else if((SENSOR_2>=43)&&(SENSOR_2<47)){ //...
sasetsu ClearTimer(0); //左折,タイマー...
}else if(SENSOR_2>=47){ //白色の時
hidarisenkai ClearTimer(0); //左に旋回,タ...
}
}
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
-cross_line…交差点を渡るサブルーチン。
sub cross_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<47){ //白色になるまでの間
chokushin } //直進
while(SENSOR_2>36){ //黒色の間
usetu } //右折
Off(OUT_AC);
Wait(100);
ClearTimer(0);
}
**メインプログラム [#j16ef405]
task main(){
SetPower(OUT_B,1);
アームの開閉はモーターを少し動かすだけでいいので,モータ...
cross_line();
follow_line(); //MからK
最初,follow_lineが作動されなかったので前にcross_lineを書...
cross_line(); //Kの交差点を渡る
OnRev(OUT_C); Wait(60); Off(OUT_C); Wait(100); //...
close; //ピンポン玉をつかむ
koutai Wait(150); Off(OUT_AC); Wait(100); //K...
cross_line();
follow_line(); //Kまで
最初と同じ理由でcross_lineを書いた.
follow_line(); //KからJまで
black_time=20;follow_line(); //JからIまで
cross_line(); //Iの交差点を渡る
black_time=20;follow_line(); //IからHまで
直角ではないI,Hの交差点で止まるためにblack_timeを小さく...
cross_line(); //Hの交差点を渡る
follow_line(); //HからGまで
chokushin Wait(40); Off(OUT_AC); Wait(100);
ここからはラインの右側をトレースしたかったので線GFの右側...
follow_line2();
follow_line2(); //線GFからDまで
この部分も最初と同じくfollow_line2ひとつだと動作しなかっ...
cross_line(); //Dの交差点を渡る
follow_line(); //DからBまで
open; //アームを開く
hidarisenkai Wait(40); Off(OUT_AC); //ピンポン...
}
アームを開いた状態で左に旋回することでピンポン玉をゴール...
*まとめ [#r7c84318]
メインプログラムの中でなぜかfollow_lineが動作しないことが...
defineやサブルーチンを用いて簡潔なプログラムを書けたと思...
ページ名: