2018a/Member/MIRA/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
*課題2(ライントレース) [#t6718c46]
**課題条件 [#kbf0aba9]
&ref(IMG_3462.PNG);
Aをスタート
B
Cで一時停止
Dで一時停止、Xの空き缶をキャッチして再びDに戻る
Eを直進
Fを左折
Gで一時停止
左折
Hで一時停止
右折
Iで一時停止
右折
Lを直進
Kを直進
Jで一時停止
空き缶をYに置きてJに戻る
Bで一時停止
左折
Aで停止
各交差点では、1秒間の一時停止が求められる。
*ロボット紹介 [#g7a2b87e]
**全体の構造について [#deb49ede]
下の画像はロボットの全体写真である.
&ref(IMG_3469.jpg);
&ref(IMG_3466.jpg);
前輪にはモーター2つ,後輪にはキャスターを取り付けた.
動力は前輪にのみ伝わり,走行する.
**車体について [#w307979d]
前輪の車輪は最初,大きいものを使用していたが,細かいプロ...
&ref(IMG_3467.jpg);
&ref(IMG_3472.jpg);
今回用いたギア比は,~
+モーター(1)に歯数8の歯車をつけ、2本目の棒(2)の歯数40...
+2本目の棒には歯数40の歯車と歯数16の歯車がついている。(...
+歯数16の歯車と、3本目の棒(3)の歯数40の歯車に噛ませる。...
3本目の棒に車輪がついている。
よって、ギア比は(1/5)*(2/5)*(2/5)=(4/125)となる。
このようにして速度を遅くすることでライントレースの精度を...
**缶をつかむ機構 [#a711f040]
&ref(IMG_3470.jpg);
ロボット後部にモーターを取り付け、ゴムにより動力を前部に...
このモーターをプログラム上でBとした.
*プログラム紹介 [#v036d419]
**プログラムについて [#sd5389e8]
***define [#z0ec57f2]
#define turn_right Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT...
#define turn_left Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_...
#define run_right Off(OUT_AC);OnFwd(OUT_A);Wait(2);Of...
#define run_left Off(OUT_AC);OnFwd(OUT_C);Wait(2);Off...
#define arm_down Off(OUT_AC);OnRev(OUT_B);Wait(300);O...
#define arm_up Off(OUT_AC);OnFwd(OUT_B);Wait(300);Off...
***サブルーチン(線の右側をライントレース) [#l544076b]
このサブルーチンでは明るさをを5種類の値で判断している.~
明るさは、黒(光度<37),暗いグレー(光度<42),グレー...
明るさの判断は0.02秒間隔で行われており,黒と判断された場...
sub follow_line1(){ClearTimer(0);
while(FastTimer(0)<20)
{
if(SENSOR_2<37){
run_left;
}else if(SENSOR_2<42){
turn_left;
ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
ClearTimer(0);
}else if(SENSOR_2<50){
turn_right;
ClearTimer(0);
}else if(SENSOR_2<55){
run_right;
ClearTimer(0);
}
}
***サブルーチン(線の左側をライントレース) [#of843453]
明るさの判断はサブルーチン(線の右側をライントレース)と...
このサブルーチンでは、値によって作動するが上記のサブルー...
sub follow_line2(){ClearTimer(0);
while(FastTimer(0)<20)
{
if(SENSOR_2<37){
run_right;
}else if(SENSOR_2<42){
turn_right;
ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
ClearTimer(0);
}else if(SENSOR_2<50){
turn_left;
ClearTimer(0);
}else if(SENSOR_2<55){
run_left;
ClearTimer(0);
}
}
***メインプログラム [#qe0749d0]
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
OnFwd(OUT_AC);
Wait(100); //スタートからAの黒線を超えるまで1秒...
ClearTimer(1);
while(FastTimer(1)<300)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //BC間のカーブまでの走行時間を...
follow_line1();
Wait(100); //Cで交差点判断をし,1秒間停止
OnFwd(OUT_AC);
Wait(70); //Cを通過
follow_line1(); //D前の直角カーブまでライントレー...
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(140); //90°回転
follow_line1();
Wait(100); //Dで交差点判断の後に一時停止
Off(OUT_AC); //D終了
OnFwd(OUT_AC);
Wait(100); //缶まで前進
arm_down; //缶をつかむ
until(SENSOR_2<37){
OnRev(OUT_AC);
} //黒線(光度<37)を判断するまで後...
OnRev(OUT_AC);
Wait(40); //機体は円X内で停止するため,...
ClearTimer(1);
while(FastTimer(1)<300){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //Dに戻った時,戻る場所にばらつきが...
follow_line1(); //Eまでライントレース
OnFwd(OUT_A);
Wait(50); //Eで交差点判断した後に,E...
ClearTimer(1);
while(FastTimer(1)<1450){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //定義したライントレースではFを交差点と...
follow_line1();
Wait(100); //Gで一時停止
ClearTimer(1);
while(FastTimer(1)<3400){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //GからH直前までの時間を短縮するために...
follow_line1();
Wait(100); //Hで一時停止
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(190);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(40);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(23);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(3);
OnFwd(OUT_AC);
Wait(60); //Hで90°回転する際に一度に回って...
ClearTimer(1);
while(FastTimer(1)<320){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //Iまでの道のりは直線であるので,時...
follow_line1();
Wait(100); //I終了
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(60); //右周りに約80°回転
ClearTimer(1);
while(FastTimer(1)<200){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //回転角が大き過ぎた場合にコースへ戻るた...
follow_line2();
OnFwd(OUT_C); //Lを通過
Wait(50);
follow_line2();
OnFwd(OUT_C); //Kを通過
Wait(50);
follow_line2();
Wait(100); //Jで一時停止
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(40);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20); //Jで90°回転する際に一度に回って...
OnFwd(OUT_AC);
Wait(100); //円Y内の缶を置く位置まで前進
arm_up;
until(SENSOR_2<37){
OnRev(OUT_AC);
} //黒線(光度<37)を判断するまで...
OnRev(OUT_AC);
Wait(40); //機体は円Y内で停止するた...
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(500); //回転角を大きくとって車体を左回り...
until(SENSOR_2<45){
OnFwd(OUT_AC);
} //JB間のコースと交差するまで前進.この...
ClearTimer(1);
while(FastTimer(1)<350){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //車体がコースの真ん中に停止すること...
follow_line2();
Wait(100); //Bで一時停止
OnFwd(OUT_AC);
Wait(40); //車体は黒線の右側で停止するため,左...
ClearTimer(1);
while(FastTimer(1)<800){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //Bを通過した機体が方向転換をし,BA間の...
OnFwd(OUT_AC);
Wait(400); //Aまで直進するために大まかに4秒...
Off(OUT_AC); //終了
}
**交差点判断について [#ie66efc6]
交差点判断については、黒(光度が37以下)を認識した時点でタ...
走るプログラムとして、右回り(両側の車輪が互いに反対の方...
線の右側をトレースする場合は右に回る場合にのみタイマーが...
線の左側をトレースする場合は左に回る場合にのみタイマーが...
*感想・考察 [#u12c3c89]
ライントレースの際には、照明の明るさにって光センサーが認...
終了行:
[[2018a/Member]]
*課題2(ライントレース) [#t6718c46]
**課題条件 [#kbf0aba9]
&ref(IMG_3462.PNG);
Aをスタート
B
Cで一時停止
Dで一時停止、Xの空き缶をキャッチして再びDに戻る
Eを直進
Fを左折
Gで一時停止
左折
Hで一時停止
右折
Iで一時停止
右折
Lを直進
Kを直進
Jで一時停止
空き缶をYに置きてJに戻る
Bで一時停止
左折
Aで停止
各交差点では、1秒間の一時停止が求められる。
*ロボット紹介 [#g7a2b87e]
**全体の構造について [#deb49ede]
下の画像はロボットの全体写真である.
&ref(IMG_3469.jpg);
&ref(IMG_3466.jpg);
前輪にはモーター2つ,後輪にはキャスターを取り付けた.
動力は前輪にのみ伝わり,走行する.
**車体について [#w307979d]
前輪の車輪は最初,大きいものを使用していたが,細かいプロ...
&ref(IMG_3467.jpg);
&ref(IMG_3472.jpg);
今回用いたギア比は,~
+モーター(1)に歯数8の歯車をつけ、2本目の棒(2)の歯数40...
+2本目の棒には歯数40の歯車と歯数16の歯車がついている。(...
+歯数16の歯車と、3本目の棒(3)の歯数40の歯車に噛ませる。...
3本目の棒に車輪がついている。
よって、ギア比は(1/5)*(2/5)*(2/5)=(4/125)となる。
このようにして速度を遅くすることでライントレースの精度を...
**缶をつかむ機構 [#a711f040]
&ref(IMG_3470.jpg);
ロボット後部にモーターを取り付け、ゴムにより動力を前部に...
このモーターをプログラム上でBとした.
*プログラム紹介 [#v036d419]
**プログラムについて [#sd5389e8]
***define [#z0ec57f2]
#define turn_right Off(OUT_AC);OnFwd(OUT_A);OnRev(OUT...
#define turn_left Off(OUT_AC);OnFwd(OUT_C);OnRev(OUT_...
#define run_right Off(OUT_AC);OnFwd(OUT_A);Wait(2);Of...
#define run_left Off(OUT_AC);OnFwd(OUT_C);Wait(2);Off...
#define arm_down Off(OUT_AC);OnRev(OUT_B);Wait(300);O...
#define arm_up Off(OUT_AC);OnFwd(OUT_B);Wait(300);Off...
***サブルーチン(線の右側をライントレース) [#l544076b]
このサブルーチンでは明るさをを5種類の値で判断している.~
明るさは、黒(光度<37),暗いグレー(光度<42),グレー...
明るさの判断は0.02秒間隔で行われており,黒と判断された場...
sub follow_line1(){ClearTimer(0);
while(FastTimer(0)<20)
{
if(SENSOR_2<37){
run_left;
}else if(SENSOR_2<42){
turn_left;
ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
ClearTimer(0);
}else if(SENSOR_2<50){
turn_right;
ClearTimer(0);
}else if(SENSOR_2<55){
run_right;
ClearTimer(0);
}
}
***サブルーチン(線の左側をライントレース) [#of843453]
明るさの判断はサブルーチン(線の右側をライントレース)と...
このサブルーチンでは、値によって作動するが上記のサブルー...
sub follow_line2(){ClearTimer(0);
while(FastTimer(0)<20)
{
if(SENSOR_2<37){
run_right;
}else if(SENSOR_2<42){
turn_right;
ClearTimer(0);
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
ClearTimer(0);
}else if(SENSOR_2<50){
turn_left;
ClearTimer(0);
}else if(SENSOR_2<55){
run_left;
ClearTimer(0);
}
}
***メインプログラム [#qe0749d0]
task main(){
SetSensor(SENSOR_2,SENSOR_LIGHT);
OnFwd(OUT_AC);
Wait(100); //スタートからAの黒線を超えるまで1秒...
ClearTimer(1);
while(FastTimer(1)<300)
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //BC間のカーブまでの走行時間を...
follow_line1();
Wait(100); //Cで交差点判断をし,1秒間停止
OnFwd(OUT_AC);
Wait(70); //Cを通過
follow_line1(); //D前の直角カーブまでライントレー...
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(140); //90°回転
follow_line1();
Wait(100); //Dで交差点判断の後に一時停止
Off(OUT_AC); //D終了
OnFwd(OUT_AC);
Wait(100); //缶まで前進
arm_down; //缶をつかむ
until(SENSOR_2<37){
OnRev(OUT_AC);
} //黒線(光度<37)を判断するまで後...
OnRev(OUT_AC);
Wait(40); //機体は円X内で停止するため,...
ClearTimer(1);
while(FastTimer(1)<300){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //Dに戻った時,戻る場所にばらつきが...
follow_line1(); //Eまでライントレース
OnFwd(OUT_A);
Wait(50); //Eで交差点判断した後に,E...
ClearTimer(1);
while(FastTimer(1)<1450){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //定義したライントレースではFを交差点と...
follow_line1();
Wait(100); //Gで一時停止
ClearTimer(1);
while(FastTimer(1)<3400){
if(SENSOR_2<37){
turn_left;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_right;
}
} //GからH直前までの時間を短縮するために...
follow_line1();
Wait(100); //Hで一時停止
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(190);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(40);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(23);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(3);
OnFwd(OUT_AC);
Wait(60); //Hで90°回転する際に一度に回って...
ClearTimer(1);
while(FastTimer(1)<320){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //Iまでの道のりは直線であるので,時...
follow_line1();
Wait(100); //I終了
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(60); //右周りに約80°回転
ClearTimer(1);
while(FastTimer(1)<200){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //回転角が大き過ぎた場合にコースへ戻るた...
follow_line2();
OnFwd(OUT_C); //Lを通過
Wait(50);
follow_line2();
OnFwd(OUT_C); //Kを通過
Wait(50);
follow_line2();
Wait(100); //Jで一時停止
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(200);
OnFwd(OUT_A);
OnRev(OUT_C);
Wait(40);
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(20); //Jで90°回転する際に一度に回って...
OnFwd(OUT_AC);
Wait(100); //円Y内の缶を置く位置まで前進
arm_up;
until(SENSOR_2<37){
OnRev(OUT_AC);
} //黒線(光度<37)を判断するまで...
OnRev(OUT_AC);
Wait(40); //機体は円Y内で停止するた...
OnFwd(OUT_C);
OnRev(OUT_A);
Wait(500); //回転角を大きくとって車体を左回り...
until(SENSOR_2<45){
OnFwd(OUT_AC);
} //JB間のコースと交差するまで前進.この...
ClearTimer(1);
while(FastTimer(1)<350){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //車体がコースの真ん中に停止すること...
follow_line2();
Wait(100); //Bで一時停止
OnFwd(OUT_AC);
Wait(40); //車体は黒線の右側で停止するため,左...
ClearTimer(1);
while(FastTimer(1)<800){
if(SENSOR_2<37){
turn_right;
}else if(SENSOR_2<47){
OnFwd(OUT_AC);
}else if(SENSOR_2<55){
turn_left;
}
} //Bを通過した機体が方向転換をし,BA間の...
OnFwd(OUT_AC);
Wait(400); //Aまで直進するために大まかに4秒...
Off(OUT_AC); //終了
}
**交差点判断について [#ie66efc6]
交差点判断については、黒(光度が37以下)を認識した時点でタ...
走るプログラムとして、右回り(両側の車輪が互いに反対の方...
線の右側をトレースする場合は右に回る場合にのみタイマーが...
線の左側をトレースする場合は左に回る場合にのみタイマーが...
*感想・考察 [#u12c3c89]
ライントレースの際には、照明の明るさにって光センサーが認...
ページ名: