2019a/Member/ryotaro/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*目次 [#uc7ba6f6]
1.課題について~
2.ロボットについて~
3.プログラミングについて~
4.感想
*1.課題について [#p919c14b]
○今回の課題
・下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
○コース
#ref(2019a/Member/ryotaro/Mission2/Screenshot_20190719-131723.png,50%,Screenshot_20190719-131723.png)
○ミッション
・A地点を出発し、次の経路を黒い線にそって動くロボットを作成する。~
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(右折) → J(一時停止の後、左折) → I(直進) → H(直進) → G(左折) → F → E → D(一時停止の後、直進) → C(直進) → B(一時停止) → シュート→ A地点に入る(ゴール)
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*2.ロボットについて [#k42ba4cc]
今回作ったロボット~
#ref(2019a/Member/ryotaro/Mission2/DSC_0129.JPG,50%,DSC_0129.JPG)
土台は三輪構造にし、スタート地点である20cm×19.4cmの四角形にロボット全体が収まる必要があったので、できるだけ部品を少なくかつシンプルなものにした。また。光センサーも正確に色を測定するために、地面に近づけるぎりぎりまで下げて設置した。
#ref(2019a/Member/ryotaro/Mission2/DSC_0132.JPG,50%,DSC_0132.JPG)
また、ボールを保持するアームはかご型にした。はさむような型も考えたが、こちらの方がより確実にボールを確保できると思い、この形にした。
#ref(2019a/Member/ryotaro/Mission2/DSC_0130.JPG,50%,DSC_0130.JPG)
*3.プログラミングについて [#b5b7d609]
#define BLACK 30 //色の定義(黒
#define B_GLAY 38 黒と灰色の中間
#define GLAY 45 灰色(しきい値)
#define W_GLAY 53 白と灰色の中間
#define WHITE 63 白)
#define r_right OnFwd(OUT_C,50);Off(OUT_B); //右旋回
#define t_right OnFwd(OUT_C,75);OnFwd(OUT_B,10); //右折
#define go OnFwd(OUT_BC,40); //直進
#define t_left OnFwd(OUT_B,75);OnFwd(OUT_C,10); //左折
#define r_left OnFwd(OUT_B,20);Off(OUT_C); //左旋回
#define MOVE_TIME 500
#define up OnRev(OUT_A,50);Wait(500);b //アームを上げる
#define down OnFwd(OUT_A,50);Wait(500); 下げる
#define u_turn OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(1000); //Uターン
#define short_break Off(OUT_BC);Wait(100); //一時停止
sub follow_line() //交差点を認識するまで黒線に沿って進むプログラム
{
SetSensorLight(S3);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= MOVE_TIME){
if (SENSOR_1 < BLACK){ //黒の時だけタイマーをリセットしない→交差点を判別する
r_left;
} else if (SENSOR_3 < B_GLAY){ t0=CurrentTick();
t_left;
} else if (SENSOR_3 < GLAY){ t0=CurrentTick();
go;
} else if (SENSOR_3 < W_GLAY){ t0=CurrentTick();
t_right;
} else if (SENSOR_3 > WHITE){ t0=CurrentTick();
r_right;
} else {go;}
}
Off(OUT_BC); //黒の時間がMOVE TIMEを超えて交差点とわかれば止まる
}
sub cross_line(){ //交差点を渡るプログラム
SetSensorLight(S3);
go; //白を認識するまで進む
until (SENSOR_3 > WHITE); →follow_line()を後に続けることで交差点を渡る
}
task main()
{
follow_line();
short_break; //Kで一時停止
OnRev(OUT_B,50);Off(OUT_C); //車体を黒線と平行に戻す
Wait(100);
go;
Wait(2000);
down; //アームを下げてボールを確保
u_turn;
follow_line();
cross_line();
follow_line(); //K地点の交差点通過
short_break; //J地点の交差点で一時停止
cross_line(); //交差点を通過
follow_line();
cross_line(); //I地点の交差点を通過
follow_line();
cross_line(); //H地点の交差点を通過
follow_line(); //G地点の交差点を認識
follow_line(); //cross_lineだと曲がれないのでfollow_lineで通過
follow_line(); //上記と同じ(F地点)
follow_line(); //上記と同じ(E地点)
cross_line(); //D地点の交差点を通過
follow_line();
cross_line(); //C地点の交差点を通過
follow_line();
OnRev(OUT_B,50);Off(OUT_C); //車体を黒線と平行に戻す
Wait(100);
short_break;
up; //アームを上げる
OnFwd(OUT_BC,75); //シュート
Wait(100);
go; //A地点に入る
Wait(1000);
}
*4.感想 [#w569a3a5]
終了行:
*目次 [#uc7ba6f6]
1.課題について~
2.ロボットについて~
3.プログラミングについて~
4.感想
*1.課題について [#p919c14b]
○今回の課題
・下の図のようなコースを各チームで作成し、「ミッション」を遂行するためのロボットを作成せよ。
○コース
#ref(2019a/Member/ryotaro/Mission2/Screenshot_20190719-131723.png,50%,Screenshot_20190719-131723.png)
○ミッション
・A地点を出発し、次の経路を黒い線にそって動くロボットを作成する。~
A地点から出発 → M → K(直進) → L(ピンポン玉をつかむ) → K(右折) → J(一時停止の後、左折) → I(直進) → H(直進) → G(左折) → F → E → D(一時停止の後、直進) → C(直進) → B(一時停止) → シュート→ A地点に入る(ゴール)
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ一時停止すること。
*2.ロボットについて [#k42ba4cc]
今回作ったロボット~
#ref(2019a/Member/ryotaro/Mission2/DSC_0129.JPG,50%,DSC_0129.JPG)
土台は三輪構造にし、スタート地点である20cm×19.4cmの四角形にロボット全体が収まる必要があったので、できるだけ部品を少なくかつシンプルなものにした。また。光センサーも正確に色を測定するために、地面に近づけるぎりぎりまで下げて設置した。
#ref(2019a/Member/ryotaro/Mission2/DSC_0132.JPG,50%,DSC_0132.JPG)
また、ボールを保持するアームはかご型にした。はさむような型も考えたが、こちらの方がより確実にボールを確保できると思い、この形にした。
#ref(2019a/Member/ryotaro/Mission2/DSC_0130.JPG,50%,DSC_0130.JPG)
*3.プログラミングについて [#b5b7d609]
#define BLACK 30 //色の定義(黒
#define B_GLAY 38 黒と灰色の中間
#define GLAY 45 灰色(しきい値)
#define W_GLAY 53 白と灰色の中間
#define WHITE 63 白)
#define r_right OnFwd(OUT_C,50);Off(OUT_B); //右旋回
#define t_right OnFwd(OUT_C,75);OnFwd(OUT_B,10); //右折
#define go OnFwd(OUT_BC,40); //直進
#define t_left OnFwd(OUT_B,75);OnFwd(OUT_C,10); //左折
#define r_left OnFwd(OUT_B,20);Off(OUT_C); //左旋回
#define MOVE_TIME 500
#define up OnRev(OUT_A,50);Wait(500);b //アームを上げる
#define down OnFwd(OUT_A,50);Wait(500); 下げる
#define u_turn OnFwd(OUT_B,50);OnRev(OUT_C,50);Wait(1000); //Uターン
#define short_break Off(OUT_BC);Wait(100); //一時停止
sub follow_line() //交差点を認識するまで黒線に沿って進むプログラム
{
SetSensorLight(S3);
long t0 = CurrentTick();
while(CurrentTick()-t0 <= MOVE_TIME){
if (SENSOR_1 < BLACK){ //黒の時だけタイマーをリセットしない→交差点を判別する
r_left;
} else if (SENSOR_3 < B_GLAY){ t0=CurrentTick();
t_left;
} else if (SENSOR_3 < GLAY){ t0=CurrentTick();
go;
} else if (SENSOR_3 < W_GLAY){ t0=CurrentTick();
t_right;
} else if (SENSOR_3 > WHITE){ t0=CurrentTick();
r_right;
} else {go;}
}
Off(OUT_BC); //黒の時間がMOVE TIMEを超えて交差点とわかれば止まる
}
sub cross_line(){ //交差点を渡るプログラム
SetSensorLight(S3);
go; //白を認識するまで進む
until (SENSOR_3 > WHITE); →follow_line()を後に続けることで交差点を渡る
}
task main()
{
follow_line();
short_break; //Kで一時停止
OnRev(OUT_B,50);Off(OUT_C); //車体を黒線と平行に戻す
Wait(100);
go;
Wait(2000);
down; //アームを下げてボールを確保
u_turn;
follow_line();
cross_line();
follow_line(); //K地点の交差点通過
short_break; //J地点の交差点で一時停止
cross_line(); //交差点を通過
follow_line();
cross_line(); //I地点の交差点を通過
follow_line();
cross_line(); //H地点の交差点を通過
follow_line(); //G地点の交差点を認識
follow_line(); //cross_lineだと曲がれないのでfollow_lineで通過
follow_line(); //上記と同じ(F地点)
follow_line(); //上記と同じ(E地点)
cross_line(); //D地点の交差点を通過
follow_line();
cross_line(); //C地点の交差点を通過
follow_line();
OnRev(OUT_B,50);Off(OUT_C); //車体を黒線と平行に戻す
Wait(100);
short_break;
up; //アームを上げる
OnFwd(OUT_BC,75); //シュート
Wait(100);
go; //A地点に入る
Wait(1000);
}
*4.感想 [#w569a3a5]
ページ名: