2013a/Member/shu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*ロボットの紹介 [#de0a99bc]
#ref(2013a/Member/shu/Mission1/zentai.jpeg,100%,全体像)
**車軸回り [#fa14d4c8]
はじめは三輪で小回りの聞くロボットを作ろうと考えましたが...
コンパクトながらも安定感が欲しかったので、車軸を支える点...
その結果車軸周りの重さが増して、重心が低く安定感のあるロ...
#ref(2013a/Member/shu/Mission1/syatai.jpeg,100%,車軸回り)
**はさみ [#s1255367]
鋏の部分は鋏自体を大きく広くすることで挟みやすく外れにく...
また、うまく鋏同士が噛みあうようにしたので、持った時の安...
ただ、鋏部分と本体部分の接続が弱いので簡単に壊れてしまう...
#ref(2013a/Member/shu/Mission1/hasami.jpeg,100%,はさみ)
**タッチセンサー [#v4b72f13]
タッチセンサー部分は説明書の完成品を参考に作りました。~
軽い缶にも反応するようにできたと思います。~
#ref(2013a/Member/shu/Mission1/sensor.jpeg,100%,タッチセ...
*コース攻略 [#leb8b290]
#ref(2013a/Member/shu/Mission1/robo1.jpg,100%,コース攻略)
**反時計回り [#r05fb3ab]
+スタート直後の曲がり角を曲がるためにスタートから?までは...
+?から?の交差点を越えるまでは、交差点ありのライントレース...
+?の交差点に再び差し掛かるまでは内側を回るために交差点な...
+交差点を超える直前に交差点ありのライントレースになるよう...
+そのまま3つの交差点を越え、➂の交差点を越えた時か...
+そのまま?まで進みます。
+➂から?までの時間指定で缶を置く動作をします。
+そのまま交差点なしのライントレースを続けてゴールします。
*プログラム [#h30b0a79]
#define BLACK1 38 //最も黒い部分のしきい値
#define BLACK2 42 //そこそこ黒い部分のしきい値
#define WHITE1 45 //そこそこ白い部分のしきい値
#define WHITE2 49 //最も白い部分のしきい値
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right1 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_left2 set_power_H; OnRev(OUT_A); OnFwd(OUT_...
#define turn_right2 set_power_H; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1
#define nMAX 4
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 30 //交差点を曲がる際に進む時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CRO...
#define time1 1000
#define time2 500
#define time3 2000
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
int nOnline=0;
int nCloss=0; //交差点を曲がった数
ClearTimer(0);
if(SENSOR_2 == 0) {
OnRev(OUT_B);
}
while(FastTimer(0) <= time1){
if(SENSOR_2 == 1){
OnFwd(OUT_B);
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while(nCloss <= 0) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
} //一度交差点を曲がったら輪の内側での交差点誤認識を...
ClearTimer(0); //ここでタイマーをリセットして時間のズレ...
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time2){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while((nCloss > 0)&&(nCloss <= 4)) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
} //ここからは交差点を曲がる必要がないのでライントレ...
ClearTimer(0);////ここでタイマーをリセットして時間のズレ...
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time3){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}// 缶をおくところまで時間で指定
PlaySound(SOUND_LOW_BEEP);
Off(OUT_AC); //缶を置く動作
Wait(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_AC);
OnRev(OUT_B);
OnRev(OUT_AC);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
PlaySound(SOUND_LOW_BEEP);
while(true){ //ここからゴールまでは交差点なしのラ...
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
}
**定義 [#k3fcb1ef]
***明るさのしきい値 [#accc44ab]
#define BLACK1 38 //最も黒い部分のしきい値
#define BLACK2 42 //そこそこ黒い部分のしきい値
#define WHITE1 45 //そこそこ白い部分のしきい値
#define WHITE2 49 //最も白い部分のしきい値
一番にはしきい値を定義します。~
動かす場所によって明るさは変わってしまうため場所ごとに設...
***パワーの定義 [#da21838a]
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
次にモーターを回すパワーの値を定義します。~
これを変えることでロボットの進むスピードを変えられるので...
***よく使う動きを定義 [#xa5293f0]
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right1 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_left2 set_power_H; OnRev(OUT_A); OnFwd(OUT_...
#define turn_right2 set_power_H; OnFwd(OUT_A); OnRev(OUT...
次にはよく使う動作をすぐに使えるようにまとめて一つのコマ...
ライントレースでは回転の動きをよく使うのでこの回転の動作...
***交差点の定義 [#g4bf7ce0]
#define STEP 1
#define nMAX 4
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 30 //交差点を曲がる際に進む時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CRO...
次に交差点を渡る際の移動時間、回転時間などを定義します。~
これを失敗すると交差点を誤認識したり渡りきらなかったりす...
***時間の定義 [#y8e65cc3]
#define time1 1000
#define time2 500
#define time3 2000
最後に時間を使って命令を変える際の時間を定義します。~
電池の消耗によって進む時間が毎回変わってしますのでここが...
**スタートから第一の交差点まで [#h99452d9]
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
int nOnline=0;
int nCloss=0; //交差点を曲がった数
ClearTimer(0);
if(SENSOR_2 == 0) {
OnRev(OUT_B);
}
while(FastTimer(0) <= time1){
if(SENSOR_2 == 1){
OnFwd(OUT_B);
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while(nCloss <= 0) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
}
まず、スタートしてから数秒間は交差点を認識しないただのラ...
これは急な角を曲がるときに何らかのトラブルで交差点と判断...
ここからある時間が過ぎると交差点を認識するライントレース...
この切り替える時間が難しく、交差点直前の急カーブを交差点...
#ref(2013a/Member/shu/Mission1/mission1-1.jpg,75%,)
**第一の交差点から第二の交差点へ [#z07978de]
ClearTimer(0);
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time2){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
まずは第一の交差点を渡った瞬間にタイマーを一度リセットし...
これによってスタートから計り続けるよりも誤差が格段に減り...
第一の交差点を渡ってからしばらくの間は交差点を判断しない...
これは円の内側を進むときに交差点を判断するままにしておく...
よってそれを防ぐために第一の交差点からほぼ直線の場所まで...
この時間がまたシビアで、交差点の誤認識が相次ぎ苦労しまし...
#ref(2013a/Member/shu/Mission1/mission1-2.jpg,75%,)
#ref(2013a/Member/shu/Mission1/mission1-3.jpg,75%,)
**第二の交差点から最後の交差点まで [#y63f0ff3]
while((nCloss > 0)&&(nCloss <= 4)) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
}
第二の交差点からは円の外側を常に走ることになるので交差点...
時間指定を使うことがないのでここはスムーズに行けました。~
#ref(2013a/Member/shu/Mission1/mission1-4.jpg,75%,)
**最後の交差点から缶を缶を置く場所まで [#z601a5b8]
ClearTimer(0);
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time3){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
ここからはかなり長めの時間指定ライントレースです。~
ここからは交差点を曲がる必要がないので通常のライントレー...
ここでの誤差が一番激しく、缶を置く位置がいつもずれてしま...
#ref(2013a/Member/shu/Mission1/mission1-5.jpg,75%,)
**缶を置く動作からゴールまで [#bcd45f08]
Off(OUT_AC);
Wait(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_AC);
OnRev(OUT_B);
OnRev(OUT_AC);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
PlaySound(SOUND_LOW_BEEP);
while(true){ //ここからゴールまでは交差点なしのラ...
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
}
缶を置くのは「180度回転する→はさみを離す→そのままバックす...
180度ピッタリに回転するのはなかなか難しく、最後までうまく...
缶を置いてからは通常のライントレースでゴールします。~
#ref(2013a/Member/shu/Mission1/mission1-6.jpg,75%,)
*苦労した点 [#z6491a08]
-輪の内側を走る際に交差点と認識して一回転してしまうので、...
-缶が軽いのでタッチセンサーがなかなか反応しなかった。
-時間を計るときに、バッテリーの残量によって速さが変わって...
*感想 [#t10a777a]
履修当初に想像していたよりもずっと大変で驚きました。~
チームで集まろうとしてもなかなか予定が合わずにしっかりと...
課題2ではうまくできるように頑張りたいと思います。~
終了行:
#contents
*ロボットの紹介 [#de0a99bc]
#ref(2013a/Member/shu/Mission1/zentai.jpeg,100%,全体像)
**車軸回り [#fa14d4c8]
はじめは三輪で小回りの聞くロボットを作ろうと考えましたが...
コンパクトながらも安定感が欲しかったので、車軸を支える点...
その結果車軸周りの重さが増して、重心が低く安定感のあるロ...
#ref(2013a/Member/shu/Mission1/syatai.jpeg,100%,車軸回り)
**はさみ [#s1255367]
鋏の部分は鋏自体を大きく広くすることで挟みやすく外れにく...
また、うまく鋏同士が噛みあうようにしたので、持った時の安...
ただ、鋏部分と本体部分の接続が弱いので簡単に壊れてしまう...
#ref(2013a/Member/shu/Mission1/hasami.jpeg,100%,はさみ)
**タッチセンサー [#v4b72f13]
タッチセンサー部分は説明書の完成品を参考に作りました。~
軽い缶にも反応するようにできたと思います。~
#ref(2013a/Member/shu/Mission1/sensor.jpeg,100%,タッチセ...
*コース攻略 [#leb8b290]
#ref(2013a/Member/shu/Mission1/robo1.jpg,100%,コース攻略)
**反時計回り [#r05fb3ab]
+スタート直後の曲がり角を曲がるためにスタートから?までは...
+?から?の交差点を越えるまでは、交差点ありのライントレース...
+?の交差点に再び差し掛かるまでは内側を回るために交差点な...
+交差点を超える直前に交差点ありのライントレースになるよう...
+そのまま3つの交差点を越え、➂の交差点を越えた時か...
+そのまま?まで進みます。
+➂から?までの時間指定で缶を置く動作をします。
+そのまま交差点なしのライントレースを続けてゴールします。
*プログラム [#h30b0a79]
#define BLACK1 38 //最も黒い部分のしきい値
#define BLACK2 42 //そこそこ黒い部分のしきい値
#define WHITE1 45 //そこそこ白い部分のしきい値
#define WHITE2 49 //最も白い部分のしきい値
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right1 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_left2 set_power_H; OnRev(OUT_A); OnFwd(OUT_...
#define turn_right2 set_power_H; OnFwd(OUT_A); OnRev(OUT...
#define STEP 1
#define nMAX 4
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 30 //交差点を曲がる際に進む時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CRO...
#define time1 1000
#define time2 500
#define time3 2000
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
int nOnline=0;
int nCloss=0; //交差点を曲がった数
ClearTimer(0);
if(SENSOR_2 == 0) {
OnRev(OUT_B);
}
while(FastTimer(0) <= time1){
if(SENSOR_2 == 1){
OnFwd(OUT_B);
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while(nCloss <= 0) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
} //一度交差点を曲がったら輪の内側での交差点誤認識を...
ClearTimer(0); //ここでタイマーをリセットして時間のズレ...
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time2){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while((nCloss > 0)&&(nCloss <= 4)) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
} //ここからは交差点を曲がる必要がないのでライントレ...
ClearTimer(0);////ここでタイマーをリセットして時間のズレ...
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time3){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}// 缶をおくところまで時間で指定
PlaySound(SOUND_LOW_BEEP);
Off(OUT_AC); //缶を置く動作
Wait(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_AC);
OnRev(OUT_B);
OnRev(OUT_AC);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
PlaySound(SOUND_LOW_BEEP);
while(true){ //ここからゴールまでは交差点なしのラ...
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
}
**定義 [#k3fcb1ef]
***明るさのしきい値 [#accc44ab]
#define BLACK1 38 //最も黒い部分のしきい値
#define BLACK2 42 //そこそこ黒い部分のしきい値
#define WHITE1 45 //そこそこ白い部分のしきい値
#define WHITE2 49 //最も白い部分のしきい値
一番にはしきい値を定義します。~
動かす場所によって明るさは変わってしまうため場所ごとに設...
***パワーの定義 [#da21838a]
#define HIPOWER 7
#define LOWPOWER 1
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
次にモーターを回すパワーの値を定義します。~
これを変えることでロボットの進むスピードを変えられるので...
***よく使う動きを定義 [#xa5293f0]
#define go_fwd set_power_H; OnFwd(OUT_AC);
#define turn_left1 set_power_L; Off(OUT_A); OnFwd(OUT_C)...
#define turn_right1 set_power_L; OnFwd(OUT_A); Off(OUT_C...
#define turn_left2 set_power_H; OnRev(OUT_A); OnFwd(OUT_...
#define turn_right2 set_power_H; OnFwd(OUT_A); OnRev(OUT...
次にはよく使う動作をすぐに使えるようにまとめて一つのコマ...
ライントレースでは回転の動きをよく使うのでこの回転の動作...
***交差点の定義 [#g4bf7ce0]
#define STEP 1
#define nMAX 4
#define short_break Off(OUT_AC); Wait(100);
#define CROSS_TIME 30 //交差点を曲がる際に進む時間
#define cross_line set_power_L; OnFwd(OUT_AC); Wait(CRO...
次に交差点を渡る際の移動時間、回転時間などを定義します。~
これを失敗すると交差点を誤認識したり渡りきらなかったりす...
***時間の定義 [#y8e65cc3]
#define time1 1000
#define time2 500
#define time3 2000
最後に時間を使って命令を変える際の時間を定義します。~
電池の消耗によって進む時間が毎回変わってしますのでここが...
**スタートから第一の交差点まで [#h99452d9]
task main() {
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_2,SENSOR_TOUCH);
int nOnline=0;
int nCloss=0; //交差点を曲がった数
ClearTimer(0);
if(SENSOR_2 == 0) {
OnRev(OUT_B);
}
while(FastTimer(0) <= time1){
if(SENSOR_2 == 1){
OnFwd(OUT_B);
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
while(nCloss <= 0) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
}
まず、スタートしてから数秒間は交差点を認識しないただのラ...
これは急な角を曲がるときに何らかのトラブルで交差点と判断...
ここからある時間が過ぎると交差点を認識するライントレース...
この切り替える時間が難しく、交差点直前の急カーブを交差点...
#ref(2013a/Member/shu/Mission1/mission1-1.jpg,75%,)
**第一の交差点から第二の交差点へ [#z07978de]
ClearTimer(0);
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time2){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
PlaySound(SOUND_LOW_BEEP);
まずは第一の交差点を渡った瞬間にタイマーを一度リセットし...
これによってスタートから計り続けるよりも誤差が格段に減り...
第一の交差点を渡ってからしばらくの間は交差点を判断しない...
これは円の内側を進むときに交差点を判断するままにしておく...
よってそれを防ぐために第一の交差点からほぼ直線の場所まで...
この時間がまたシビアで、交差点の誤認識が相次ぎ苦労しまし...
#ref(2013a/Member/shu/Mission1/mission1-2.jpg,75%,)
#ref(2013a/Member/shu/Mission1/mission1-3.jpg,75%,)
**第二の交差点から最後の交差点まで [#y63f0ff3]
while((nCloss > 0)&&(nCloss <= 4)) {
while(nOnline < nMAX){
if(SENSOR_1 < BLACK1) {
turn_right2;
nOnline++;
} else {
if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
nOnline=0;
}
Wait(STEP);
}
PlaySound(SOUND_UP);
short_break;
turn_left1; Wait(nMAX*STEP);
cross_line;
nCloss++;
nOnline=0;
}
}
第二の交差点からは円の外側を常に走ることになるので交差点...
時間指定を使うことがないのでここはスムーズに行けました。~
#ref(2013a/Member/shu/Mission1/mission1-4.jpg,75%,)
**最後の交差点から缶を缶を置く場所まで [#z601a5b8]
ClearTimer(0);
PlaySound(SOUND_LOW_BEEP);
while(FastTimer(0) <= time3){
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
ここからはかなり長めの時間指定ライントレースです。~
ここからは交差点を曲がる必要がないので通常のライントレー...
ここでの誤差が一番激しく、缶を置く位置がいつもずれてしま...
#ref(2013a/Member/shu/Mission1/mission1-5.jpg,75%,)
**缶を置く動作からゴールまで [#bcd45f08]
Off(OUT_AC);
Wait(100);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
Off(OUT_AC);
OnRev(OUT_B);
OnRev(OUT_AC);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(150);
PlaySound(SOUND_LOW_BEEP);
while(true){ //ここからゴールまでは交差点なしのラ...
} if(SENSOR_1 < BLACK1) {
turn_right2;
} else if (SENSOR_1 < BLACK2) {
turn_right1;
} else if (SENSOR_1 < WHITE1) {
go_fwd;
} else if (SENSOR_1 < WHITE2) {
turn_left1;
} else {
turn_left2;
}
Wait(STEP);
}
}
缶を置くのは「180度回転する→はさみを離す→そのままバックす...
180度ピッタリに回転するのはなかなか難しく、最後までうまく...
缶を置いてからは通常のライントレースでゴールします。~
#ref(2013a/Member/shu/Mission1/mission1-6.jpg,75%,)
*苦労した点 [#z6491a08]
-輪の内側を走る際に交差点と認識して一回転してしまうので、...
-缶が軽いのでタッチセンサーがなかなか反応しなかった。
-時間を計るときに、バッテリーの残量によって速さが変わって...
*感想 [#t10a777a]
履修当初に想像していたよりもずっと大変で驚きました。~
チームで集まろうとしてもなかなか予定が合わずにしっかりと...
課題2ではうまくできるように頑張りたいと思います。~
ページ名: