2014a/Member/tadanobo/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
ユーザー名が『tadanobo』となっていますが、漢字で書くと...
目次
#contents
*メンバー [#jead2205]
・tadanobo
・bgpat
*課題の説明 [#yb3b921b]
詳しい説明は[[2014a/Mission1]]を見てください。
&ref(2014a/Member/tadanobo/Mission1/課題地図2.png,80%);
上図のコースを左のスタートから右のゴールに向けて進みます。
なお、ボールは上図の青丸の位置に置かれています。
*ロボット本体 [#p31fe5db]
&ref(2014a/Member/tadanobo/Mission1/DSC01815.jpg,15%);
**ドライブベース [#p763e815]
&ref(2014a/Member/tadanobo/Mission1/DSC01822-1.jpg,15%);
ドライブベースは光センサーがぎりぎり入る程度までに2つの...
**アーム [#t227c31b]
&ref(2014a/Member/tadanobo/Mission1/DSC01846.jpg,9%);
&ref(2014a/Member/tadanobo/Mission1/DSC01847.jpg,9%);
&ref(2014a/Member/tadanobo/Mission1/DSC01848.jpg,9%);
アームはゲージを上から下ろすスタイルになっています。
&ref(2014a/Member/tadanobo/Mission1/アームの構造2.png,80...
&ref(2014a/Member/tadanobo/Mission1/アームの構造.png,80%);
アームを下すと車体正面の二本の棒の坂にボールが乗るので、...
*プログラム [#k9e1adf3]
**定義文 [#ec25770d]
#define THRESHOLD 40 ...
#define SPEED_H 38 ...
#define SPEED_L 25 ...
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define spin_left OnRL(SPEED_H,-SPEED_H); ...
#define turn_left OnRL(SPEED_H,0); ...
#define turn_right OnRL(0,SPEED_H); ...
#define spin_right OnRL(-SPEED_H,SPEED_H); ...
#define nMAX2 350 ...
#define CROSS_TIME 400 ...
#define cross_line OnRL(SPEED_H,SPEED_H);Wait(CROSS_TIME...
#define STEP 1 ...
#define go_back OnRL(-SPEED_L,-SPEED_L); ...
#define go_back2 OnRL(-SPEED_H -5,-SPEED_L); ...
#define shoot_ball go_back;Wait(400);Off(OUT_AC);\ ...
RotateMotor(OUT_B,25,-90);Off(OUT_AC)...
**ライントレース [#ea62200c]
task main()
{
SetSensorLight(S3); //光セ...
_
int nOnline = 0; //"nOn...
int nCorner = 0; //"nCo...
_
go_forward;until(SENSOR_3 < THRESHOLD -8) //STAR...
go_forward;Wait(200); 黒線...
_
while(nCorner <= 6) { //nCor...
if(nOnline < nMAX2) { //nOnl...
if(SENSOR_3 < THRESHOLD -5) { //車体...
spin_right; //右旋...
nOnline++; //nOnl...
} else {
if(SENSOR_3 < THRESHOLD +5) { //車体...
turn_right; //右に...
} else if(SENSOR_3 < THRESHOLD +10) { //車体...
go_forward; //前進...
} else if(SENSOR_3 < THRESHOLD +14) { //車体...
turn_left; //左に...
} else { //車体...
spin_left; //左旋...
}
nOnline=0; //右旋...
}
Wait(STEP); //各動...
(☆に続く)
基本的には、光センサーにより明るさを測って、明度の値によ...
直角カーブは右旋回の回数を計ることで判別します。右旋回...
計ります。上記の*の動作は一回あたり1/1000秒間行われます。...
nOnlineが加算されていった場合、かかる時間は(nOnlineの回数...
t=N/1000(秒)という式ができます。
例えば、100回連続で右旋回した場合かかる時間は100/1000秒...
ムでは、nOnlineの上限値をnMAX2=350としているので350回以上...
続で右旋回をすると直角カーブと判断します。逆に、右旋回が0...
ると判断しライントレースを続けます。
**交差点を渡る・直角,ヘアピンカーブを曲がる・ボールを放つ...
(☆)
} else { ...
PlayTone(440,100); //合図のため"ラ"の音を鳴らす
Off(OUT_AC);Wait(1000); //一時停止
if((nCorner == 0)||(nCorner == 5)) { ...
spin_right;until(SENSOR_3 > THRESHOLD +11) ...
} else if((nCorner == 1)||(nCorner == 3)||(nCorne...
PlaySound(SOUND_UP); ...
if(nCorner == 1) { ...
go_forward;Wait(100); ...
RotateMotor(OUT_B,15,85); ...
Off(OUT_B); ...
go_back2;Wait(300); ...
go_back2;until(SENSOR_3 < THRESHOLD -10); ...
}
spin_left; Wait(nMAX2*STEP); ...
if(nCorner == 4) { ...
spin_left;Wait(200); ...
}
cross_line; ...
} else if(nCorner == 2) { ...
PlaySound(SOUND_LOW_BEEP); ...
spin_right;until(SENSOR_3 > THRESHOLD -2) ...
} else if(nCorner == 6) { ...
spin_left;Wait(nMAX2*STEP); ...
shoot_ball; ...
}
nOnline=0; ...
nCorner++; ...
}
}
Off(OUT_AC); ...
}
コース上を走行した際、直角カーブ・交差点・ヘアピンカー...
回あうのかは事前にわかります。なので、それらの数を数える...
そのため、プログラムの始めにnCornerというカウンターを定義...
今回の課題のコースでは、右からスタートすると下図のよう...
?はヘアピンカーブ、?,?,?は交差点、?は直角カーブ、?は終着...
nCornerの値は最初0になっています。なので、?の直角ポイン...
直角ポイント?に至ってヘアピンカーブを判別したら、カーブ...
ついたら玉を回収しつつ元の位置に後進で戻り、そして交差点...
た1加算し、nCornerの値は2になります。直角ポイント?につ...
曲がり切ります。そしてnCornerの値を1加算し、これでnCorne...
&ref(2014a/Member/tadanobo/Mission1/直角ポイント.png,50%);
このように、直角ポイントにつくごとにそれぞれ適切な対処...
交差点を越える際の軌道修正は、直角を判定するために右旋...
最後のボールを放つところは、軌道修正してゴールと正対し...
*感想 [#j8f08630]
今回の課題達成までにマシンの構造をどうするか、プログラ...
さて、今回作成したこのプログラムの中で一番の難点だった...
終了行:
ユーザー名が『tadanobo』となっていますが、漢字で書くと...
目次
#contents
*メンバー [#jead2205]
・tadanobo
・bgpat
*課題の説明 [#yb3b921b]
詳しい説明は[[2014a/Mission1]]を見てください。
&ref(2014a/Member/tadanobo/Mission1/課題地図2.png,80%);
上図のコースを左のスタートから右のゴールに向けて進みます。
なお、ボールは上図の青丸の位置に置かれています。
*ロボット本体 [#p31fe5db]
&ref(2014a/Member/tadanobo/Mission1/DSC01815.jpg,15%);
**ドライブベース [#p763e815]
&ref(2014a/Member/tadanobo/Mission1/DSC01822-1.jpg,15%);
ドライブベースは光センサーがぎりぎり入る程度までに2つの...
**アーム [#t227c31b]
&ref(2014a/Member/tadanobo/Mission1/DSC01846.jpg,9%);
&ref(2014a/Member/tadanobo/Mission1/DSC01847.jpg,9%);
&ref(2014a/Member/tadanobo/Mission1/DSC01848.jpg,9%);
アームはゲージを上から下ろすスタイルになっています。
&ref(2014a/Member/tadanobo/Mission1/アームの構造2.png,80...
&ref(2014a/Member/tadanobo/Mission1/アームの構造.png,80%);
アームを下すと車体正面の二本の棒の坂にボールが乗るので、...
*プログラム [#k9e1adf3]
**定義文 [#ec25770d]
#define THRESHOLD 40 ...
#define SPEED_H 38 ...
#define SPEED_L 25 ...
#define OnRL(speedR,speedL) OnFwd(OUT_A,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_H,SPEED_H); ...
#define spin_left OnRL(SPEED_H,-SPEED_H); ...
#define turn_left OnRL(SPEED_H,0); ...
#define turn_right OnRL(0,SPEED_H); ...
#define spin_right OnRL(-SPEED_H,SPEED_H); ...
#define nMAX2 350 ...
#define CROSS_TIME 400 ...
#define cross_line OnRL(SPEED_H,SPEED_H);Wait(CROSS_TIME...
#define STEP 1 ...
#define go_back OnRL(-SPEED_L,-SPEED_L); ...
#define go_back2 OnRL(-SPEED_H -5,-SPEED_L); ...
#define shoot_ball go_back;Wait(400);Off(OUT_AC);\ ...
RotateMotor(OUT_B,25,-90);Off(OUT_AC)...
**ライントレース [#ea62200c]
task main()
{
SetSensorLight(S3); //光セ...
_
int nOnline = 0; //"nOn...
int nCorner = 0; //"nCo...
_
go_forward;until(SENSOR_3 < THRESHOLD -8) //STAR...
go_forward;Wait(200); 黒線...
_
while(nCorner <= 6) { //nCor...
if(nOnline < nMAX2) { //nOnl...
if(SENSOR_3 < THRESHOLD -5) { //車体...
spin_right; //右旋...
nOnline++; //nOnl...
} else {
if(SENSOR_3 < THRESHOLD +5) { //車体...
turn_right; //右に...
} else if(SENSOR_3 < THRESHOLD +10) { //車体...
go_forward; //前進...
} else if(SENSOR_3 < THRESHOLD +14) { //車体...
turn_left; //左に...
} else { //車体...
spin_left; //左旋...
}
nOnline=0; //右旋...
}
Wait(STEP); //各動...
(☆に続く)
基本的には、光センサーにより明るさを測って、明度の値によ...
直角カーブは右旋回の回数を計ることで判別します。右旋回...
計ります。上記の*の動作は一回あたり1/1000秒間行われます。...
nOnlineが加算されていった場合、かかる時間は(nOnlineの回数...
t=N/1000(秒)という式ができます。
例えば、100回連続で右旋回した場合かかる時間は100/1000秒...
ムでは、nOnlineの上限値をnMAX2=350としているので350回以上...
続で右旋回をすると直角カーブと判断します。逆に、右旋回が0...
ると判断しライントレースを続けます。
**交差点を渡る・直角,ヘアピンカーブを曲がる・ボールを放つ...
(☆)
} else { ...
PlayTone(440,100); //合図のため"ラ"の音を鳴らす
Off(OUT_AC);Wait(1000); //一時停止
if((nCorner == 0)||(nCorner == 5)) { ...
spin_right;until(SENSOR_3 > THRESHOLD +11) ...
} else if((nCorner == 1)||(nCorner == 3)||(nCorne...
PlaySound(SOUND_UP); ...
if(nCorner == 1) { ...
go_forward;Wait(100); ...
RotateMotor(OUT_B,15,85); ...
Off(OUT_B); ...
go_back2;Wait(300); ...
go_back2;until(SENSOR_3 < THRESHOLD -10); ...
}
spin_left; Wait(nMAX2*STEP); ...
if(nCorner == 4) { ...
spin_left;Wait(200); ...
}
cross_line; ...
} else if(nCorner == 2) { ...
PlaySound(SOUND_LOW_BEEP); ...
spin_right;until(SENSOR_3 > THRESHOLD -2) ...
} else if(nCorner == 6) { ...
spin_left;Wait(nMAX2*STEP); ...
shoot_ball; ...
}
nOnline=0; ...
nCorner++; ...
}
}
Off(OUT_AC); ...
}
コース上を走行した際、直角カーブ・交差点・ヘアピンカー...
回あうのかは事前にわかります。なので、それらの数を数える...
そのため、プログラムの始めにnCornerというカウンターを定義...
今回の課題のコースでは、右からスタートすると下図のよう...
?はヘアピンカーブ、?,?,?は交差点、?は直角カーブ、?は終着...
nCornerの値は最初0になっています。なので、?の直角ポイン...
直角ポイント?に至ってヘアピンカーブを判別したら、カーブ...
ついたら玉を回収しつつ元の位置に後進で戻り、そして交差点...
た1加算し、nCornerの値は2になります。直角ポイント?につ...
曲がり切ります。そしてnCornerの値を1加算し、これでnCorne...
&ref(2014a/Member/tadanobo/Mission1/直角ポイント.png,50%);
このように、直角ポイントにつくごとにそれぞれ適切な対処...
交差点を越える際の軌道修正は、直角を判定するために右旋...
最後のボールを放つところは、軌道修正してゴールと正対し...
*感想 [#j8f08630]
今回の課題達成までにマシンの構造をどうするか、プログラ...
さて、今回作成したこのプログラムの中で一番の難点だった...
ページ名: