2017b/Member/yuu/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2017b/Member]]
目次
#contents
*概要 [#t954b9bf]
今回の課題はロボットが黒い線に沿って進むライントレースで...
**進む順番 [#q0d66bb9]
A地点出発→B地点直進→C地点右折→F地点直進→R地点左折(一時停...
#ref(./2017b-mission2.png,640x480,コースの全体)
*ロボットについて [#w77f58c3]
ロボットは右の写真のように説明書に載っているモータを水平...
&ref(2017b/Member/yuu/Mission2/1515373766044.jpg,320x240,...
&ref(2017b/Member/yuu/Mission2/1515912830973.jpg,320x240,...
*定義(マクロ) [#zf6d0928]
プログラミングのマクロは次の通りにした。
#define SPEED_CURVE 25 ...
#define SPEED_FAST 40 ...
#define CROSS_TIME 300 ...
#define THRESHOLD 53 ...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_FAST,SPEED_FAST); ...
#define turn_right_high OnRL(-40,SPEED_CURVE); ...
#define turn_right_low OnRL (0,SPEED_CURVE); ...
#define turn_left_high OnRL(SPEED_CURVE,-40); ...
#define turn_left_low OnRL (SPEED_CURVE,0); ...
#define nMAX 160 ...
*サブ関数 [#c3d59ab7]
プログラミングのサブ関数は次の通りにした。しかし、あまり...
**紙コップに関係するプログラム [#db2d3cb2]
sub arm_up() //紙コ...
{
RotateMotor(OUT_A,25,35); //モー...
Off(OUT_A);
}
sub arm_down() //紙コ...
{
RotateMotor(OUT_A,25,-35); //モー...
Off(OUT_A);
}
**地点Eでの車線変更のプログラム [#pdda352f]
sub change_E() //E地...
{
RotateMotor(OUT_C,25,210); //モー...
Off(OUT_C);
}
**ライントレースの基本となるプログラム [#y78ec717]
sub follow_line() //ラ...
{
long t0=CurrentTick(); //時間...
while(CurrentTick()-t0<200){ //0,...
SetSensorLight(S1);
int n=0;
while(n <= nMAX){ //黒と...
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++; //右へ...
}else{
if (SENSOR_1< THRESHOLD -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0; //右へ...
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
**特定の地点間でのライントレースのプログラム [#ab8c977f]
sub follow_line_BC() //地点...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= 355){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< THRESHOLD -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FR() //地...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= 600){
if (SENSOR_1 < THRESHOLD -11){
turn_right_high;
n++;
}else{
if (SENSOR_1< -6){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +6){
go_forward;
}else if (SENSOR_1 < THRESHOLD +10){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FR2() //地点...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <=580){
if (SENSOR_1 < THRESHOLD -11)
turn_right_high;
n++;
}else{
if (SENSOR_1< -6){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +6){
go_forward;
}else if (SENSOR_1 < THRESHOLD +11){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_RP() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <=nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_QS() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <=300){ ...
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_SS() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line1() //ラ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FC() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
*メインプログラム [#q84caa52]
task main()
{
go_forward; //地点Aから発車。
Wait(1000);
Off(OUT_BC);
follow_line(); //AB間
go_forward; //Bを直進。
Wait(CROSS_TIME);
Off(OUT_BC);//
follow_line_BC(); //CF間
RotateMotor(OUT_C,25,330);//右へ曲がる。
Off(OUT_C);
follow_line();//CF間(試験で途中で切れた時があったた...
follow_line();
OnFwd(OUT_B,35); //交差点を直進するためのプログラ...
OnFwd(OUT_C,25);
Wait(600);
Off(OUT_BC);
follow_line_FR(); //地点FR間の途中までのFE間...
follow_line_FR2();
follow_line_FR2();
follow_line();
change_E(); //地点Eにおいて右折。
follow_line(); //ER間(試験で途中で切れた時...
follow_line();
Wait(1000); //地点Rにおいて一時停止。(1...
OnFwd(OUT_B,35); //地点Rにおいて左折。
Wait(1500);
Off(OUT_C);
follow_line_RP(); //RP間
OnFwd(OUT_C,25); //地点Pを直進。交差点認識の...
Wait(600);
Off(OUT_BC);
OnFwd(OUT_B,35); //ここから紙コップを回収す...
OnFwd(OUT_C,35);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,25); //左へ約90度回転。
OnFwd(OUT_C,-25);
Wait(1500);
Off(OUT_BC);
arm_down(); //紙コップを回収。
OnFwd(OUT_B,-25); //右へ約90度回転。
OnFwd(OUT_C,25);
Wait(1500);
Off(OUT_BC);
follow_line_RP();// //PQ間
OnFwd(OUT_B,35); //地点Qにおいて左折。交差点...
OnFwd(OUT_C,10);
Wait(500);
Off(OUT_BC);
follow_line_QS(); //QS間(試験で途中で切れた時...
follow_line_QS();
Wait(1000); //地点Sにおいて一時停止。
OnFwd(OUT_C,35); //地点Sを直進。交差点認識の...
OnFwd(OUT_B,10);
Wait(1500);
Off(OUT_BC);
follow_line_SS(); //SS間
OnFwd(OUT_B,-25); //ここから紙コップを切り離す...
OnFwd(OUT_C,25);
Wait(1200);
Off(OUT_BC);
OnFwd(OUT_B,25); //後退。
OnFwd(OUT_C,25);
Wait(1100);
Off(OUT_BC);
arm_up(); //紙コップを切り離し。
OnFwd(OUT_B,25); //左へ約180度回転。
OnFwd(OUT_C,-25);
Wait(2800);
Off(OUT_BC);
OnFwd(OUT_B,25); //少し前進。
OnFwd(OUT_C,25);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,-25); //右へ約90度回転。
OnFwd(OUT_C,25);
Wait(1800);
Off(OUT_BC);
Wait(1000); //地点Sにおいて一時停止。
OnFwd(OUT_B,35); //地点Sを直進。交差点認識の際...
OnFwd(OUT_C,25);
Wait(500);
Off(OUT_BC);
follow_line(); //SF間
Wait(1000); //地点Fにおいて一時停止。
RotateMotor(OUT_B,25,200); //地点Fにおいて...
Off(OUT_B);
follow_line_FC(); //FC間
Wait(1000); //地点Cにおいて一時停止。
go_forward; //地点Cにおいて右折。まず少し...
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,-25); //右へ約約90度回転。
OnFwd(OUT_C,25);
Wait(1800);
Off(OUT_BC);
follow_line1(); //CD間
go_forward; //地点Dを前進。
Wait(1000);
Off(OUT_BC);
}
*感想と反省 [#x5b1d9ad]
今回はライントレースということで前回の文字を書くことより...
終了行:
[[2017b/Member]]
目次
#contents
*概要 [#t954b9bf]
今回の課題はロボットが黒い線に沿って進むライントレースで...
**進む順番 [#q0d66bb9]
A地点出発→B地点直進→C地点右折→F地点直進→R地点左折(一時停...
#ref(./2017b-mission2.png,640x480,コースの全体)
*ロボットについて [#w77f58c3]
ロボットは右の写真のように説明書に載っているモータを水平...
&ref(2017b/Member/yuu/Mission2/1515373766044.jpg,320x240,...
&ref(2017b/Member/yuu/Mission2/1515912830973.jpg,320x240,...
*定義(マクロ) [#zf6d0928]
プログラミングのマクロは次の通りにした。
#define SPEED_CURVE 25 ...
#define SPEED_FAST 40 ...
#define CROSS_TIME 300 ...
#define THRESHOLD 53 ...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#define go_forward OnRL(SPEED_FAST,SPEED_FAST); ...
#define turn_right_high OnRL(-40,SPEED_CURVE); ...
#define turn_right_low OnRL (0,SPEED_CURVE); ...
#define turn_left_high OnRL(SPEED_CURVE,-40); ...
#define turn_left_low OnRL (SPEED_CURVE,0); ...
#define nMAX 160 ...
*サブ関数 [#c3d59ab7]
プログラミングのサブ関数は次の通りにした。しかし、あまり...
**紙コップに関係するプログラム [#db2d3cb2]
sub arm_up() //紙コ...
{
RotateMotor(OUT_A,25,35); //モー...
Off(OUT_A);
}
sub arm_down() //紙コ...
{
RotateMotor(OUT_A,25,-35); //モー...
Off(OUT_A);
}
**地点Eでの車線変更のプログラム [#pdda352f]
sub change_E() //E地...
{
RotateMotor(OUT_C,25,210); //モー...
Off(OUT_C);
}
**ライントレースの基本となるプログラム [#y78ec717]
sub follow_line() //ラ...
{
long t0=CurrentTick(); //時間...
while(CurrentTick()-t0<200){ //0,...
SetSensorLight(S1);
int n=0;
while(n <= nMAX){ //黒と...
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++; //右へ...
}else{
if (SENSOR_1< THRESHOLD -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0; //右へ...
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
**特定の地点間でのライントレースのプログラム [#ab8c977f]
sub follow_line_BC() //地点...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= 355){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< THRESHOLD -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FR() //地...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= 600){
if (SENSOR_1 < THRESHOLD -11){
turn_right_high;
n++;
}else{
if (SENSOR_1< -6){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +6){
go_forward;
}else if (SENSOR_1 < THRESHOLD +10){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FR2() //地点...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <=580){
if (SENSOR_1 < THRESHOLD -11)
turn_right_high;
n++;
}else{
if (SENSOR_1< -6){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +6){
go_forward;
}else if (SENSOR_1 < THRESHOLD +11){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_RP() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <=nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_QS() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <=300){ ...
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_SS() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<400){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line1() //ラ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_left_high;
n++;
}else{
if (SENSOR_1< -7){
turn_left_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_right_low;
} else {
turn_right_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
sub follow_line_FC() ...
{
long t0=CurrentTick();
while(CurrentTick()-t0<200){
SetSensorLight(S1);
int n=0;
while(n <= nMAX){
if (SENSOR_1 < THRESHOLD -14){
turn_right_high;
n++;
}else{
if (SENSOR_1< -7){
turn_right_low;
}else if (SENSOR_1 < THRESHOLD +7){
go_forward;
}else if (SENSOR_1 < THRESHOLD +14){
turn_left_low;
} else {
turn_left_high;
}
n=0;
}
}
}
Off(OUT_BC);
PlaySound(SOUND_CLICK);
}
*メインプログラム [#q84caa52]
task main()
{
go_forward; //地点Aから発車。
Wait(1000);
Off(OUT_BC);
follow_line(); //AB間
go_forward; //Bを直進。
Wait(CROSS_TIME);
Off(OUT_BC);//
follow_line_BC(); //CF間
RotateMotor(OUT_C,25,330);//右へ曲がる。
Off(OUT_C);
follow_line();//CF間(試験で途中で切れた時があったた...
follow_line();
OnFwd(OUT_B,35); //交差点を直進するためのプログラ...
OnFwd(OUT_C,25);
Wait(600);
Off(OUT_BC);
follow_line_FR(); //地点FR間の途中までのFE間...
follow_line_FR2();
follow_line_FR2();
follow_line();
change_E(); //地点Eにおいて右折。
follow_line(); //ER間(試験で途中で切れた時...
follow_line();
Wait(1000); //地点Rにおいて一時停止。(1...
OnFwd(OUT_B,35); //地点Rにおいて左折。
Wait(1500);
Off(OUT_C);
follow_line_RP(); //RP間
OnFwd(OUT_C,25); //地点Pを直進。交差点認識の...
Wait(600);
Off(OUT_BC);
OnFwd(OUT_B,35); //ここから紙コップを回収す...
OnFwd(OUT_C,35);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,25); //左へ約90度回転。
OnFwd(OUT_C,-25);
Wait(1500);
Off(OUT_BC);
arm_down(); //紙コップを回収。
OnFwd(OUT_B,-25); //右へ約90度回転。
OnFwd(OUT_C,25);
Wait(1500);
Off(OUT_BC);
follow_line_RP();// //PQ間
OnFwd(OUT_B,35); //地点Qにおいて左折。交差点...
OnFwd(OUT_C,10);
Wait(500);
Off(OUT_BC);
follow_line_QS(); //QS間(試験で途中で切れた時...
follow_line_QS();
Wait(1000); //地点Sにおいて一時停止。
OnFwd(OUT_C,35); //地点Sを直進。交差点認識の...
OnFwd(OUT_B,10);
Wait(1500);
Off(OUT_BC);
follow_line_SS(); //SS間
OnFwd(OUT_B,-25); //ここから紙コップを切り離す...
OnFwd(OUT_C,25);
Wait(1200);
Off(OUT_BC);
OnFwd(OUT_B,25); //後退。
OnFwd(OUT_C,25);
Wait(1100);
Off(OUT_BC);
arm_up(); //紙コップを切り離し。
OnFwd(OUT_B,25); //左へ約180度回転。
OnFwd(OUT_C,-25);
Wait(2800);
Off(OUT_BC);
OnFwd(OUT_B,25); //少し前進。
OnFwd(OUT_C,25);
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,-25); //右へ約90度回転。
OnFwd(OUT_C,25);
Wait(1800);
Off(OUT_BC);
Wait(1000); //地点Sにおいて一時停止。
OnFwd(OUT_B,35); //地点Sを直進。交差点認識の際...
OnFwd(OUT_C,25);
Wait(500);
Off(OUT_BC);
follow_line(); //SF間
Wait(1000); //地点Fにおいて一時停止。
RotateMotor(OUT_B,25,200); //地点Fにおいて...
Off(OUT_B);
follow_line_FC(); //FC間
Wait(1000); //地点Cにおいて一時停止。
go_forward; //地点Cにおいて右折。まず少し...
Wait(800);
Off(OUT_BC);
OnFwd(OUT_B,-25); //右へ約約90度回転。
OnFwd(OUT_C,25);
Wait(1800);
Off(OUT_BC);
follow_line1(); //CD間
go_forward; //地点Dを前進。
Wait(1000);
Off(OUT_BC);
}
*感想と反省 [#x5b1d9ad]
今回はライントレースということで前回の文字を書くことより...
ページ名: