2019a/Member/hide/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
目次
#contents
*課題2 [#ja858b37]
A地点を出発し、次のいずれかの経路を黒い線にそって動くロ...
・A地点から出発 → B → C(直進) → D(一時停止の後、直進) →...
&br; ・A地点から出発 → M → K(直進) → L(ピンポン玉を...
交差点では1秒間停止し、丁字路では直角方向に進入する時の...
**選んだコース [#y421ea0d]
私は下のコースをやりました。
*ロボットの説明 [#of46aaab]
**構造について [#ud45fb8e]
***全体図 [#q4da8e04]
#ref(./P_20190715_201218 - コピー.jpg,54.1,全図)
できるだけ小さくすることが出来ました。しかし、はじめ...
***アーム部分 [#uf404ac6]
#ref(./P_20190715_202505_LL.jpg,66.4,アーム)
モーターとアーム部分はゴムによってつながっています。...
***車体 [#l262ec25]
#ref(./P_20190715_210355_NT.jpg,68.6,車体)
モーターを直列につなげることにより車体を小さくするこ...
***ボールをつかむ [#c77bfa4b]
#ref(./P_20190718_134818.jpg,53.9,ボール)
ボールを掴んでいるときの写真です。ボールを掴むことに...
*制御について [#r8389748]
**#defineについて [#i7c9ac39]
#define go OnFwd(OUT_AC);
#define turn_left OnRev(OUT_A);OnFwd(OUT_C);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define right OnFwd(OUT_A);Off(OUT_C);
#define left OnFwd(OUT_C);Off(OUT_A);
これらのプログラムは移動に関するものです。&br; 上か...
#define w_gray 51
#define gray 47
#define b_gray 45
#define black 41
これらのプログラムは色の値に関するものであり、&br; ...
**交差点の判断方法 [#w60a64a9]
交差点と認識するためには、連続して黒、又は黒よりの灰...
**サブルーチンについて [#cc572bf5]
ルーチンは、一連の命令をまとめたものを意味し、 一番最...
sub follow_line()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){ ...
turn_left;ClearTimer(0); ...
} else if (SENSOR_1 < black){ //Clear...
turn_left;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
left;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
left;
} else if (SENSOR_1 < gray){
go;ClearTimer(0);
} else if (SENSOR_1 < w_gray){
right;ClearTimer(0);
} else {
turn_right;ClearTimer(0);
}
}
sp;Wait(WT);
}
これは、線の左側をライントレースするために用いたサブ...
&br; ・センサー1が41よりも小さい値なら、左旋回。
&br; ↓
&br; ・センサー1が41以上45よりも小さい値なら、左。
&br; ↓
&br; ・センサー1が45以上47よりも小さい値なら、直進。
&br; ↓
&br; ・センサー1が47以上51よりも小さい値なら、右。
&br; ↓
&br; ・それ以外なら右旋回。
&br; ↓
また、&&(FastTimer(1)<t)を用いることにより、FastTimer(1...
&br; このサブルーチンは、最初はSENSOR1がblack以下のと...
sub ST()
{
turn_right;Wait(turn_t);go;Wait(FT);sp;
}
これは、交差点と認識してから、交差点を直進したいとき...
&br; 右に曲がり、直進するというものです。&br; ここでFT...
sub follow_l_r()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){
turn_right;ClearTimer(0);
} else if (SENSOR_1 < black){
turn_right;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
right;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
right;
} else if (SENSOR_1 < gray){
go;ClearTimer(0);
} else if (SENSOR_1 < w_gray){
left;ClearTimer(0);;
}
}
sp;Wait(WT);
}
これは、線の右側をライントレースするために用いたプロ...
&br; ・センサー1が41よりも小さい値なら、右旋回。
&br; ↓
&br; ・センサー1が41以上45よりも小さい値なら、右。
&br; ↓
&br; ・センサー1が45以上47よりも小さい値なら、直進。
&br; ↓
&br; ・センサー1が47以上51よりも小さい値なら、左。
&br; ↓
&br; ・それ以外なら左旋回。
&br; ↓
このサブルーチンの目的は、FからDの区間を曲がり切ること...
sub curve()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){
turn_left;ClearTimer(0);
} else if (SENSOR_1 < black){
turn_left;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
left;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
left;
} else if ((SENSOR_1 < gray)&&(FastTimer(1)<t)){
go;ClearTimer(0);
} else if (SENSOR_1 < gray){
go;
} else if (SENSOR_1 < w_gray){
right;ClearTimer(0);
} else {
turn_right;ClearTimer(0);
}
}
turn_right;Wait(turn_t-10);go;Wait(FT);sp;
}
これは、JからGのカーブを曲がるために作りました。&br;...
この区間では交差点の認識がうまく出なかったためfollow_li...
sub ball_c()
{
while(FastTimer(1)<t){
if (SENSOR_1 < black){
turn_right;
} else if (SENSOR_1 < b_gray){
right;
} else if (SENSOR_1 < gray){
go;
} else if (SENSOR_1 < w_gray){
left;
} else {
turn_left;
}
}
repeat(3){
OnFwd(OUT_B);Wait(1);Off(OUT_B);
go;Wait(50);sp;
}
}
これは、ボールをつかむためのものです。
&br; 動き方はsub follow_l_r()と同じです。それから、ボー...
sub ball_l()
{
OnRev(OUT_B);Wait(10);sp;
}
モーターを逆に動かして、ボールを離すためのものです。
**task mainについて [#x8e06d98]
-MからK
ClearTimer(0); //黒、黒寄りの灰色と連続し...
ClearTimer(1); //発進から19秒間は交差点と...
turn_t=24;t=1900;WT=0;
follow_line();
FT=25;ST();
これは、線の左側を走行してKで交差点と認識するというも...
-KからL
ClearTimer(0);
ClearTimer(1);
t=250;ball_c();
これはボールに近づき、ボールをつかむというものです。&...
-LからK
ClearTimer(0);
ClearTimer(1);
turn_left;Wait(173);sp;
go;Wait(240);sp;
何度か実際に試して、回る時間と直進する時間を決めまし...
-KからJ
t=0;WT=100;turn_t=20; //連続して黒、黒寄りの灰色...
follow_line(); //そこは交差点と認識
-JからG
FT=10;WT=0;turn_t=30;t=70;
repeat(3){
ClearTimer(0);
ClearTimer(1);
curve();
}
ここでは、繰り返しを使うことにより何度も同じプログラ...
-FからD
ClearTimer(0);
ClearTimer(1);
turn_t=33;WT=100;t=640;FT=20;
follow_l_r();
これは、線の右側に出るようにしてから、線の右側を沿う...
-DからB
ClearTimer(0);
ClearTimer(1);
turn_left;Wait(turn_t-10);sp;
go;Wait(50);sp;
follow_l_r();
turn_left;Wait(turn_t-10);sp;
Dで一時停止してから直進し、そのままBまで沿って行くと...
-BからA
ball_l();
go;Wait(150);sp;
ボールを離して、ゴールに押し込み、Aに入るというプログ...
*まとめ [#sfdbc67b]
出来たこと
・コース通り走行することの出来るロボットの作成
&br; ・プログラムの簡略化
&br; ・ボールを掴むこと
出来なかったこと
・FからDの区間を、線の左側を走行したまま通過すること
改善可能な点
・カーブ、線を沿うプログラムを変数を駆使して一つにす...
&br; ・もっと簡単に、交差点と認識するためには、光セン...
終了行:
[[2019a/Member]]
目次
#contents
*課題2 [#ja858b37]
A地点を出発し、次のいずれかの経路を黒い線にそって動くロ...
・A地点から出発 → B → C(直進) → D(一時停止の後、直進) →...
&br; ・A地点から出発 → M → K(直進) → L(ピンポン玉を...
交差点では1秒間停止し、丁字路では直角方向に進入する時の...
**選んだコース [#y421ea0d]
私は下のコースをやりました。
*ロボットの説明 [#of46aaab]
**構造について [#ud45fb8e]
***全体図 [#q4da8e04]
#ref(./P_20190715_201218 - コピー.jpg,54.1,全図)
できるだけ小さくすることが出来ました。しかし、はじめ...
***アーム部分 [#uf404ac6]
#ref(./P_20190715_202505_LL.jpg,66.4,アーム)
モーターとアーム部分はゴムによってつながっています。...
***車体 [#l262ec25]
#ref(./P_20190715_210355_NT.jpg,68.6,車体)
モーターを直列につなげることにより車体を小さくするこ...
***ボールをつかむ [#c77bfa4b]
#ref(./P_20190718_134818.jpg,53.9,ボール)
ボールを掴んでいるときの写真です。ボールを掴むことに...
*制御について [#r8389748]
**#defineについて [#i7c9ac39]
#define go OnFwd(OUT_AC);
#define turn_left OnRev(OUT_A);OnFwd(OUT_C);
#define turn_right OnFwd(OUT_A);OnRev(OUT_C);
#define right OnFwd(OUT_A);Off(OUT_C);
#define left OnFwd(OUT_C);Off(OUT_A);
これらのプログラムは移動に関するものです。&br; 上か...
#define w_gray 51
#define gray 47
#define b_gray 45
#define black 41
これらのプログラムは色の値に関するものであり、&br; ...
**交差点の判断方法 [#w60a64a9]
交差点と認識するためには、連続して黒、又は黒よりの灰...
**サブルーチンについて [#cc572bf5]
ルーチンは、一連の命令をまとめたものを意味し、 一番最...
sub follow_line()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){ ...
turn_left;ClearTimer(0); ...
} else if (SENSOR_1 < black){ //Clear...
turn_left;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
left;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
left;
} else if (SENSOR_1 < gray){
go;ClearTimer(0);
} else if (SENSOR_1 < w_gray){
right;ClearTimer(0);
} else {
turn_right;ClearTimer(0);
}
}
sp;Wait(WT);
}
これは、線の左側をライントレースするために用いたサブ...
&br; ・センサー1が41よりも小さい値なら、左旋回。
&br; ↓
&br; ・センサー1が41以上45よりも小さい値なら、左。
&br; ↓
&br; ・センサー1が45以上47よりも小さい値なら、直進。
&br; ↓
&br; ・センサー1が47以上51よりも小さい値なら、右。
&br; ↓
&br; ・それ以外なら右旋回。
&br; ↓
また、&&(FastTimer(1)<t)を用いることにより、FastTimer(1...
&br; このサブルーチンは、最初はSENSOR1がblack以下のと...
sub ST()
{
turn_right;Wait(turn_t);go;Wait(FT);sp;
}
これは、交差点と認識してから、交差点を直進したいとき...
&br; 右に曲がり、直進するというものです。&br; ここでFT...
sub follow_l_r()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){
turn_right;ClearTimer(0);
} else if (SENSOR_1 < black){
turn_right;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
right;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
right;
} else if (SENSOR_1 < gray){
go;ClearTimer(0);
} else if (SENSOR_1 < w_gray){
left;ClearTimer(0);;
}
}
sp;Wait(WT);
}
これは、線の右側をライントレースするために用いたプロ...
&br; ・センサー1が41よりも小さい値なら、右旋回。
&br; ↓
&br; ・センサー1が41以上45よりも小さい値なら、右。
&br; ↓
&br; ・センサー1が45以上47よりも小さい値なら、直進。
&br; ↓
&br; ・センサー1が47以上51よりも小さい値なら、左。
&br; ↓
&br; ・それ以外なら左旋回。
&br; ↓
このサブルーチンの目的は、FからDの区間を曲がり切ること...
sub curve()
{
while(FastTimer(0)<turn_t){
if ((SENSOR_1 < black)&&(FastTimer(1)<t)){
turn_left;ClearTimer(0);
} else if (SENSOR_1 < black){
turn_left;
} else if ((SENSOR_1 < b_gray)&&(FastTimer(1)<t)){
left;ClearTimer(0);
} else if (SENSOR_1 < b_gray){
left;
} else if ((SENSOR_1 < gray)&&(FastTimer(1)<t)){
go;ClearTimer(0);
} else if (SENSOR_1 < gray){
go;
} else if (SENSOR_1 < w_gray){
right;ClearTimer(0);
} else {
turn_right;ClearTimer(0);
}
}
turn_right;Wait(turn_t-10);go;Wait(FT);sp;
}
これは、JからGのカーブを曲がるために作りました。&br;...
この区間では交差点の認識がうまく出なかったためfollow_li...
sub ball_c()
{
while(FastTimer(1)<t){
if (SENSOR_1 < black){
turn_right;
} else if (SENSOR_1 < b_gray){
right;
} else if (SENSOR_1 < gray){
go;
} else if (SENSOR_1 < w_gray){
left;
} else {
turn_left;
}
}
repeat(3){
OnFwd(OUT_B);Wait(1);Off(OUT_B);
go;Wait(50);sp;
}
}
これは、ボールをつかむためのものです。
&br; 動き方はsub follow_l_r()と同じです。それから、ボー...
sub ball_l()
{
OnRev(OUT_B);Wait(10);sp;
}
モーターを逆に動かして、ボールを離すためのものです。
**task mainについて [#x8e06d98]
-MからK
ClearTimer(0); //黒、黒寄りの灰色と連続し...
ClearTimer(1); //発進から19秒間は交差点と...
turn_t=24;t=1900;WT=0;
follow_line();
FT=25;ST();
これは、線の左側を走行してKで交差点と認識するというも...
-KからL
ClearTimer(0);
ClearTimer(1);
t=250;ball_c();
これはボールに近づき、ボールをつかむというものです。&...
-LからK
ClearTimer(0);
ClearTimer(1);
turn_left;Wait(173);sp;
go;Wait(240);sp;
何度か実際に試して、回る時間と直進する時間を決めまし...
-KからJ
t=0;WT=100;turn_t=20; //連続して黒、黒寄りの灰色...
follow_line(); //そこは交差点と認識
-JからG
FT=10;WT=0;turn_t=30;t=70;
repeat(3){
ClearTimer(0);
ClearTimer(1);
curve();
}
ここでは、繰り返しを使うことにより何度も同じプログラ...
-FからD
ClearTimer(0);
ClearTimer(1);
turn_t=33;WT=100;t=640;FT=20;
follow_l_r();
これは、線の右側に出るようにしてから、線の右側を沿う...
-DからB
ClearTimer(0);
ClearTimer(1);
turn_left;Wait(turn_t-10);sp;
go;Wait(50);sp;
follow_l_r();
turn_left;Wait(turn_t-10);sp;
Dで一時停止してから直進し、そのままBまで沿って行くと...
-BからA
ball_l();
go;Wait(150);sp;
ボールを離して、ゴールに押し込み、Aに入るというプログ...
*まとめ [#sfdbc67b]
出来たこと
・コース通り走行することの出来るロボットの作成
&br; ・プログラムの簡略化
&br; ・ボールを掴むこと
出来なかったこと
・FからDの区間を、線の左側を走行したまま通過すること
改善可能な点
・カーブ、線を沿うプログラムを変数を駆使して一つにす...
&br; ・もっと簡単に、交差点と認識するためには、光セン...
ページ名: