2019a/Member/sotaex/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#contents
*ハード設計 [#u0e00523]
**形状 [#k00cbc2b]
今回は二輪車型を採用した。ラインという道路を走るので、こ...
**アーム [#l05776ac]
ボールをうまく掴むために、今回は以下のような機構を用意し...
&ref(A.jpeg);~
左右両側から覆うような構造にしたため、ボールに到達した時...
この機構は、ボールを離した状態ではボールを弾いてキックす...
&ref(B.jpeg);
**工夫点 [#td425d48]
+本体とラインセンサーの距離を「近くに置いた」。~
実はこの距離には加減が重要で、前回私が作成した文字を書く...
+比重の高いギアを採用した。~
プログラムを作成していくうちに、一連の動きを「早く」終了...
因みに、このおかげで一層タイヤとラインセンサーの位置が近...
&ref(C.jpeg);
*プログラム [#w34c4c3b]
**方針[#ob326ed2]
ラインセンサーを用いれば、センサー先の色の濃さが判別でき...
**定義 [#g5dc48a2]
+方針を達成するために、黒、黒よりのグレー、グレーよりの白...
#define BLACK 37
#define BLACKandGLAY 45
#define GLAYandWHITE 55
#define WHITE 60
(数値は調整済み)
+ 次に、効率よくプログラムを作るため、順に、直進、右/左斜...
#define go OnRev(OUT_BC,35);
#define turn_leftFwd OnRev(OUT_B,35);Off(OUT_C);
#define turn_rightFwd Off(OUT_B);OnRev(OUT_C,35);
#define turn_left OnRev(OUT_B,35);OnFwd(OUT_C,35);
#define turn_right OnFwd(OUT_B,35);OnRev(OUT_C,35);
#define short_break Off(OUT_BC);Wait(1000);
#define back OnFwd(OUT_BC,35);
※35というパワーは、正確さを失わずに全行程を終了させること...
+次に方針に従ってラインをトレースするサブルーチンをを左端...
継続して黒にいる時間が150×10^-3秒経過したとき、サブルーチ...
(実際にはサブルーチン開始後即その時の時刻をt0として定義し...
sub Rside_trace()
{
long t0 = CurrentTick();
while(CurrentTick()-t0<150) {
if (SENSOR_3 < BLACK) {
turn_right;
} else if (SENSOR_3 < BLACKandGLAY) {
t0=CurrentTick();turn_rightFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
t0=CurrentTick();go;
} else if (SENSOR_3 < WHITE) {
t0=CurrentTick();turn_leftFwd;
} else {
turn_left;t0=CurrentTick();
}}
Off(OUT_BC);
}
sub Lside_trace()
{
long t0 = CurrentTick();
while(CurrentTick()-t0<150) {
if (SENSOR_3 < BLACK) {
turn_left;
} else if (SENSOR_3 < BLACKandGLAY) {
t0=CurrentTick();turn_leftFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
t0=CurrentTick();go;
} else if (SENSOR_3 < WHITE) {
t0=CurrentTick();turn_rightFwd;
} else {
turn_right;t0=CurrentTick();
}}
Off(OUT_BC);
}
※このサブルーチンの説明~
&ref(D.jpeg);~
※このサブルーチンでは、設計で述べたラインセンサーと動力モ...
+次段階として、(順に)十字路手前のライン右端から十字路を超...
sub Rcross_line()
{
OnRev(OUT_C,60);Wait(800);
Off(OUT_BC);
}
sub Lcross_line()
{
OnRev(OUT_B,60);Wait(800);
Off(OUT_BC);
}
sub cross_line()
{
OnRev(OUT_BC,50);Wait(350);
Off(OUT_BC);
}
**task main [#ge44c74a]
2回目のK以外は音が鳴って、交差点を渡る合図となるようにし...
+A~B
task main()
{
SetSensorLight(S3);
while(SENSOR_3>BLACKandGLAY){
go;}
go;Wait(800);//A~Bへ直進
黒になるまで直進する。しかしそれだけでは直進方向と垂直方...
+B~D
Rside_trace();//B~Cを右端走行
PlaySound(SOUND_CLICK);//Cを斜め横断する合図
Lcross_line();//Cを左斜めに横断
Lside_trace();//C~Dを左側走行
short_break;//Dで一時停止
PlaySound(SOUND_CLICK);//Dを横断する合図
cross_line();//Dをまっすぐ渡る
Cに到達したことを明確にしたいので、敢えてCまで右側で、C点...
+D~G
Lside_trace();//D~Gを左側走行
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_B,30);OnRev(OUT_C,60);Wait(1300);
D~Gは左端、枠の外側を移動すれば、このマシンは正確なので(...
+G~K
int n=0;//円周上で横断する回数を定義
while(n<2){ //H,Iで二回。Jで違う挙動を取りたい。
Rside_trace();//円周を右側(外側)走行
n++;//交差点通過時にカウントを1追加
PlaySound(SOUND_CLICK);//横断する合図
OnRev(OUT_B,60);Wait(500);//交差点通過
}
Rside_trace();//円周を右側(外側)走行
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_B,30);OnRev(OUT_C,70);Wait(900);//JKの右側へ出る
Rside_trace();//J~Kを右側走行
カウンターを用いてトレース、交差点通過を2回繰り返した。(r...
+K~L
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_C,30);OnRev(OUT_B,70);Wait(1300);//KLの左側へ...
int a=0;
int b=0;
while((a<2000)&&(b<2500)){
if (SENSOR_3 < BLACK) {
b++;turn_left;
} else if (SENSOR_3 < BLACKandGLAY) {
a++;b++;turn_leftFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
a++;go;
} else if (SENSOR_3 < WHITE) {
a++;b++;turn_rightFwd;
} else {
b++;turn_right;}}//K~Lを左側走行(回数指定で距離を...
まず、原始的な調整で、KLの左側に行くよう点Kで回る。次だが...
+LからA
Off(OUT_BC);OnFwd(OUT_A,100);Wait(700);Off(OUT_A);//
turn_left OnRev(OUT_B,35);OnFwd(OUT_C,35);Wait(300);
Rside_trace();//L~Mを右側走行(白の場合左回転なので方向...
cross_line();//Kを横断
Rside_trace();//K~Mを右側走行
short_break;//Mで一時停止
OnRev(OUT_A,100);Wait(700);Off(OUT_A);//ボールを離す
OnRev(OUT_BC,-100);Wait(1000);Off(OUT_BC);//後退
OnRev(OUT_A,-100);Wait(700);Off(OUT_A);//アームもどす
OnRev(OUT_BC,100);Wait(1000);Off(OUT_BC);//前進
OnRev(OUT_A,100);Wait(700);Off(OUT_A);//ボールを撃つ
OnRev(OUT_BC,100);Wait(500);Off(OUT_BC);//進む
}
Lでの方向転換を少しすれば、あとは線の右側走行に切り替える...
*MOVIE [#d9fa0eec]
https://youtu.be/Dt8wVHgczdM
*追記 [#ebf9ee14]
グレーの綴が間違っていました、GLAYではなくて、GRAYが正解...
終了行:
#contents
*ハード設計 [#u0e00523]
**形状 [#k00cbc2b]
今回は二輪車型を採用した。ラインという道路を走るので、こ...
**アーム [#l05776ac]
ボールをうまく掴むために、今回は以下のような機構を用意し...
&ref(A.jpeg);~
左右両側から覆うような構造にしたため、ボールに到達した時...
この機構は、ボールを離した状態ではボールを弾いてキックす...
&ref(B.jpeg);
**工夫点 [#td425d48]
+本体とラインセンサーの距離を「近くに置いた」。~
実はこの距離には加減が重要で、前回私が作成した文字を書く...
+比重の高いギアを採用した。~
プログラムを作成していくうちに、一連の動きを「早く」終了...
因みに、このおかげで一層タイヤとラインセンサーの位置が近...
&ref(C.jpeg);
*プログラム [#w34c4c3b]
**方針[#ob326ed2]
ラインセンサーを用いれば、センサー先の色の濃さが判別でき...
**定義 [#g5dc48a2]
+方針を達成するために、黒、黒よりのグレー、グレーよりの白...
#define BLACK 37
#define BLACKandGLAY 45
#define GLAYandWHITE 55
#define WHITE 60
(数値は調整済み)
+ 次に、効率よくプログラムを作るため、順に、直進、右/左斜...
#define go OnRev(OUT_BC,35);
#define turn_leftFwd OnRev(OUT_B,35);Off(OUT_C);
#define turn_rightFwd Off(OUT_B);OnRev(OUT_C,35);
#define turn_left OnRev(OUT_B,35);OnFwd(OUT_C,35);
#define turn_right OnFwd(OUT_B,35);OnRev(OUT_C,35);
#define short_break Off(OUT_BC);Wait(1000);
#define back OnFwd(OUT_BC,35);
※35というパワーは、正確さを失わずに全行程を終了させること...
+次に方針に従ってラインをトレースするサブルーチンをを左端...
継続して黒にいる時間が150×10^-3秒経過したとき、サブルーチ...
(実際にはサブルーチン開始後即その時の時刻をt0として定義し...
sub Rside_trace()
{
long t0 = CurrentTick();
while(CurrentTick()-t0<150) {
if (SENSOR_3 < BLACK) {
turn_right;
} else if (SENSOR_3 < BLACKandGLAY) {
t0=CurrentTick();turn_rightFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
t0=CurrentTick();go;
} else if (SENSOR_3 < WHITE) {
t0=CurrentTick();turn_leftFwd;
} else {
turn_left;t0=CurrentTick();
}}
Off(OUT_BC);
}
sub Lside_trace()
{
long t0 = CurrentTick();
while(CurrentTick()-t0<150) {
if (SENSOR_3 < BLACK) {
turn_left;
} else if (SENSOR_3 < BLACKandGLAY) {
t0=CurrentTick();turn_leftFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
t0=CurrentTick();go;
} else if (SENSOR_3 < WHITE) {
t0=CurrentTick();turn_rightFwd;
} else {
turn_right;t0=CurrentTick();
}}
Off(OUT_BC);
}
※このサブルーチンの説明~
&ref(D.jpeg);~
※このサブルーチンでは、設計で述べたラインセンサーと動力モ...
+次段階として、(順に)十字路手前のライン右端から十字路を超...
sub Rcross_line()
{
OnRev(OUT_C,60);Wait(800);
Off(OUT_BC);
}
sub Lcross_line()
{
OnRev(OUT_B,60);Wait(800);
Off(OUT_BC);
}
sub cross_line()
{
OnRev(OUT_BC,50);Wait(350);
Off(OUT_BC);
}
**task main [#ge44c74a]
2回目のK以外は音が鳴って、交差点を渡る合図となるようにし...
+A~B
task main()
{
SetSensorLight(S3);
while(SENSOR_3>BLACKandGLAY){
go;}
go;Wait(800);//A~Bへ直進
黒になるまで直進する。しかしそれだけでは直進方向と垂直方...
+B~D
Rside_trace();//B~Cを右端走行
PlaySound(SOUND_CLICK);//Cを斜め横断する合図
Lcross_line();//Cを左斜めに横断
Lside_trace();//C~Dを左側走行
short_break;//Dで一時停止
PlaySound(SOUND_CLICK);//Dを横断する合図
cross_line();//Dをまっすぐ渡る
Cに到達したことを明確にしたいので、敢えてCまで右側で、C点...
+D~G
Lside_trace();//D~Gを左側走行
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_B,30);OnRev(OUT_C,60);Wait(1300);
D~Gは左端、枠の外側を移動すれば、このマシンは正確なので(...
+G~K
int n=0;//円周上で横断する回数を定義
while(n<2){ //H,Iで二回。Jで違う挙動を取りたい。
Rside_trace();//円周を右側(外側)走行
n++;//交差点通過時にカウントを1追加
PlaySound(SOUND_CLICK);//横断する合図
OnRev(OUT_B,60);Wait(500);//交差点通過
}
Rside_trace();//円周を右側(外側)走行
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_B,30);OnRev(OUT_C,70);Wait(900);//JKの右側へ出る
Rside_trace();//J~Kを右側走行
カウンターを用いてトレース、交差点通過を2回繰り返した。(r...
+K~L
PlaySound(SOUND_CLICK);//横断する合図
OnFwd(OUT_C,30);OnRev(OUT_B,70);Wait(1300);//KLの左側へ...
int a=0;
int b=0;
while((a<2000)&&(b<2500)){
if (SENSOR_3 < BLACK) {
b++;turn_left;
} else if (SENSOR_3 < BLACKandGLAY) {
a++;b++;turn_leftFwd;
} else if (SENSOR_3 < GLAYandWHITE) {
a++;go;
} else if (SENSOR_3 < WHITE) {
a++;b++;turn_rightFwd;
} else {
b++;turn_right;}}//K~Lを左側走行(回数指定で距離を...
まず、原始的な調整で、KLの左側に行くよう点Kで回る。次だが...
+LからA
Off(OUT_BC);OnFwd(OUT_A,100);Wait(700);Off(OUT_A);//
turn_left OnRev(OUT_B,35);OnFwd(OUT_C,35);Wait(300);
Rside_trace();//L~Mを右側走行(白の場合左回転なので方向...
cross_line();//Kを横断
Rside_trace();//K~Mを右側走行
short_break;//Mで一時停止
OnRev(OUT_A,100);Wait(700);Off(OUT_A);//ボールを離す
OnRev(OUT_BC,-100);Wait(1000);Off(OUT_BC);//後退
OnRev(OUT_A,-100);Wait(700);Off(OUT_A);//アームもどす
OnRev(OUT_BC,100);Wait(1000);Off(OUT_BC);//前進
OnRev(OUT_A,100);Wait(700);Off(OUT_A);//ボールを撃つ
OnRev(OUT_BC,100);Wait(500);Off(OUT_BC);//進む
}
Lでの方向転換を少しすれば、あとは線の右側走行に切り替える...
*MOVIE [#d9fa0eec]
https://youtu.be/Dt8wVHgczdM
*追記 [#ebf9ee14]
グレーの綴が間違っていました、GLAYではなくて、GRAYが正解...
ページ名: