2015b/Member/A.T.9/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2015b/Member]]
目次
#contents
*はじめに [#h31c7b26]
第二回目の課題のテーマは、「自立型ロボットによるライント...
今回の課題において注意すべき点は4つ、
1.ラインは2cm幅
2.ロボットに搭載できる光センサーは1つのみ
3.交差点の判断はその場で1秒間停止
4.なるべく速いタイムを目指す
である。
*ロボットの説明 [#s9e6fd2a]
今回使用したロボットはこちらである。
&ref(2015b/Member/A.T.9/Mission2/IMG_2649.jpg);
このロボットは、NXTのセットに付属されている組み立て図に記...
**ロボットの全体の動作・役割 [#r1df50a8]
モーター2つと光センサー1つを搭載した基本的なロボットで...
&ref(2015b/Member/A.T.9/Mission2/IMG_2651.jpg);
**光センサーの説明 [#m63eace0]
ライントレースはその言葉の通りラインをたどるのだが、たど...
37より下は黒、56より上は白、37以上56以下は黒と白...
としている。
*ラインについての説明 [#kb8897f6]
これがロボットにトレースさせるラインである。
&ref(2015b/Member/A.T.9/Mission2/2015b-mission2.jpg);
この課題での交差点は線と線が交わっているところを指し、直...
**トレース順序 [#e4c48083]
A地点からB地点へ
A地点 → P直進 → Q直進 → Q右折 → P右折 → Q左折 → P左折 → ...
が私の課題である。
**私たちが描いた実際のライン [#za5b3fc5]
&ref(2015b/Member/A.T.9/Mission2/IMG_2652.jpg);
*プログラムの説明 [#j455cebb]
今回作成したプログラムの大まかな戦略は、
1.”交差点”と”90度のコーナー”の数を数え、その時の数に応...
2.トレースする黒線の左側通行と右側通行を使い分け、交差点...
&ref(2015b/Member/A.T.9/Mission2/2015b-mission21.jpg);
赤く塗られた部分のみ黒線の右側通行をする。それ以外は黒線...
**定義 [#y32c31fe]
#define go OnFwd(OUT_BC,30); //直進
#define LEFT OnFwd(OUT_B,30);OnRev(OUT_C,29); //左に転回
#define RIGHT OnFwd(OUT_C,30);OnRev(OUT_B,25); //右に転回
#define B(b) OnFwd(OUT_B,b); //タイヤ...
#define C(c) OnFwd(OUT_C,c); //タイヤ...
#define OFF Off(OUT_BC); //BCを止...
#define sound PlaySound(SOUND_CLICK); Wait(100);//1秒間...
**サブルーチン [#m2e0b497]
sub AAA() {
sound;
OFF;
Wait(1000);
}
このサブルーチン「AAA」は、交差点時における動作”1秒間停...
**メインルーチン [#w8742e85]
task main ()
{
int T=0;
int S=0;
T,Sの箱を作る。これは、”交差点”、”90度のコーナー”を数え...
SetSensorLight(S3); //ポート3の光...
long t_L=CurrentTick(); //ここで時間の...
while(true){
while(CurrentTick()-t_L<=170){
if(SENSOR_3<37){
LEFT;
} else if (SENSOR_3<56) {
go;
t_L=CurrentTick();
} else {
RIGHT;
t_L=CurrentTick();
}
Wait(1);
}
上記の行が今回の一番重要なところである。この行により交差...
T++; //交差点、90度のコーナーが検知されると、ルー...
if (T==3) { //T=3の時は二回目のQ地点通過のため、右折...
AAA();
C(30);
B(-30);
Wait(500);
go;
Wait(320);
} else if (T==4) { //T=4の時は二回目のP地点通過のため...
AAA();
C(40);
B(-15);
Wait(700);
long t_Z=CurrentTick(); //P地点右折後 t...
while(CurrentTick()-t_Z<15000){ //15秒経過する...
if(SENSOR_3<37){
LEFT;
}else if(SENSOR_3<56){
go;
t_L=CurrentTick();
}else{
RIGHT;
t_L=CurrentTick();
}
Wait(1);
}
OFF; //15秒経過したら上記の動作で右に...
Wait(300);
C(30);
Wait(500);
OFF;
Wait(300);
while(S<=2){
long t_K=CurrentTick();
while(CurrentTick()-t_K<=175){ //黒線の右側を...
if (SENSOR_3<37) {
RIGHT;
}else if (SENSOR_3<56) {
go;
t_K=CurrentTick();
}else{
LEFT;
t_K=CurrentTick();
}
Wait(1);
}
S++; //交差点、90度のコーナーが検知されると、ル...
if(S==3){ //S=3は三回目のQ地点の通過であるため...
OFF;
Wait(1000);
B(40);
Wait(600);
go;
Wait(200);
}else{ //S=1・S=2は90度コーナーの検知の...
C(30);
B(-25);
Wait(300);
}
t_K=CurrentTick();
}
} else if (T==5) { //T=5は三回目のP地点の通過である...
AAA();
B(30);
Wait(250);
OFF;
} else if (T==6) { //T=6は交差点ではないので、交差点...
B(30);
C(-20);
Wait(600);
} else if (T==7) { //T=7でB地点を判断しゴールである。
OFF;
Wait(10000);
} else { //交差点において直進をさせる動作である。
T=1の時(P地点一回目の通過時)、...
AAA();
C(30);
B(-30);
Wait(200);
go;
Wait(300);
OFF;
}
t_L = CurrentTick();
}
}
*結果 [#ba08c3af]
このプログラムでA地点からB地点まで、課題通りにトレースさ...
タイムは5回連続で行い、最速は1分10秒、平均1分22秒...
*工夫点 [#nafc3d0d]
1.右側通行と左側通行を使い分けた点。
今回の課題の中で一番苦しめられたのはQ地点三回目の左折であ...
2.プログラムの変更、追加が簡単にできる点。
カウント式のため、交差点・90度コーナーに差し掛かった時...
*悪い点・改善点 [#n50397a0]
動きの滑らかさ
今回しきい値を2つしか作れず、3つの動作のみとなり滑らか...
*感想 [#zb5e7ca9]
はじめのうちは線を上手くたどらせることすらできず、課題が...
終了行:
[[2015b/Member]]
目次
#contents
*はじめに [#h31c7b26]
第二回目の課題のテーマは、「自立型ロボットによるライント...
今回の課題において注意すべき点は4つ、
1.ラインは2cm幅
2.ロボットに搭載できる光センサーは1つのみ
3.交差点の判断はその場で1秒間停止
4.なるべく速いタイムを目指す
である。
*ロボットの説明 [#s9e6fd2a]
今回使用したロボットはこちらである。
&ref(2015b/Member/A.T.9/Mission2/IMG_2649.jpg);
このロボットは、NXTのセットに付属されている組み立て図に記...
**ロボットの全体の動作・役割 [#r1df50a8]
モーター2つと光センサー1つを搭載した基本的なロボットで...
&ref(2015b/Member/A.T.9/Mission2/IMG_2651.jpg);
**光センサーの説明 [#m63eace0]
ライントレースはその言葉の通りラインをたどるのだが、たど...
37より下は黒、56より上は白、37以上56以下は黒と白...
としている。
*ラインについての説明 [#kb8897f6]
これがロボットにトレースさせるラインである。
&ref(2015b/Member/A.T.9/Mission2/2015b-mission2.jpg);
この課題での交差点は線と線が交わっているところを指し、直...
**トレース順序 [#e4c48083]
A地点からB地点へ
A地点 → P直進 → Q直進 → Q右折 → P右折 → Q左折 → P左折 → ...
が私の課題である。
**私たちが描いた実際のライン [#za5b3fc5]
&ref(2015b/Member/A.T.9/Mission2/IMG_2652.jpg);
*プログラムの説明 [#j455cebb]
今回作成したプログラムの大まかな戦略は、
1.”交差点”と”90度のコーナー”の数を数え、その時の数に応...
2.トレースする黒線の左側通行と右側通行を使い分け、交差点...
&ref(2015b/Member/A.T.9/Mission2/2015b-mission21.jpg);
赤く塗られた部分のみ黒線の右側通行をする。それ以外は黒線...
**定義 [#y32c31fe]
#define go OnFwd(OUT_BC,30); //直進
#define LEFT OnFwd(OUT_B,30);OnRev(OUT_C,29); //左に転回
#define RIGHT OnFwd(OUT_C,30);OnRev(OUT_B,25); //右に転回
#define B(b) OnFwd(OUT_B,b); //タイヤ...
#define C(c) OnFwd(OUT_C,c); //タイヤ...
#define OFF Off(OUT_BC); //BCを止...
#define sound PlaySound(SOUND_CLICK); Wait(100);//1秒間...
**サブルーチン [#m2e0b497]
sub AAA() {
sound;
OFF;
Wait(1000);
}
このサブルーチン「AAA」は、交差点時における動作”1秒間停...
**メインルーチン [#w8742e85]
task main ()
{
int T=0;
int S=0;
T,Sの箱を作る。これは、”交差点”、”90度のコーナー”を数え...
SetSensorLight(S3); //ポート3の光...
long t_L=CurrentTick(); //ここで時間の...
while(true){
while(CurrentTick()-t_L<=170){
if(SENSOR_3<37){
LEFT;
} else if (SENSOR_3<56) {
go;
t_L=CurrentTick();
} else {
RIGHT;
t_L=CurrentTick();
}
Wait(1);
}
上記の行が今回の一番重要なところである。この行により交差...
T++; //交差点、90度のコーナーが検知されると、ルー...
if (T==3) { //T=3の時は二回目のQ地点通過のため、右折...
AAA();
C(30);
B(-30);
Wait(500);
go;
Wait(320);
} else if (T==4) { //T=4の時は二回目のP地点通過のため...
AAA();
C(40);
B(-15);
Wait(700);
long t_Z=CurrentTick(); //P地点右折後 t...
while(CurrentTick()-t_Z<15000){ //15秒経過する...
if(SENSOR_3<37){
LEFT;
}else if(SENSOR_3<56){
go;
t_L=CurrentTick();
}else{
RIGHT;
t_L=CurrentTick();
}
Wait(1);
}
OFF; //15秒経過したら上記の動作で右に...
Wait(300);
C(30);
Wait(500);
OFF;
Wait(300);
while(S<=2){
long t_K=CurrentTick();
while(CurrentTick()-t_K<=175){ //黒線の右側を...
if (SENSOR_3<37) {
RIGHT;
}else if (SENSOR_3<56) {
go;
t_K=CurrentTick();
}else{
LEFT;
t_K=CurrentTick();
}
Wait(1);
}
S++; //交差点、90度のコーナーが検知されると、ル...
if(S==3){ //S=3は三回目のQ地点の通過であるため...
OFF;
Wait(1000);
B(40);
Wait(600);
go;
Wait(200);
}else{ //S=1・S=2は90度コーナーの検知の...
C(30);
B(-25);
Wait(300);
}
t_K=CurrentTick();
}
} else if (T==5) { //T=5は三回目のP地点の通過である...
AAA();
B(30);
Wait(250);
OFF;
} else if (T==6) { //T=6は交差点ではないので、交差点...
B(30);
C(-20);
Wait(600);
} else if (T==7) { //T=7でB地点を判断しゴールである。
OFF;
Wait(10000);
} else { //交差点において直進をさせる動作である。
T=1の時(P地点一回目の通過時)、...
AAA();
C(30);
B(-30);
Wait(200);
go;
Wait(300);
OFF;
}
t_L = CurrentTick();
}
}
*結果 [#ba08c3af]
このプログラムでA地点からB地点まで、課題通りにトレースさ...
タイムは5回連続で行い、最速は1分10秒、平均1分22秒...
*工夫点 [#nafc3d0d]
1.右側通行と左側通行を使い分けた点。
今回の課題の中で一番苦しめられたのはQ地点三回目の左折であ...
2.プログラムの変更、追加が簡単にできる点。
カウント式のため、交差点・90度コーナーに差し掛かった時...
*悪い点・改善点 [#n50397a0]
動きの滑らかさ
今回しきい値を2つしか作れず、3つの動作のみとなり滑らか...
*感想 [#zb5e7ca9]
はじめのうちは線を上手くたどらせることすらできず、課題が...
ページ名: