2018a/Member/Kakki/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
目次
#contents
*課題2 [#pc48e2e9]
下の図のようなコースを各チームで作成し、「ミッション」を...
**コース [#i5dbb9f6]
黒線の幅は20mm。図の中の寸法の単位はcmで、黒線については...
#ref(2018a-mission2.png)
**ミッション [#d3a2fd8c]
次のコースで黒い線に沿って動き、350mlの空き缶(黄色で表示)...
***選択したコース [#h5cf1dbc]
Aをスタート
Bを右折
Jで一時停止の後、Yの空き缶をキャッチしてJに戻る
JからKに向かい、Kを直進
Lを直進
Iを左折
Hで一時停止の後、左折
Gで一時停止の後、右折
Fで一時停止の後、右折
Eを直進
Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう
Cで一時停止の後、直進
Bを直進
Aで停止
(一時停止の指定がある場所は、1秒間停止する)
*ロボットの説明 [#ja51d58c]
**全体の構造 [#v11b2325]
普通のどの方向にも動けるロボットを少し改良して小型化し、...
ロボットの右上の部分に3つ目のモーターをつけ、缶を運ぶため...
下の写真がロボット全体の写真である。
#ref(IMG_0068.JPG)
**動力(タイヤ)部分 [#xb611aac]
モーター二つを平行に取り付け、その間に光センサーを取り付...
プログラム上でBが左のタイヤのモーター、Aが右のタイヤのモ...
#ref(IMG_0085.JPG)
**缶を移動させる部分 [#tae26a52]
ロボットの前方右上の部分にモーターを取り付け、四角形の枠...
プログラム上でこのモーターはAとしている。
#ref(缶.jpg)
*メインプログラムへの準備 [#x8320438]
今回のプログラムでは、条件式が満たされるまでプログラムを...
プログラムの制作の前に、今回は光センサーを用いてライント...
?線のない白部分(プログラム上のWHITE)の明るさ:48
?線の縁の外側付近(プログラム上のWB)の明るさ:45
?線の縁の真上(プログラム上のBLACKWH)の明るさ:42
?線の縁の内側付近(プログラム上のBLACK)の明るさ:34
?線の真上の明るさ:32
#ref(図1.jpg)
この測定結果と関数を用いてプログラムを作る。
**ライントレースの方法 [#v4e1a2c2]
プログラム製作の前に光センサーの明るさの値を用いてライン...
#ref(図2.jpg)
上の図のように線の左側をライントレースする場合、明るさの...
**交差点を判断する方法 [#e0ff7704]
上のライントレースのみの命令で続けると、交差点を認識せず...
そこで、交差点を認識するためにwhile関数を用いて、明るさが...
**観測された値やその他の命令の定義 [#w15d7afe]
観測した明るさの値やトレースするときの旋回などの定義を行...
#define BLACK 34
#define BLACKWH 42
#define WB 45
#define WHITE 48
#define SPEED_H 40
#define SPEED_L 35
#define OnRL(speed_R,speed_L) OnFwd(OUT_B,speed_R);OnFwd...
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_left0 OnRL(SPEED_L, 0); // 左折
#define turn_right0 OnRL(0, SPEED_L); // 右折
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
**指定された時間黒い線の右側に沿って進むプログラム [#x0f6...
sub Rine_Trace(int Move_time) //Move_timeに入れた時間だ...
{
long tb=CurrentTick(); //時間をリセット
while(CurrentTick()-tb<=Move_time){
if(SENSOR_3>WHITE){
turn_left1;
} else if(SENSOR_3>WB){
turn_left0;
} else if(SENSOR_3>BLACKWH){
go_forward;
} else if(SENSOR_3>BLACK){
turn_right0;
} else {
turn_right1;
}
}
Off(OUT_BC);
}
**指定された時間黒い線の左側に沿って進むプログラム [#g612...
sub Line_Trace(int Move_time) //Move_timeに入れた時間だ...
{
long tb=CurrentTick();
while(CurrentTick()-tb<=Move_time){
if(SENSOR_3>WHITE){
turn_right1;
} else if(SENSOR_3>WB){
turn_right0;
} else if(SENSOR_3>BLACKWH){
go_forward;
} else if(SENSOR_3>BLACK){
turn_left0;
} else {
turn_left1;
}
}
Off(OUT_BC);
}
**交差点を認識するまで黒い線の右側に沿って進むプログラム ...
光センサーの明るさの値がBLACKよりも小さな値を観測する場合...
sub R_line_trace()
{
int n=0;
while(n<=200){
if(SENSOR_3>WHITE){
turn_left1;
n=0; //nの値をリセット
} else if(SENSOR_3>WB){
turn_left0;
n=0; //nの値をリセット
} else if(SENSOR_3>BLACKWH){
go_forward;
n=0; //nの値をリセット
} else if(SENSOR_3>BLACK){
turn_right0;
n=0; //nの値をリセット
} else {
turn_right1;
n++; //このときのみnの値を保存したままw...
}
}
Off(OUT_BC);
Wait(1000);
}
**交差点を認識するまで黒い線の左側に沿って進むプログラム ...
光センサーの明るさの値がBLACKよりも小さな値を観測する場合...
sub L_line_trace()
{
int n=0;
while(n<=200){
if(SENSOR_3>WHITE){
turn_right1;
n=0;
} else if(SENSOR_3>WB){
turn_right0;
n=0;
} else if(SENSOR_3>BLACKWH){
go_forward;
n=0;
} else if(SENSOR_3>BLACK){
turn_left0;
n=0;
} else {
turn_left1;
n++;
}
}
Off(OUT_BC);
Wait(1000);
}
**交差点で止まったあとロボットを直進・右折・左折させるプ...
交差点を認識後、ある明るさを観測するまでタイヤを動かすと...
黒い部分から白い部分に移行する(光センサーの値がblightに...
sub BK_to_WT(int blight,int B_speed,int C_speed)
{
while (SENSOR_3<blight){
OnFwd(OUT_B,B_speed);
OnFwd(OUT_C,C_speed);
}
Off(OUT_BC);
}
**缶をおいた場所から黒い線上に戻るためのプログラム [#vbf5...
途中で缶を取りに行ったり置きに行ったりするため、ロボット...
白い部分から黒い部分に移行する(光センサーの値がblightに...
sub WT_to_BK(int blight,int B_speed,int C_speed)
{
while (SENSOR_3>blight){
OnFwd(OUT_B,B_speed);
OnFwd(OUT_C,C_speed);
}
Off(OUT_BC);
}
*メインプログラム [#sab509e2]
task main()
{
SetSensorLight(S3); //?3番ポートに光センサ...
BK_to_WT(34,40,40); //?明るさが34になるまで...
WT_to_BK(48,40,40); //?明るさが48になるまで...
Rine_Trace(3000); //?線の右側を3秒間ライ...
R_line_trace(); //?交差点を認識するまで...
BK_to_WT(48,40,-10); //?明るさが48になるまで...
RotateMotor(OUT_A,-40,100); //?右腕のモーターAを40%...
Off(OUT_A); //?Aのモーターの電源を...
WT_to_BK(42,0,-40); //?明るさが42になるまで...
Rine_Trace(6000); //?線の右側を6秒間ライ...
BK_to_WT(48,60,20); //?明るさが48になるまで...
L_line_trace(); //?交差点を認識するまで...
Line_Trace(1000); //?線の左側を1秒間ライ...
L_line_trace(); //?交差点を認識するまで...
Line_Trace(20000); //?線の左側を20秒間ライ...
L_line_trace(); //?交差点を認識するまで...
BK_to_WT(47,-25,40); //?明るさが47になるまで...
Line_Trace(1500); //?線の左側を1.5秒間ラ...
L_line_trace(); //?交差点を認識するまで...
BK_to_WT(48,-30,60); //?明るさが48になるまで...
Line_Trace(7000); //21線の左側を7秒間ライ...
BK_to_WT(48,20,60); //22明るさが48になるま...
R_line_trace(); //23交差点を認識するま...
BK_to_WT(48,60,-30); //24明るさが48になるま...
RotateMotor(OUT_A,40,100); //25右腕のモーターAを40...
Off(OUT_A); //26モーターAの電源を切る
WT_to_BK(34,-60,30); //27明るさが34になるま...
BK_to_WT(48,-60,30); //28明るさが48になるま...
Rine_Trace(10000); //29線の右側を10秒間ラ...
R_line_trace(); //30交差点を認識するま...
BK_to_WT(48,60,30); //31明るさが48になるま...
Rine_Trace(7000); //32線の右側を7秒間ライ...
R_line_trace(); //33交差点を認識するま...
BK_to_WT(48,40,40); //34明るさが48になるま...
} //終
#ref(図3.jpg)
*課題2の反省・感想 [#u677b2fa]
どうしてもコース通りに行ってくれることがなく理論的には完...
終了行:
[[2018a/Member]]
目次
#contents
*課題2 [#pc48e2e9]
下の図のようなコースを各チームで作成し、「ミッション」を...
**コース [#i5dbb9f6]
黒線の幅は20mm。図の中の寸法の単位はcmで、黒線については...
#ref(2018a-mission2.png)
**ミッション [#d3a2fd8c]
次のコースで黒い線に沿って動き、350mlの空き缶(黄色で表示)...
***選択したコース [#h5cf1dbc]
Aをスタート
Bを右折
Jで一時停止の後、Yの空き缶をキャッチしてJに戻る
JからKに向かい、Kを直進
Lを直進
Iを左折
Hで一時停止の後、左折
Gで一時停止の後、右折
Fで一時停止の後、右折
Eを直進
Dで一時停止の後、空き缶をXに置いてDに戻り、Cに向かう
Cで一時停止の後、直進
Bを直進
Aで停止
(一時停止の指定がある場所は、1秒間停止する)
*ロボットの説明 [#ja51d58c]
**全体の構造 [#v11b2325]
普通のどの方向にも動けるロボットを少し改良して小型化し、...
ロボットの右上の部分に3つ目のモーターをつけ、缶を運ぶため...
下の写真がロボット全体の写真である。
#ref(IMG_0068.JPG)
**動力(タイヤ)部分 [#xb611aac]
モーター二つを平行に取り付け、その間に光センサーを取り付...
プログラム上でBが左のタイヤのモーター、Aが右のタイヤのモ...
#ref(IMG_0085.JPG)
**缶を移動させる部分 [#tae26a52]
ロボットの前方右上の部分にモーターを取り付け、四角形の枠...
プログラム上でこのモーターはAとしている。
#ref(缶.jpg)
*メインプログラムへの準備 [#x8320438]
今回のプログラムでは、条件式が満たされるまでプログラムを...
プログラムの制作の前に、今回は光センサーを用いてライント...
?線のない白部分(プログラム上のWHITE)の明るさ:48
?線の縁の外側付近(プログラム上のWB)の明るさ:45
?線の縁の真上(プログラム上のBLACKWH)の明るさ:42
?線の縁の内側付近(プログラム上のBLACK)の明るさ:34
?線の真上の明るさ:32
#ref(図1.jpg)
この測定結果と関数を用いてプログラムを作る。
**ライントレースの方法 [#v4e1a2c2]
プログラム製作の前に光センサーの明るさの値を用いてライン...
#ref(図2.jpg)
上の図のように線の左側をライントレースする場合、明るさの...
**交差点を判断する方法 [#e0ff7704]
上のライントレースのみの命令で続けると、交差点を認識せず...
そこで、交差点を認識するためにwhile関数を用いて、明るさが...
**観測された値やその他の命令の定義 [#w15d7afe]
観測した明るさの値やトレースするときの旋回などの定義を行...
#define BLACK 34
#define BLACKWH 42
#define WB 45
#define WHITE 48
#define SPEED_H 40
#define SPEED_L 35
#define OnRL(speed_R,speed_L) OnFwd(OUT_B,speed_R);OnFwd...
#define go_forward OnRL(SPEED_H, SPEED_H);
#define turn_left1 OnRL(SPEED_L, -SPEED_L); // 左旋回
#define turn_left0 OnRL(SPEED_L, 0); // 左折
#define turn_right0 OnRL(0, SPEED_L); // 右折
#define turn_right1 OnRL(-SPEED_L, SPEED_L); // 右旋回
**指定された時間黒い線の右側に沿って進むプログラム [#x0f6...
sub Rine_Trace(int Move_time) //Move_timeに入れた時間だ...
{
long tb=CurrentTick(); //時間をリセット
while(CurrentTick()-tb<=Move_time){
if(SENSOR_3>WHITE){
turn_left1;
} else if(SENSOR_3>WB){
turn_left0;
} else if(SENSOR_3>BLACKWH){
go_forward;
} else if(SENSOR_3>BLACK){
turn_right0;
} else {
turn_right1;
}
}
Off(OUT_BC);
}
**指定された時間黒い線の左側に沿って進むプログラム [#g612...
sub Line_Trace(int Move_time) //Move_timeに入れた時間だ...
{
long tb=CurrentTick();
while(CurrentTick()-tb<=Move_time){
if(SENSOR_3>WHITE){
turn_right1;
} else if(SENSOR_3>WB){
turn_right0;
} else if(SENSOR_3>BLACKWH){
go_forward;
} else if(SENSOR_3>BLACK){
turn_left0;
} else {
turn_left1;
}
}
Off(OUT_BC);
}
**交差点を認識するまで黒い線の右側に沿って進むプログラム ...
光センサーの明るさの値がBLACKよりも小さな値を観測する場合...
sub R_line_trace()
{
int n=0;
while(n<=200){
if(SENSOR_3>WHITE){
turn_left1;
n=0; //nの値をリセット
} else if(SENSOR_3>WB){
turn_left0;
n=0; //nの値をリセット
} else if(SENSOR_3>BLACKWH){
go_forward;
n=0; //nの値をリセット
} else if(SENSOR_3>BLACK){
turn_right0;
n=0; //nの値をリセット
} else {
turn_right1;
n++; //このときのみnの値を保存したままw...
}
}
Off(OUT_BC);
Wait(1000);
}
**交差点を認識するまで黒い線の左側に沿って進むプログラム ...
光センサーの明るさの値がBLACKよりも小さな値を観測する場合...
sub L_line_trace()
{
int n=0;
while(n<=200){
if(SENSOR_3>WHITE){
turn_right1;
n=0;
} else if(SENSOR_3>WB){
turn_right0;
n=0;
} else if(SENSOR_3>BLACKWH){
go_forward;
n=0;
} else if(SENSOR_3>BLACK){
turn_left0;
n=0;
} else {
turn_left1;
n++;
}
}
Off(OUT_BC);
Wait(1000);
}
**交差点で止まったあとロボットを直進・右折・左折させるプ...
交差点を認識後、ある明るさを観測するまでタイヤを動かすと...
黒い部分から白い部分に移行する(光センサーの値がblightに...
sub BK_to_WT(int blight,int B_speed,int C_speed)
{
while (SENSOR_3<blight){
OnFwd(OUT_B,B_speed);
OnFwd(OUT_C,C_speed);
}
Off(OUT_BC);
}
**缶をおいた場所から黒い線上に戻るためのプログラム [#vbf5...
途中で缶を取りに行ったり置きに行ったりするため、ロボット...
白い部分から黒い部分に移行する(光センサーの値がblightに...
sub WT_to_BK(int blight,int B_speed,int C_speed)
{
while (SENSOR_3>blight){
OnFwd(OUT_B,B_speed);
OnFwd(OUT_C,C_speed);
}
Off(OUT_BC);
}
*メインプログラム [#sab509e2]
task main()
{
SetSensorLight(S3); //?3番ポートに光センサ...
BK_to_WT(34,40,40); //?明るさが34になるまで...
WT_to_BK(48,40,40); //?明るさが48になるまで...
Rine_Trace(3000); //?線の右側を3秒間ライ...
R_line_trace(); //?交差点を認識するまで...
BK_to_WT(48,40,-10); //?明るさが48になるまで...
RotateMotor(OUT_A,-40,100); //?右腕のモーターAを40%...
Off(OUT_A); //?Aのモーターの電源を...
WT_to_BK(42,0,-40); //?明るさが42になるまで...
Rine_Trace(6000); //?線の右側を6秒間ライ...
BK_to_WT(48,60,20); //?明るさが48になるまで...
L_line_trace(); //?交差点を認識するまで...
Line_Trace(1000); //?線の左側を1秒間ライ...
L_line_trace(); //?交差点を認識するまで...
Line_Trace(20000); //?線の左側を20秒間ライ...
L_line_trace(); //?交差点を認識するまで...
BK_to_WT(47,-25,40); //?明るさが47になるまで...
Line_Trace(1500); //?線の左側を1.5秒間ラ...
L_line_trace(); //?交差点を認識するまで...
BK_to_WT(48,-30,60); //?明るさが48になるまで...
Line_Trace(7000); //21線の左側を7秒間ライ...
BK_to_WT(48,20,60); //22明るさが48になるま...
R_line_trace(); //23交差点を認識するま...
BK_to_WT(48,60,-30); //24明るさが48になるま...
RotateMotor(OUT_A,40,100); //25右腕のモーターAを40...
Off(OUT_A); //26モーターAの電源を切る
WT_to_BK(34,-60,30); //27明るさが34になるま...
BK_to_WT(48,-60,30); //28明るさが48になるま...
Rine_Trace(10000); //29線の右側を10秒間ラ...
R_line_trace(); //30交差点を認識するま...
BK_to_WT(48,60,30); //31明るさが48になるま...
Rine_Trace(7000); //32線の右側を7秒間ライ...
R_line_trace(); //33交差点を認識するま...
BK_to_WT(48,40,40); //34明るさが48になるま...
} //終
#ref(図3.jpg)
*課題2の反省・感想 [#u677b2fa]
どうしてもコース通りに行ってくれることがなく理論的には完...
ページ名: