2017a/Member/tosi/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
目次
#contents
*課題2 [#e5271ba3]
コースに沿ってロボットを走らせる。
**コース [#e89dea7e]
#ref(./2017a-mission2.png,75%,コース)
-・E地点右折コース
-- E右折(SOUND_UP)
-- P一時停止(SOUND_DOWN)&左折
-- Q(SOUND_UP)&直進
-- R(SOUND_UP)&左折
-- T一時停止(SOUND_DOWN)&直進
-- T一時停止(SOUND_DOWN)&直進
-- H(SOUND_UP)
-- G(SOUND_UP)
-- S一時停止(SOUND_DOWN)&左折
-- P直進(SOUND_UP)
-- Q左折(SOUND_UP)
-- F(SOUND_UP)
-- E直進
-- A停止(SOUND_DOWN)
*ロボットの説明 [#t824368f]
**ロボット全体 [#mab73167]
タイヤとセンサーの距離をできるだけ近づけられるようにコン...
#ref(./unna1.jpg,75%,全体)unna1.jpg
また横移動が多いということで摩擦を減らすため後輪をなくし...
#ref(./usiro1.jpg,75%,後ろ)
*プログラム [#pa7f0a65]
最初に細かい部分の定義を行ってからプログラムをくみました。
黒線上にセンサーが反応する時間の長さから交差点やT字路を...
**プログラム本体 [#n47d8fad]
# define TMAX 29
# define forward OnFwd(OUT_AC);
# define back OnRev(OUT_AC);
# define t_left OnRev(OUT_A);OnFwd(OUT_C); //左旋回
# define turn_left Off(OUT_A);OnFwd(OUT_C); //左回転
# define t_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
# define turn_right OnFwd(OUT_A);Off(OUT_C); //右回転
# define stop(t) Off(OUT_AC);Wait(t);
# define power(s) SetPower(OUT_AC,s);
# define KOUON PlaySound(SOUND_UP);
# define TEION PlaySound(SOUND_DOWN);
ここまでが定義
場所によって数値が違ったりして失敗が多発してしまいました...
int n=0;
sub right(){
while(FastTimer(0)<TMAX){
if(SENSOR_2<42){
OnFwd(OUT_A);OnRev(OUT_C);
}else if(SENSOR_2<47){
OnFwd(OUT_A);Off(OUT_C);
}else if(SENSOR_2<52){
OnFwd(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<55){
Off(OUT_A);OnFwd(OUT_C);
} else {
OnRev(OUT_A);OnFwd(OUT_C);
}
if(SENSOR_2>42){
ClearTimer(0);
}
}
n++;
}
sub left(){
while(FastTimer(0)<TMAX){
if(SENSOR_2<42){
OnRev(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<47){
Off(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<52){
OnFwd(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<55){
OnFwd(OUT_A);Off(OUT_C);
} else {
OnFwd(OUT_A);OnRev(OUT_C);
}
if(SENSOR_2>40){
ClearTimer(0);
}
}
n++;
}
サブで線の濃さによって曲がり方を変える左右の定義付をしま...
ここからがメイン
task main(){
power(0);
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(n<=13){
?右折
一つ目のT字路を認識した後次の交差点で左折をするのでライン...
if(n==0){ //T字路
right();
KOUON;
t_left;Wait(10);
forward;Wait(40); //0.1秒停止して0.4...
ClearTimer(0); //タイマーリセット
}
?一時停止のち左折
T字路を認識させて左周りに進ませるのですがセンサーが線を越...
else if(n==1){
left();
back;Wait(20);
stop(80);
TEION;
t_left;Wait(30);
forward;Wait(50);
ClearTimer(0);
}
?直進
T字路を認識したあとで、左折せず直進させる。
else if(n==2){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?左折
T字路を認識し、右側ラインへ移動最終の円状交差点のために、...
else if(n==3){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?一時停止のち直進
?、?は同じ
右側に移動することで少し楽になりました。
else if(n==4){
right();
TEION;
t_left;Wait(25);
stop(80);
forward;Wait(50);
ClearTimer(0);
}
?一時停止のち直進
else if(n==5){
right();
t_left;Wait(25);
stop(80);
TEION;
forward;Wait(50);
ClearTimer(0);
}
?右折
?、?は線に沿って移動するだけでしたので特に難しくありませ...
else if(n==6){
right();
KOUON;
t_right;Wait(50);
forward;Wait(50);
turn_right;Wait(15);
ClearTimer(0);
}
?急カーブ
else if(n==7){
right();
forward;Wait(15);
t_right;Wait(70);
forward;Wait(50);
turn_right;Wait(10);
t_right;Wait(40);
ClearTimer(0);
}
?右折
?、?、?は一回目の円状と同じ動きでしたので、似たようなミス...
else if(n==8){
right();
KOUON;
t_left;Wait(10);
forward;Wait(40);
ClearTimer(0);
}
?一時停止のち左折
else if(n==9){
left();
back;Wait(20);
stop(80);
TEION;
t_left;Wait(30);
forward;Wait(50);
ClearTimer(0);
}
?直進
else if(n==10){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?左折
ここからはほぼ直進だったので問題はなし
else if(n==11){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?右折
else if(n==12){
right();
KOUON;
t_right;Wait(50);
forward;Wait(40);
turn_right;Wait(10);
ClearTimer(0);
}
?直進
else if(n==13){
right();
KOUON;
t_left;Wait(25);
forward;Wait(250);
}
Off(OUT_AC);
}
サブなどで定義した内容をメインで呼び起こす形なのでメイン...
**まとめ [#kc5b400b]
曲がり角やT字路を認識しカウントすることで位置を確認するよ...
*感想 [#b7496b56]
今回線の濃さや黒い部分に反応する時間など細かい計測をした...
終了行:
目次
#contents
*課題2 [#e5271ba3]
コースに沿ってロボットを走らせる。
**コース [#e89dea7e]
#ref(./2017a-mission2.png,75%,コース)
-・E地点右折コース
-- E右折(SOUND_UP)
-- P一時停止(SOUND_DOWN)&左折
-- Q(SOUND_UP)&直進
-- R(SOUND_UP)&左折
-- T一時停止(SOUND_DOWN)&直進
-- T一時停止(SOUND_DOWN)&直進
-- H(SOUND_UP)
-- G(SOUND_UP)
-- S一時停止(SOUND_DOWN)&左折
-- P直進(SOUND_UP)
-- Q左折(SOUND_UP)
-- F(SOUND_UP)
-- E直進
-- A停止(SOUND_DOWN)
*ロボットの説明 [#t824368f]
**ロボット全体 [#mab73167]
タイヤとセンサーの距離をできるだけ近づけられるようにコン...
#ref(./unna1.jpg,75%,全体)unna1.jpg
また横移動が多いということで摩擦を減らすため後輪をなくし...
#ref(./usiro1.jpg,75%,後ろ)
*プログラム [#pa7f0a65]
最初に細かい部分の定義を行ってからプログラムをくみました。
黒線上にセンサーが反応する時間の長さから交差点やT字路を...
**プログラム本体 [#n47d8fad]
# define TMAX 29
# define forward OnFwd(OUT_AC);
# define back OnRev(OUT_AC);
# define t_left OnRev(OUT_A);OnFwd(OUT_C); //左旋回
# define turn_left Off(OUT_A);OnFwd(OUT_C); //左回転
# define t_right OnFwd(OUT_A);OnRev(OUT_C); //右旋回
# define turn_right OnFwd(OUT_A);Off(OUT_C); //右回転
# define stop(t) Off(OUT_AC);Wait(t);
# define power(s) SetPower(OUT_AC,s);
# define KOUON PlaySound(SOUND_UP);
# define TEION PlaySound(SOUND_DOWN);
ここまでが定義
場所によって数値が違ったりして失敗が多発してしまいました...
int n=0;
sub right(){
while(FastTimer(0)<TMAX){
if(SENSOR_2<42){
OnFwd(OUT_A);OnRev(OUT_C);
}else if(SENSOR_2<47){
OnFwd(OUT_A);Off(OUT_C);
}else if(SENSOR_2<52){
OnFwd(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<55){
Off(OUT_A);OnFwd(OUT_C);
} else {
OnRev(OUT_A);OnFwd(OUT_C);
}
if(SENSOR_2>42){
ClearTimer(0);
}
}
n++;
}
sub left(){
while(FastTimer(0)<TMAX){
if(SENSOR_2<42){
OnRev(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<47){
Off(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<52){
OnFwd(OUT_A);OnFwd(OUT_C);
}else if(SENSOR_2<55){
OnFwd(OUT_A);Off(OUT_C);
} else {
OnFwd(OUT_A);OnRev(OUT_C);
}
if(SENSOR_2>40){
ClearTimer(0);
}
}
n++;
}
サブで線の濃さによって曲がり方を変える左右の定義付をしま...
ここからがメイン
task main(){
power(0);
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);
while(n<=13){
?右折
一つ目のT字路を認識した後次の交差点で左折をするのでライン...
if(n==0){ //T字路
right();
KOUON;
t_left;Wait(10);
forward;Wait(40); //0.1秒停止して0.4...
ClearTimer(0); //タイマーリセット
}
?一時停止のち左折
T字路を認識させて左周りに進ませるのですがセンサーが線を越...
else if(n==1){
left();
back;Wait(20);
stop(80);
TEION;
t_left;Wait(30);
forward;Wait(50);
ClearTimer(0);
}
?直進
T字路を認識したあとで、左折せず直進させる。
else if(n==2){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?左折
T字路を認識し、右側ラインへ移動最終の円状交差点のために、...
else if(n==3){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?一時停止のち直進
?、?は同じ
右側に移動することで少し楽になりました。
else if(n==4){
right();
TEION;
t_left;Wait(25);
stop(80);
forward;Wait(50);
ClearTimer(0);
}
?一時停止のち直進
else if(n==5){
right();
t_left;Wait(25);
stop(80);
TEION;
forward;Wait(50);
ClearTimer(0);
}
?右折
?、?は線に沿って移動するだけでしたので特に難しくありませ...
else if(n==6){
right();
KOUON;
t_right;Wait(50);
forward;Wait(50);
turn_right;Wait(15);
ClearTimer(0);
}
?急カーブ
else if(n==7){
right();
forward;Wait(15);
t_right;Wait(70);
forward;Wait(50);
turn_right;Wait(10);
t_right;Wait(40);
ClearTimer(0);
}
?右折
?、?、?は一回目の円状と同じ動きでしたので、似たようなミス...
else if(n==8){
right();
KOUON;
t_left;Wait(10);
forward;Wait(40);
ClearTimer(0);
}
?一時停止のち左折
else if(n==9){
left();
back;Wait(20);
stop(80);
TEION;
t_left;Wait(30);
forward;Wait(50);
ClearTimer(0);
}
?直進
else if(n==10){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?左折
ここからはほぼ直進だったので問題はなし
else if(n==11){
left();
KOUON;
t_right;Wait(15);
forward;Wait(50);
ClearTimer(0);
}
?右折
else if(n==12){
right();
KOUON;
t_right;Wait(50);
forward;Wait(40);
turn_right;Wait(10);
ClearTimer(0);
}
?直進
else if(n==13){
right();
KOUON;
t_left;Wait(25);
forward;Wait(250);
}
Off(OUT_AC);
}
サブなどで定義した内容をメインで呼び起こす形なのでメイン...
**まとめ [#kc5b400b]
曲がり角やT字路を認識しカウントすることで位置を確認するよ...
*感想 [#b7496b56]
今回線の濃さや黒い部分に反応する時間など細かい計測をした...
ページ名: