2019a/Member/www/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2019a/Member]]
#contents
*課題2 [#x90f493c]
下の図のようなコースを書くチームで作成し、「ミッション」...
黒い線にそって動くロボットを作成する。
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
二つのコースがあり、私は
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
というコースを選んだ。
下の図で青→緑の矢印の順で動き、緑の矢印はピンポン玉を運ん...
#ref(2019a/Member/www/Mission2/keiro2.jpg,50%)
*ロボットの説明 [#g78a6f3b]
**全体像 [#v29e5613]
#ref(2019a/Member/www/Mission2/zentai_uekara.jpg)
#ref(2019a/Member/www/Mission2/zentai'.jpg)
ピンポン玉をつかむ機構を取り付けたことで、RISの本体を後ろ...
**光センサー [#na9121e3]
#ref(2019a/Member/www/Mission2/hikari'.jpg,30%)
光センサーはタイヤのすぐ前に設置した。センサーをタイヤに...
**タイヤ [#h40ada04]
#ref(2019a/Member/www/Mission2/ura.jpg)
タイヤを4つではなく、3つにすることで、旋回しやすく動き...
**アーム [#u102f2d2]
#ref(2019a/Member/www/Mission2/te_uekara.jpg)
アームはピンポン玉を挟むような形にした。
#ref(2019a/Member/www/Mission2/hasamu'.jpg)
異なる方向にアームが回転し、動くようにするために、ギアの...
また、コンパクトに見えるように、ギアを上下に配置し、アー...
#ref(2019a/Member/www/Mission2/te_yokokara.jpg)
また、前回同様、アームの開き具合の微調節のために、青いパ...
*プロブラムについて [#r8e9cc5d]
**ライントレースの仕組み [#zdbb814b]
コースの関係上右側のふちをライントレースするようにした。
光センサーの下の明るさを値として検知して、検出された値に...
私たちは、以下のように5段階に値を決めた。
#ref(2019a/Member/www/Mission2/michi.jpg,50%)
以下が、その値で行う動作である。
#ref(2019a/Member/www/Mission2/atai1.jpg,30%)
**交差点の認識方法 [#h78db748]
ライントレースをしていて交差点に進入すると、黒が一定時間...
普通の交差点と、円形交差点では、下の図のように黒の部分を...
#ref(2019a/Member/www/Mission2/kousaten'.jpg,30%)
**プログラムの説明 [#p2fa6173]
上で説明した動作を行うために以下のマクロを定義した。
-グローバル変数
int t;
-光センサーの値
#define kuro 41 //真っ黒
#define kurohai 43 //黒
#define hai 46 //灰
#define shirohai 48 //白
-ライントレースの動作のための定義
#define go_ahead OnFwd(OUT_AC); //直進
#define turn_left SetPower(OUT_AC,3);Off(OUT_A);OnFwd(OU...
#define turn_right SetPower(OUT_AC,3);Off(OUT_C);OnFwd(...
#define Uturn_left SetPower(OUT_AC,3);OnRev(OUT_A);OnFwd...
#define Uturn_right SetPower(OUT_AC,3);OnRev(OUT_C);OnFw...
-一時停止
#define kyukei Wait(100); //1秒停止
-一つの動作の継続時間
#define STEP 1
***ライントレースをする [#xe0ec899]
下にライントレースに使用したサブルーチンを示す。
円形交差点と普通の交差点では、前者のほうが走行距離が短く...
sub follow_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //タイマー0をリセット
while(FastTimer(0)<t) //タイマーの値がt未満...
{
if(SENSOR_2<kuro)
{
Uturn_right; //真っ黒なら右旋回せよ
}
else if(SENSOR_2<kurohai)
{
turn_right;ClearTimer(0); //黒なら右に曲...
}
else if(SENSOR_2<hai)
{
go_ahead;ClearTimer(0); //灰なら直進せよ
}
else if(SENSOR_2<shirohai)
{
turn_left;ClearTimer(0); //白なら左に曲...
}
else
{
Uturn_left;ClearTimer(0); //真っ白なら左...
}
Wait(STEP);
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***ライントレースをする(時間制御) [#s063f25c]
グローバル変数tで指定した時間だけ止まることなくライントレ...
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //タイマー0をリセットする
while(FastTimer(0)<t) //タイマーの値がt未満の間繰...
{
if(SENSOR_2<kuro)
{
Uturn_right; //真っ黒なら右旋回せよ
}
else if(SENSOR_2<kurohai)
{
turn_right; //黒なら右に曲がれ
}
else if(SENSOR_2<hai)
{
go_ahead; //灰なら直進せよ
}
else if(SENSOR_2<shirohai)
{
turn_left; //白なら左に曲がれ
}
else
{
Uturn_left; //真っ白なら左旋回せよ
}
Wait(STEP);
}
Off(OUT_AC); //止まれ
}
***交差点を直進する [#o2284c36]
#ref(2019a/Member/www/Mission2/kousaten.jpg,50%)
交差点を認識し、停止している車体に交差点を直進させるため...
sub cross_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<hai)
{
go_ahead; //黒ければ直進せよ
}
Off(OUT_AC);
kyukei; //一時停止
while(SENSOR_2>hai)
{
Uturn_left; //白ければ左旋回せよ
}
Off(OUT_AC);
kyukei; //一時停止
}
***交差点を右折する [#y4c741f0]
交差点を右折するためのプログラムで、白になるまで右旋回し...
sub kousaten_turn_right()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<shirohai)
{
Uturn_right; //黒ければ右旋回せよ
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***交差点を左折する [#d177beda]
交差点を左折するためのプログラムで、黒ければ直進し、白く...
sub kousaten_turn_left()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<hai)
{
go_ahead; //黒ければ直進せよ
}
Off(OUT_AC);
kyukei;
while(SENSOR_2>hai)
{
Uturn_left; //白ければ左旋回せよ
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***ピンポン玉をつかむ [#s5288873]
モーターの回転速度ゆっくりにするために、SetPowerを使用し...
sub pinpon_catch()
{
SetPower(OUT_B,1);
OnRev(OUT_B);
Wait(30); //アームを閉じる
Off(OUT_B); //止まる
kyukei; //一時停止
}
***ピンポン玉を放す [#v841cdc6]
ピンポン玉を放す前、交差点を認識して止まるようなプログラ...
また、ピンポン玉をシュートするために、少し下がるようにし...
sub shoot()
{
OnFwd(OUT_C);
Wait(20); //左に曲がる
Off(OUT_C);
Wait(100);
SetPower(OUT_B,1);
OnFwd(OUT_B);
Wait(20); //アームを開く
Off(OUT_B);
Wait(100);
OnRev(OUT_AC);
Wait(31); //後ろに下がる
Off(OUT_AC);
}
**メインプログラム [#e738b3af]
***円形交差点に行くまで [#g6170629]
task main()
{
OnFwd(OUT_AC); //スタート
Wait(80);
Off(OUT_AC);
kyukei;
t=20;follow_line1(); //AからCへ移動
cross_line(); //CのT字路を直進する
t=20;follow_line1(); //CからDへ移動
cross_line(); //Dの交差点を直進する
t=20;follow_line1(); //DからEへ移動
kousaten_turn_right(); //Eを右折する
t=100;follow_line2(); //EからFへ移動
t=20;follow_line1();
kousaten_turn_right(); //Fを右折する
t=50;follow_line2(); //FからGへ移動
t=15;follow_line1();
***円形交差点内でのプログラム [#da4295ef]
円形交差点を交差点として誤認識しないように、0.9秒間は止ま...
kousaten_turn_right(); //Gを右折する
t=90;follow_line2(); // GからHへ移動
t=15;follow_line1();
cross_line(); //Hを直進
t=90;follow_line2(); // HからIへ移動
t=15;follow_line1();
cross_line(); //Iを直進
t=90;follow_line2(); // IからJへ移動
t=15;follow_line1();
kousaten_turn_right(); //Jを右折する
***ピンポン球をつかむまで [#ic073636]
交差点を左折してからピンポン球をつかむまでに進む秒数を計...
t=70;follow_line2(); // JからKへ移動
t=15;follow_line1();
kousaten_turn_left(); //Kを左折する
t=125;follow_line2(); //KからLからへ移動
kyukei; //一秒停止
pinpon_catch(); //ピンポン玉をつかむ
***ピンポン球を運ぶ [#ca714552]
半径の小さい道があったため、交差点を誤認識しないようにす...
t=20;follow_line1(); LからKへ移動
cross_line(); //KのT字路を直進する
t=1000;follow_line2();
t=20;follow_line1(); //KからMまで移動
***ピンポン球をシュートする [#gdf038a3]
最初、ピンポン玉をはなした後、ロボットを前進させてシュー...
ピンポン球をシュートするために、ピンポン球をはなした後、...
シュートの手順は以下の通り。
1.向きを直した後
#ref(2019a/Member/www/Mission2/motteru.jpg,30%)
2.アームを開く
#ref(2019a/Member/www/Mission2/hanasita.jpg,30%)
3.後ろに下がる
この写真では下がりすぎだが、ピンポン玉をはじくために少し...
#ref(2019a/Member/www/Mission2/sagatta.jpg,30%)
4.アームを閉じる
#ref(2019a/Member/www/Mission2/hajikuyo.jpg,30%)
5.シュートする
アームをとじる動作を利用してピンポン玉をはじきとばす。
#ref(2019a/Member/www/Mission2/tonndetta'.jpg,30%)
以下が、ピンポン玉をシュートするためのプログラムである。
shoot(); // ピンポン玉をはなす
pinpon_catch(); //ピンポン玉をはじく
}
*まとめ [#j4b36b15]
ピンポン玉をシュートした後、A地点に入るプログラムを書く...
ただ、何度か繰り返し動かしているうちに同じように動かして...
終了行:
[[2019a/Member]]
#contents
*課題2 [#x90f493c]
下の図のようなコースを書くチームで作成し、「ミッション」...
黒い線にそって動くロボットを作成する。
交差点では1秒間停止し、丁字路では直角方向に進入する時のみ...
二つのコースがあり、私は
A地点から出発 → B → C(直進) → D(一時停止の後、直進) → E →...
というコースを選んだ。
下の図で青→緑の矢印の順で動き、緑の矢印はピンポン玉を運ん...
#ref(2019a/Member/www/Mission2/keiro2.jpg,50%)
*ロボットの説明 [#g78a6f3b]
**全体像 [#v29e5613]
#ref(2019a/Member/www/Mission2/zentai_uekara.jpg)
#ref(2019a/Member/www/Mission2/zentai'.jpg)
ピンポン玉をつかむ機構を取り付けたことで、RISの本体を後ろ...
**光センサー [#na9121e3]
#ref(2019a/Member/www/Mission2/hikari'.jpg,30%)
光センサーはタイヤのすぐ前に設置した。センサーをタイヤに...
**タイヤ [#h40ada04]
#ref(2019a/Member/www/Mission2/ura.jpg)
タイヤを4つではなく、3つにすることで、旋回しやすく動き...
**アーム [#u102f2d2]
#ref(2019a/Member/www/Mission2/te_uekara.jpg)
アームはピンポン玉を挟むような形にした。
#ref(2019a/Member/www/Mission2/hasamu'.jpg)
異なる方向にアームが回転し、動くようにするために、ギアの...
また、コンパクトに見えるように、ギアを上下に配置し、アー...
#ref(2019a/Member/www/Mission2/te_yokokara.jpg)
また、前回同様、アームの開き具合の微調節のために、青いパ...
*プロブラムについて [#r8e9cc5d]
**ライントレースの仕組み [#zdbb814b]
コースの関係上右側のふちをライントレースするようにした。
光センサーの下の明るさを値として検知して、検出された値に...
私たちは、以下のように5段階に値を決めた。
#ref(2019a/Member/www/Mission2/michi.jpg,50%)
以下が、その値で行う動作である。
#ref(2019a/Member/www/Mission2/atai1.jpg,30%)
**交差点の認識方法 [#h78db748]
ライントレースをしていて交差点に進入すると、黒が一定時間...
普通の交差点と、円形交差点では、下の図のように黒の部分を...
#ref(2019a/Member/www/Mission2/kousaten'.jpg,30%)
**プログラムの説明 [#p2fa6173]
上で説明した動作を行うために以下のマクロを定義した。
-グローバル変数
int t;
-光センサーの値
#define kuro 41 //真っ黒
#define kurohai 43 //黒
#define hai 46 //灰
#define shirohai 48 //白
-ライントレースの動作のための定義
#define go_ahead OnFwd(OUT_AC); //直進
#define turn_left SetPower(OUT_AC,3);Off(OUT_A);OnFwd(OU...
#define turn_right SetPower(OUT_AC,3);Off(OUT_C);OnFwd(...
#define Uturn_left SetPower(OUT_AC,3);OnRev(OUT_A);OnFwd...
#define Uturn_right SetPower(OUT_AC,3);OnRev(OUT_C);OnFw...
-一時停止
#define kyukei Wait(100); //1秒停止
-一つの動作の継続時間
#define STEP 1
***ライントレースをする [#xe0ec899]
下にライントレースに使用したサブルーチンを示す。
円形交差点と普通の交差点では、前者のほうが走行距離が短く...
sub follow_line1()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //タイマー0をリセット
while(FastTimer(0)<t) //タイマーの値がt未満...
{
if(SENSOR_2<kuro)
{
Uturn_right; //真っ黒なら右旋回せよ
}
else if(SENSOR_2<kurohai)
{
turn_right;ClearTimer(0); //黒なら右に曲...
}
else if(SENSOR_2<hai)
{
go_ahead;ClearTimer(0); //灰なら直進せよ
}
else if(SENSOR_2<shirohai)
{
turn_left;ClearTimer(0); //白なら左に曲...
}
else
{
Uturn_left;ClearTimer(0); //真っ白なら左...
}
Wait(STEP);
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***ライントレースをする(時間制御) [#s063f25c]
グローバル変数tで指定した時間だけ止まることなくライントレ...
sub follow_line2()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0); //タイマー0をリセットする
while(FastTimer(0)<t) //タイマーの値がt未満の間繰...
{
if(SENSOR_2<kuro)
{
Uturn_right; //真っ黒なら右旋回せよ
}
else if(SENSOR_2<kurohai)
{
turn_right; //黒なら右に曲がれ
}
else if(SENSOR_2<hai)
{
go_ahead; //灰なら直進せよ
}
else if(SENSOR_2<shirohai)
{
turn_left; //白なら左に曲がれ
}
else
{
Uturn_left; //真っ白なら左旋回せよ
}
Wait(STEP);
}
Off(OUT_AC); //止まれ
}
***交差点を直進する [#o2284c36]
#ref(2019a/Member/www/Mission2/kousaten.jpg,50%)
交差点を認識し、停止している車体に交差点を直進させるため...
sub cross_line()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<hai)
{
go_ahead; //黒ければ直進せよ
}
Off(OUT_AC);
kyukei; //一時停止
while(SENSOR_2>hai)
{
Uturn_left; //白ければ左旋回せよ
}
Off(OUT_AC);
kyukei; //一時停止
}
***交差点を右折する [#y4c741f0]
交差点を右折するためのプログラムで、白になるまで右旋回し...
sub kousaten_turn_right()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<shirohai)
{
Uturn_right; //黒ければ右旋回せよ
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***交差点を左折する [#d177beda]
交差点を左折するためのプログラムで、黒ければ直進し、白く...
sub kousaten_turn_left()
{
SetSensor(SENSOR_2,SENSOR_LIGHT);
while(SENSOR_2<hai)
{
go_ahead; //黒ければ直進せよ
}
Off(OUT_AC);
kyukei;
while(SENSOR_2>hai)
{
Uturn_left; //白ければ左旋回せよ
}
Off(OUT_AC); //止まれ
kyukei; //一秒停止
}
***ピンポン玉をつかむ [#s5288873]
モーターの回転速度ゆっくりにするために、SetPowerを使用し...
sub pinpon_catch()
{
SetPower(OUT_B,1);
OnRev(OUT_B);
Wait(30); //アームを閉じる
Off(OUT_B); //止まる
kyukei; //一時停止
}
***ピンポン玉を放す [#v841cdc6]
ピンポン玉を放す前、交差点を認識して止まるようなプログラ...
また、ピンポン玉をシュートするために、少し下がるようにし...
sub shoot()
{
OnFwd(OUT_C);
Wait(20); //左に曲がる
Off(OUT_C);
Wait(100);
SetPower(OUT_B,1);
OnFwd(OUT_B);
Wait(20); //アームを開く
Off(OUT_B);
Wait(100);
OnRev(OUT_AC);
Wait(31); //後ろに下がる
Off(OUT_AC);
}
**メインプログラム [#e738b3af]
***円形交差点に行くまで [#g6170629]
task main()
{
OnFwd(OUT_AC); //スタート
Wait(80);
Off(OUT_AC);
kyukei;
t=20;follow_line1(); //AからCへ移動
cross_line(); //CのT字路を直進する
t=20;follow_line1(); //CからDへ移動
cross_line(); //Dの交差点を直進する
t=20;follow_line1(); //DからEへ移動
kousaten_turn_right(); //Eを右折する
t=100;follow_line2(); //EからFへ移動
t=20;follow_line1();
kousaten_turn_right(); //Fを右折する
t=50;follow_line2(); //FからGへ移動
t=15;follow_line1();
***円形交差点内でのプログラム [#da4295ef]
円形交差点を交差点として誤認識しないように、0.9秒間は止ま...
kousaten_turn_right(); //Gを右折する
t=90;follow_line2(); // GからHへ移動
t=15;follow_line1();
cross_line(); //Hを直進
t=90;follow_line2(); // HからIへ移動
t=15;follow_line1();
cross_line(); //Iを直進
t=90;follow_line2(); // IからJへ移動
t=15;follow_line1();
kousaten_turn_right(); //Jを右折する
***ピンポン球をつかむまで [#ic073636]
交差点を左折してからピンポン球をつかむまでに進む秒数を計...
t=70;follow_line2(); // JからKへ移動
t=15;follow_line1();
kousaten_turn_left(); //Kを左折する
t=125;follow_line2(); //KからLからへ移動
kyukei; //一秒停止
pinpon_catch(); //ピンポン玉をつかむ
***ピンポン球を運ぶ [#ca714552]
半径の小さい道があったため、交差点を誤認識しないようにす...
t=20;follow_line1(); LからKへ移動
cross_line(); //KのT字路を直進する
t=1000;follow_line2();
t=20;follow_line1(); //KからMまで移動
***ピンポン球をシュートする [#gdf038a3]
最初、ピンポン玉をはなした後、ロボットを前進させてシュー...
ピンポン球をシュートするために、ピンポン球をはなした後、...
シュートの手順は以下の通り。
1.向きを直した後
#ref(2019a/Member/www/Mission2/motteru.jpg,30%)
2.アームを開く
#ref(2019a/Member/www/Mission2/hanasita.jpg,30%)
3.後ろに下がる
この写真では下がりすぎだが、ピンポン玉をはじくために少し...
#ref(2019a/Member/www/Mission2/sagatta.jpg,30%)
4.アームを閉じる
#ref(2019a/Member/www/Mission2/hajikuyo.jpg,30%)
5.シュートする
アームをとじる動作を利用してピンポン玉をはじきとばす。
#ref(2019a/Member/www/Mission2/tonndetta'.jpg,30%)
以下が、ピンポン玉をシュートするためのプログラムである。
shoot(); // ピンポン玉をはなす
pinpon_catch(); //ピンポン玉をはじく
}
*まとめ [#j4b36b15]
ピンポン玉をシュートした後、A地点に入るプログラムを書く...
ただ、何度か繰り返し動かしているうちに同じように動かして...
ページ名: