2012b/Member/HIBINO/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012b/Member]]
#contents
*メンバー [#bfa47336]
-HIBINO
-HISASI
*課題 [#t27de99e]
#ref(2012b/Member/HIBINO/Mission1/12-12-20_004 01.jpg,80%...
課題(競技内容)は(1)から(3)までライントレースをしながらボ...
(1)をスタート地点とし,(3)をゴールとする.尚,最終的にゴール...
*競技用本体 [#n0b04404]
**全体 [#mdb46a9a]
#ref(2012b/Member/HIBINO/Mission1/12-12-20_006.jpg,60%,競...
本体はmindstormsのマニュアルに組立方法が記載されている基...
**ライトセンサー周辺 [#gf156651]
&ref(2012b/Member/HIBINO/Mission1/12-12-20_005.jpg,60%,ラ...
ライトセンサーは基本形よりできるだけタイヤの軸に近づける...
**アーム [#ze6eec7e]
&ref(2012b/Member/HIBINO/Mission1/12-12-20_006.jpg,40%,ア...
⇒
&ref(2012b/Member/HIBINO/Mission1/12-12-20_009.jpg,40%,ア...
アームはこのように開いたり閉じたりすることができる.
&ref(2012b/Member/HIBINO/Mission1/12-12-20_010.jpg,40%,ア...
ボールを運んでいる時はこのようになっている.
&ref(2012b/Member/HIBINO/Mission1/12-12-20_007.jpg,60%,ア...
アームの内部はこのようにボールが入るだけの空間があり,アー...
本来ならばもう少し別の位置にアームを取り付けたかったのだが,
モーターが重いのでタイヤの軸付近に取り付け,なるべく遠心力...
*プログラム [#s88c5686]
**プログラム概要 [#f7e443f3]
作成したプログラムは役割に応じて3部構成となっている.
+ボールを確保する
+ライントレースによりゴールまで移動する
+ボールをゴール内に入れる
***プログラム全体 [#ra86e639]
#define THRESHOLD 35
#define SPEED_H 50 //前進する際の速度
#define SPEED_L 40 //トレースの為に左右に揺れながら動...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#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); //その...
#define STEP 1
#define nMAX 800 //連続...
#define short_break Off(OUT_BC); Wait(300);
#define CROSS_TIME 300 //交差...
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
task main ()
{
SetSensorLight(S2);
int nOnline=0; //連続してラインを認識した回数...
long t0=CurrentTick(); //起動開始時点の時間を記録
OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC);
OnFwd(OUT_A,30);Wait(780);Off(OUT_A);
OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC);
while (true){
while (nOnline < nMAX) {
if (SENSOR_2 < THRESHOLD){
turn_left1;
nOnline++;
}else{
if (SENSOR_2 < THRESHOLD-2){
turn_left0;
}else if (SENSOR_2 < THRESHOLD+3){
go_forward;
}else if (SENSOR_2 < THRESHOLD+7){
turn_right0;
}else{
turn_right1;}
nOnline=0;
}
}
short_break;
turn_right1; Wait(200);
cross_line;
nOnline=0;
if(CurrentTick() - t0 >= 50000){
OnFwd(OUT_A,-100);Wait(600);
}
}}
***本プログラムにおける定義 [#e77d59c3]
#define THRESHOLD 35 //(1) ...
#define SPEED_H 50 //前進する際の速度
#define SPEED_L 40 //トレースの為に左右に揺れながら動...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#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); //その...
#define STEP 1 //
#define nMAX 800 //連続...
#define short_break Off(OUT_BC); Wait(300);
#define CROSS_TIME 300 //交差...
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
最初に,BとCの端子についてだがそれぞれ(B:右タイヤ C:左...
(1)ライトセンサーがラインの上なのか上でないのかを判断する...
尚,ライントレースの動き方についてだが
&ref(2012b/Member/HIBINO/Mission1/トレース.jpg,70%,ライン...
↑この図のように常にラインの左端を中心に「黒と白」→「黒」→...
(2)では主に「交差点を直進」する際に行われる動作,すなわち...
(3)では今本体が位置している場所が一本道の上なのか交差点の...
(4)ではライントレースの際の「黒」→「白」の動作を定義して...
(5)は(4)とほとんど同じで「白」→「黒と白」の動作を定義して...
(6)ではライトセンサーが白のみを感知した場合にライン(黒)に...
(7)は今トレースしているラインが一本道なのか交差点なのかを...
&ref(2012b/Member/HIBINO/Mission1/交差点.jpg,70%,一本道と...
↑の図の過程1は一本道についてのトレースを表している.この時...
(8)は本体が交差点を交差している道を無視して直進する時間を...
(9)は(8)で定義した時間だけを実際に直進する動作を定義して...
***プログラムの開始,およびプログラム内での設定 [#iff5d614]
task main ()
{
SetSensorLight(S2); // (10)
int nOnline=0; //連続してラインを認識した回数...
long t0=CurrentTick(); //起動開始時点の時間を記録 (12)
(10)ではライトセンサーが本体の接続部2に接続されているこ...
(11)ではライトセンサーが「黒」を感知した際にカウントされ...
(12)ではプログラムを開始した瞬間の時間をt0という値に代入...
***ボールを確保するためのプログラム [#gaae9e77]
OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC); // (13)
OnFwd(OUT_A,30);Wait(780);Off(OUT_A); // (14)
OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC); // (15)
(13)はボールを爪の中に完璧に入れるための前進動作を表して...
&ref(2012b/Member/HIBINO/Mission1/開始位置.jpg,70%,開始位...
尚,開始位置は↑の図のようにしてある.課題として扱われるほど...
(14)はアームを閉じる動作を表している.尚,Aはアームに対応し...
(15)ではボールを確保した後,ライントレースを開始しやすい位...
***ライントレースのプログラム [#v145c98d]
while (true){
while (nOnline < nMAX) { // (16)
if (SENSOR_2 < THRESHOLD){ // (17)
turn_left1; // (17')
nOnline++; // (18)
}else{
if (SENSOR_2 < THRESHOLD-2){ // (19)
turn_left0; // (19')
}else if (SENSOR_2 < THRESHOLD+3){ // (20)
go_forward; // (20')
}else if (SENSOR_2 < THRESHOLD+7){ //...
turn_right0; // (21')
}else{
turn_right1;} // (22)
nOnline=0; // (23)
}
}
(16)では(11)で説明した「黒を感知した回数」が(7)で定義した...
(17)は(16)を満たした場合今ライトセンサーが当たっている地...
(19)は(1)で定義した基準値から2を引いた,つまり,より黒い場...
(20)は(1)で定義した基準値に3を足した,つまりより白い場所に...
(21)は(1)で定義した基準値に7を足した,つまり(20)よりも白い...
(22)は(17)(19)(20)(21)のどの判断にも当てはまらない場合,つ...
(23)は今までのライントレースの動作全てを終えた段階で(11)...
尚,これらの基準値±の値については全て試行錯誤から見つけた...
***交差点を越えるプログラム [#xa12f116]
short_break; //
turn_right1; Wait(200); // (24)
cross_line; // (25)
nOnline=0; // (26)
(16)において(11)の値が(7)の値を超えた場合「交差点を越える...
(24)はその場右回転の動作である.課題のコースでは交差点に差...
(25)は(24)で方向を調節した上でライントレースを無視し,(9)...
(26)では(11)の値を再び0にリセットしている.(25)の段階で交...
***ボールをゴールに入れるプログラム [#k6f56a49]
if(CurrentTick() - t0 >= 50000){ // (27)
OnFwd(OUT_A,-100);Wait(600); // (28)
(27)は交差点を越えた時,その瞬間の時間から(12)で設定した開...
&ref(2012b/Member/HIBINO/Mission1/02.png,60%,ゴール前交差...
(28)はアームを開く動作を表している.アーム内のボールを前方...
尚,ボールを転がす向きであるがゴール前の交差点((27)の説明...
*感想 [#o8c9e805]
ただライントレースをするだけならばアームを取り付ける必要...
終了行:
[[2012b/Member]]
#contents
*メンバー [#bfa47336]
-HIBINO
-HISASI
*課題 [#t27de99e]
#ref(2012b/Member/HIBINO/Mission1/12-12-20_004 01.jpg,80%...
課題(競技内容)は(1)から(3)までライントレースをしながらボ...
(1)をスタート地点とし,(3)をゴールとする.尚,最終的にゴール...
*競技用本体 [#n0b04404]
**全体 [#mdb46a9a]
#ref(2012b/Member/HIBINO/Mission1/12-12-20_006.jpg,60%,競...
本体はmindstormsのマニュアルに組立方法が記載されている基...
**ライトセンサー周辺 [#gf156651]
&ref(2012b/Member/HIBINO/Mission1/12-12-20_005.jpg,60%,ラ...
ライトセンサーは基本形よりできるだけタイヤの軸に近づける...
**アーム [#ze6eec7e]
&ref(2012b/Member/HIBINO/Mission1/12-12-20_006.jpg,40%,ア...
⇒
&ref(2012b/Member/HIBINO/Mission1/12-12-20_009.jpg,40%,ア...
アームはこのように開いたり閉じたりすることができる.
&ref(2012b/Member/HIBINO/Mission1/12-12-20_010.jpg,40%,ア...
ボールを運んでいる時はこのようになっている.
&ref(2012b/Member/HIBINO/Mission1/12-12-20_007.jpg,60%,ア...
アームの内部はこのようにボールが入るだけの空間があり,アー...
本来ならばもう少し別の位置にアームを取り付けたかったのだが,
モーターが重いのでタイヤの軸付近に取り付け,なるべく遠心力...
*プログラム [#s88c5686]
**プログラム概要 [#f7e443f3]
作成したプログラムは役割に応じて3部構成となっている.
+ボールを確保する
+ライントレースによりゴールまで移動する
+ボールをゴール内に入れる
***プログラム全体 [#ra86e639]
#define THRESHOLD 35
#define SPEED_H 50 //前進する際の速度
#define SPEED_L 40 //トレースの為に左右に揺れながら動...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#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); //その...
#define STEP 1
#define nMAX 800 //連続...
#define short_break Off(OUT_BC); Wait(300);
#define CROSS_TIME 300 //交差...
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
task main ()
{
SetSensorLight(S2);
int nOnline=0; //連続してラインを認識した回数...
long t0=CurrentTick(); //起動開始時点の時間を記録
OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC);
OnFwd(OUT_A,30);Wait(780);Off(OUT_A);
OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC);
while (true){
while (nOnline < nMAX) {
if (SENSOR_2 < THRESHOLD){
turn_left1;
nOnline++;
}else{
if (SENSOR_2 < THRESHOLD-2){
turn_left0;
}else if (SENSOR_2 < THRESHOLD+3){
go_forward;
}else if (SENSOR_2 < THRESHOLD+7){
turn_right0;
}else{
turn_right1;}
nOnline=0;
}
}
short_break;
turn_right1; Wait(200);
cross_line;
nOnline=0;
if(CurrentTick() - t0 >= 50000){
OnFwd(OUT_A,-100);Wait(600);
}
}}
***本プログラムにおける定義 [#e77d59c3]
#define THRESHOLD 35 //(1) ...
#define SPEED_H 50 //前進する際の速度
#define SPEED_L 40 //トレースの為に左右に揺れながら動...
#define OnRL(speedR,speedL) OnFwd(OUT_B,speedR);OnFwd(OU...
#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); //その...
#define STEP 1 //
#define nMAX 800 //連続...
#define short_break Off(OUT_BC); Wait(300);
#define CROSS_TIME 300 //交差...
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
最初に,BとCの端子についてだがそれぞれ(B:右タイヤ C:左...
(1)ライトセンサーがラインの上なのか上でないのかを判断する...
尚,ライントレースの動き方についてだが
&ref(2012b/Member/HIBINO/Mission1/トレース.jpg,70%,ライン...
↑この図のように常にラインの左端を中心に「黒と白」→「黒」→...
(2)では主に「交差点を直進」する際に行われる動作,すなわち...
(3)では今本体が位置している場所が一本道の上なのか交差点の...
(4)ではライントレースの際の「黒」→「白」の動作を定義して...
(5)は(4)とほとんど同じで「白」→「黒と白」の動作を定義して...
(6)ではライトセンサーが白のみを感知した場合にライン(黒)に...
(7)は今トレースしているラインが一本道なのか交差点なのかを...
&ref(2012b/Member/HIBINO/Mission1/交差点.jpg,70%,一本道と...
↑の図の過程1は一本道についてのトレースを表している.この時...
(8)は本体が交差点を交差している道を無視して直進する時間を...
(9)は(8)で定義した時間だけを実際に直進する動作を定義して...
***プログラムの開始,およびプログラム内での設定 [#iff5d614]
task main ()
{
SetSensorLight(S2); // (10)
int nOnline=0; //連続してラインを認識した回数...
long t0=CurrentTick(); //起動開始時点の時間を記録 (12)
(10)ではライトセンサーが本体の接続部2に接続されているこ...
(11)ではライトセンサーが「黒」を感知した際にカウントされ...
(12)ではプログラムを開始した瞬間の時間をt0という値に代入...
***ボールを確保するためのプログラム [#gaae9e77]
OnFwd(OUT_BC,35);Wait(600);Off(OUT_BC); // (13)
OnFwd(OUT_A,30);Wait(780);Off(OUT_A); // (14)
OnFwd(OUT_BC,35);Wait(300);Off(OUT_BC); // (15)
(13)はボールを爪の中に完璧に入れるための前進動作を表して...
&ref(2012b/Member/HIBINO/Mission1/開始位置.jpg,70%,開始位...
尚,開始位置は↑の図のようにしてある.課題として扱われるほど...
(14)はアームを閉じる動作を表している.尚,Aはアームに対応し...
(15)ではボールを確保した後,ライントレースを開始しやすい位...
***ライントレースのプログラム [#v145c98d]
while (true){
while (nOnline < nMAX) { // (16)
if (SENSOR_2 < THRESHOLD){ // (17)
turn_left1; // (17')
nOnline++; // (18)
}else{
if (SENSOR_2 < THRESHOLD-2){ // (19)
turn_left0; // (19')
}else if (SENSOR_2 < THRESHOLD+3){ // (20)
go_forward; // (20')
}else if (SENSOR_2 < THRESHOLD+7){ //...
turn_right0; // (21')
}else{
turn_right1;} // (22)
nOnline=0; // (23)
}
}
(16)では(11)で説明した「黒を感知した回数」が(7)で定義した...
(17)は(16)を満たした場合今ライトセンサーが当たっている地...
(19)は(1)で定義した基準値から2を引いた,つまり,より黒い場...
(20)は(1)で定義した基準値に3を足した,つまりより白い場所に...
(21)は(1)で定義した基準値に7を足した,つまり(20)よりも白い...
(22)は(17)(19)(20)(21)のどの判断にも当てはまらない場合,つ...
(23)は今までのライントレースの動作全てを終えた段階で(11)...
尚,これらの基準値±の値については全て試行錯誤から見つけた...
***交差点を越えるプログラム [#xa12f116]
short_break; //
turn_right1; Wait(200); // (24)
cross_line; // (25)
nOnline=0; // (26)
(16)において(11)の値が(7)の値を超えた場合「交差点を越える...
(24)はその場右回転の動作である.課題のコースでは交差点に差...
(25)は(24)で方向を調節した上でライントレースを無視し,(9)...
(26)では(11)の値を再び0にリセットしている.(25)の段階で交...
***ボールをゴールに入れるプログラム [#k6f56a49]
if(CurrentTick() - t0 >= 50000){ // (27)
OnFwd(OUT_A,-100);Wait(600); // (28)
(27)は交差点を越えた時,その瞬間の時間から(12)で設定した開...
&ref(2012b/Member/HIBINO/Mission1/02.png,60%,ゴール前交差...
(28)はアームを開く動作を表している.アーム内のボールを前方...
尚,ボールを転がす向きであるがゴール前の交差点((27)の説明...
*感想 [#o8c9e805]
ただライントレースをするだけならばアームを取り付ける必要...
ページ名: