2012b/Member/Konbu/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2012b/Member]]
#contents
* メンバー [#m268be8b]
Konbu・・・・繊維学部機械ロボット学系 ロボ作り初心者。
ARomeo・・・理学部応用生物学科 社長。
*課題 [#iaa20874]
・図のようなコースを各自で作成した上で、次のような動作を...
・1人目 i.スタート地点から出発し、スタート地点外のすぐ近...
ii.ピンポン玉をつかんだら速やかにスタート地点の境界の黒...
iii.ゴール地点に到達したら、ゴールエリア外からピンポン玉...
・2人目 i.上の動作でスタートとゴールを逆にして同様の動き...
#ref(2012b-mission1.png)
*ロボットの紹介 [#kd97b0ad]
・説明
高さと長さが目立つ構造で、ヘラクレスオオカブトに似た形に...
アーム部分を、ボールを取る動作と蹴る動作をなるべく簡略す...
#ref(201212172028000.jpg)
・写真の真ん中の黄色のアーム部分でボールを捉え、左の黒の...
右のアームはアーム全体を持ち上げるのと同時にボールが発射...
#ref(201212171955000.jpg)
・このように三つのアームから成り立つ機構であり、モーターB...
#ref(201212172037000.jpg)
*プログラム [#c26f0cb0]
**戦略 1 [#t6e8ee4f]
交差点を曲がらないようにするため黒い線を捉えると直進する...
しかしそれでは二個目の交差点を越えられないので、タイマー...
を切り替えることにしました。
大きく分けて四つのプログラムから成り立ってをり、
なるべく時間の誤差が少なくするためにプログラムの切り替え...
#define BLACK 35 //しきい値
#define u_turn OnRev(OUT_A); OnFwd(OUT_C); //モーター...
#define go_forward OnFwd(OUT_AC); // 前進
#define turn_left OnRev(OUT_A); OnFwd(OUT_C); // モ...
#define turn_right OnFwd(OUT_A); OnRev(OUT_C); // モー...
#define n_turn OnFwd(OUT_A); OnRev(OUT_C); // モー...
#define STEP 1
task main()
{
SetSensor(SENSOR_3, SENSOR_LIGHT);
ClearTimer(3);
OnFwd(OUT_B); // ? 所定地からボールを取るた...
Wait(20);
OnFwd(OUT_AC);
Wait(90);
Off(OUT_B);
Off(OUT_AC);
Wait(70);
OnFwd(OUT_AC);
Wait(30);
ClearTimer(3);
while (FastTimer(3) <=100){ // ?ボールを取った...
if (SENSOR_3 <= BLACK){ プログラム。
Off(OUT_AC); ...
Wait(50);
} else if(SENSOR_3 > BLACK && FastTimer(3) <=40){
OnFwd(OUT_AC);
Wait(5);
} else if(SENSOR_3 > BLACK && FastTimer(3) >40){
OnRev(OUT_AC);
Wait(5);
}
}
ClearTimer(3);
while (FastTimer(3) <=650){ // ?
if (SENSOR_3 <= BLACK){
go_forward;
Wait(10);
turn_right;
Wait(10);
ClearTimer(0);
}else if(FastTimer(0) >=100){
u_turn;
ClearTimer(0);
}else if(FastTimer(0) >40){
turn_right;
}else if(SENSOR_3 > BLACK){
turn_left;
}
}
Off(OUT_AC);
Wait(5);
u_turn;
Wait(40);
ClearTimer(3);
while (FastTimer(3) <=100){
if (SENSOR_3 <= BLACK){
Off(OUT_AC);
Wait(50);
} else if(SENSOR_3 > BLACK){
u_turn;
Wait(10);
}
}
Off(OUT_AC);
Wait(10);
ClearTimer(3);
while (FastTimer(3) <=2400){ // ?
if (SENSOR_3 < BLACK ){
go_forward;
ClearTimer(1);
ClearTimer(0);
}else if(SENSOR_3 > BLACK && FastTimer(1) >=60){
n_turn
}else if(SENSOR_3 > BLACK && FastTimer(0) >=20){
turn_left;
}else if(SENSOR_3 > BLACK ){
turn_right;
}
}
Off(OUT_AC);
Wait(5);
ClearTimer(3);
while (FastTimer(3) <=1000){ // ?
if (SENSOR_3 < BLACK ){
go_forward;
ClearTimer(1);
ClearTimer(0);
}else if( FastTimer(1) >=10){
u_turn;
}else if( FastTimer(0) >=70){
turn_right;
}else if(SENSOR_3 > BLACK ){
turn_left;
}
}
Off(OUT_AC);
Wait(5);
ClearTimer(3);
while (FastTimer(3) <= 800){ // ?
if (SENSOR_3 < BLACK){
go_forward;
Wait(10);
ClearTimer(0);
}else if(SENSOR_3 > BLACK && FastTimer(0) >=40){
n_turn;
}else if(SENSOR_3 > BLACK && FastTimer(0) >=10){
turn_left;
}else if(SENSOR_3 > BLACK){
turn_right;
}
}
Off(OUT_AC); // ?
Wait(100);
OnRev(OUT_AC);
Wait(60);
Off(OUT_AC);
turn_left;
Wait(40);
OnFwd(OUT_B);
Wait(20);
Off(OUT_B);
Off(OUT_AC);
}
**戦略 2 [#g89a2a7d]
ここでは上記の?から?のプログラムの説明をしたいと思います。
#ref(無題.png)
まずこのプログラムは上の図でいう右からのスタート専用のプ...
?
SetSensor(SENSOR_3, SENSOR_LIGHT);
ClearTimer(3); //タイマー3をゼロにリセット
OnFwd(OUT_B); //モーターBを前進(アーム上昇)
Wait(20);
OnFwd(OUT_AC); //前進
Wait(90);
Off(OUT_B); //モーターBを後退(アーム下降)
Off(OUT_AC);
Wait(70);
OnFwd(OUT_AC); //前進
Wait(30);
ClearTimer(3);
ご覧の通りシンプルなプログラムでモータBをOnFwdすることに...
進み、Offにすることによりアームが自然と落ちるのでボールを...
ムが下げるという作戦です。
?
while (FastTimer(3) <=100){
if (SENSOR_3 <= BLACK){
Off(OUT_AC); //モーターABを停止
Wait(50);
} else if(SENSOR_3 > BLACK && FastTimer(3) <=40)...
OnFwd(OUT_AC); ...
Wait(5);
} else if(SENSOR_3 > BLACK && FastTimer(3) >40){...
OnRev(OUT_AC); ...
Wait(5); ...
}
}
このプログラムはボールを取ったあと光センサーが白を感知す...
ルを感知できなければバックするプログラム。ロボの最初の位...
ルを取ったあと白を感知すると、うまく動いてくれなかったの...
できるようにしました。
?
while (FastTimer(3) <=650){ //6.5秒間続ける
if (SENSOR_3 <= BLACK){ //しきい値より小さければ0...
go_forward; 0.1秒右折する。
Wait(10);
turn_right;
Wait(10);
ClearTimer(0);
}else if(FastTimer(0) >=100){ //左折が1秒以上で...
u_turn;
ClearTimer(0);
}else if(FastTimer(0) >40){ //左折が0.4秒以上で...
turn_right;
}else if(SENSOR_3 > BLACK){ //しきい値よりも...
turn_left;
}
}
Off(OUT_AC); //モーターAC停止
Wait(5);
u_turn;
Wait(40);
ClearTimer(3);
while (FastTimer(3) <=100){ //1秒間続ける
if (SENSOR_3 <= BLACK){ //しきい値より小さければ
Off(OUT_AC); 停止
Wait(50);
} else if(SENSOR_3 > BLACK){ //しきい値より大...
u_turn; uturn
Wait(10);
?はボールを取ってから最初の交差点までのプログラムで、図の...
するようにしてあります。このプログラムだけ右、左、右、左...
ムしてあり、直角を超えるためにこのようにしました。While以...
丸付近で停止した後、uturnした時に黒い線上にセンサーを持っ...
です。ここで白のままだとスタート地点まで戻ってしまいます。
?
while (FastTimer(3) <=2400){ //24秒間続ける
if (SENSOR_3 < BLACK ){ //しきい値以下だと前進
go_forward;
ClearTimer(1); //タイマー1をゼロにリセット
ClearTimer(0); //タイマー0をゼロにリセット
}else if(SENSOR_3 > BLACK && FastTimer(1) >=60){ /...
n_turn ...
}else if(SENSOR_3 > BLACK && FastTimer(0) >=20){ /...
turn_left; ...
}else if(SENSOR_3 > BLACK ){ //しき...
turn_right;
}
}
Off(OUT_AC); //停止
Wait(5);
?は図の右から二番めの赤丸まで作動するためのプログラムで、...
プログラムでもあります。交差点を渡らない方法としては、上...
体が線上に真っ直ぐになり、そのまま前進してくれるようにし...
の青丸付近で停止、プログラム終了です。
?
while (FastTimer(3) <=1000){ //10秒間続ける
if (SENSOR_3 < BLACK ){
go_forward; //前進
ClearTimer(1); //タイマー1をリセット
ClearTimer(0); //タイマー0をリセット
}else if( FastTimer(1) >=10){ //右折から0.1秒後uturn
u_turn;
}else if( FastTimer(0) >=70){ //左折から0.7秒後右折
turn_right;
}else if(SENSOR_3 > BLACK ){ //しきい値以上で左折 ...
turn_left;
}
}
Off(OUT_AC); //停止
Wait(5);
図でいうと右から三番目の赤丸までのプログラム。センサーが...
ないようにするために右折に変更するまでの時間を長くしまし...
了、?のプログラムに切り替わるとuturnしてラインをまた逆戻...
またもとの向きに戻ってくれます。(完全にいらない動き(^_^;...
?
while (FastTimer(3) <= 800){ // 8秒間続ける
if (SENSOR_3 < BLACK){ //しきし値以下で前進
go_forward;
Wait(10);
ClearTimer(0); //タイマー0をリセット
}else if(SENSOR_3 > BLACK && FastTimer(0) >=40){ /...
n_turn; ...
}else if(SENSOR_3 > BLACK && FastTimer(0) >=10){ /...
turn_left; ...
}else if(SENSOR_3 > BLACK){ //しきい...
turn_right;
}
}
最後の赤丸からゴールまでのプログラムです。ここまでプログ...
した通り時間の誤差を少なくするためです。ちょうど図の緑の...
は?のプログラムでキックがしやすい位置まで持ってくるだけで...
?
Off(OUT_AC); // ACを停止
Wait(100);
OnRev(OUT_AC); // 後退
Wait(60);
Off(OUT_AC); //停止
turn_left;
Wait(40);
OnFwd(OUT_B); //アーム上昇(キック)
Wait(20);
Off(OUT_B); //アーム下降
Off(OUT_AC); //停止
キックのためのプログラム。ゴールにむかって真っ直ぐに向き...
後退し、右よりの機体を左折することにより向きを直します。...
のと同時にキックもしてくれます(詳しくはページ上のアーム...
*ロボット制作の苦労 [#d354fb53]
**ロボット制作 [#x390a471]
アーム部分をどうするかが一番悩みました。なるべくコンパク...
思いつかずある程度場所をとってしまいました。またボールを...
ましたがどうやってボールを発射するかが悩みどころでした。...
キャッチも両方とも可能なアームを作ることができてよかって...
***プログラム制作 [#ta645719]
両方の交差点をどうしたら通過できるのかさっぱり分からずじ...
かりました。また本体の機構を変えるとプログラムも大幅に変...
とが多く、大変でした。自分の思い通りにいかなに日々が続き...
できたので良かったです。
*反省点 [#u118d3e7]
.しきい値の設定が雑だった。
.動きがカクカク
.障害物にぶつかりすぎ
などなど、たくさんの課題が残る結果になってしまいました。...
*最後に [#v9e825bc]
プログラムだけでなく機構の両方が大切なんだと思い知らされ...
//
終了行:
[[2012b/Member]]
#contents
* メンバー [#m268be8b]
Konbu・・・・繊維学部機械ロボット学系 ロボ作り初心者。
ARomeo・・・理学部応用生物学科 社長。
*課題 [#iaa20874]
・図のようなコースを各自で作成した上で、次のような動作を...
・1人目 i.スタート地点から出発し、スタート地点外のすぐ近...
ii.ピンポン玉をつかんだら速やかにスタート地点の境界の黒...
iii.ゴール地点に到達したら、ゴールエリア外からピンポン玉...
・2人目 i.上の動作でスタートとゴールを逆にして同様の動き...
#ref(2012b-mission1.png)
*ロボットの紹介 [#kd97b0ad]
・説明
高さと長さが目立つ構造で、ヘラクレスオオカブトに似た形に...
アーム部分を、ボールを取る動作と蹴る動作をなるべく簡略す...
#ref(201212172028000.jpg)
・写真の真ん中の黄色のアーム部分でボールを捉え、左の黒の...
右のアームはアーム全体を持ち上げるのと同時にボールが発射...
#ref(201212171955000.jpg)
・このように三つのアームから成り立つ機構であり、モーターB...
#ref(201212172037000.jpg)
*プログラム [#c26f0cb0]
**戦略 1 [#t6e8ee4f]
交差点を曲がらないようにするため黒い線を捉えると直進する...
しかしそれでは二個目の交差点を越えられないので、タイマー...
を切り替えることにしました。
大きく分けて四つのプログラムから成り立ってをり、
なるべく時間の誤差が少なくするためにプログラムの切り替え...
#define BLACK 35 //しきい値
#define u_turn OnRev(OUT_A); OnFwd(OUT_C); //モーター...
#define go_forward OnFwd(OUT_AC); // 前進
#define turn_left OnRev(OUT_A); OnFwd(OUT_C); // モ...
#define turn_right OnFwd(OUT_A); OnRev(OUT_C); // モー...
#define n_turn OnFwd(OUT_A); OnRev(OUT_C); // モー...
#define STEP 1
task main()
{
SetSensor(SENSOR_3, SENSOR_LIGHT);
ClearTimer(3);
OnFwd(OUT_B); // ? 所定地からボールを取るた...
Wait(20);
OnFwd(OUT_AC);
Wait(90);
Off(OUT_B);
Off(OUT_AC);
Wait(70);
OnFwd(OUT_AC);
Wait(30);
ClearTimer(3);
while (FastTimer(3) <=100){ // ?ボールを取った...
if (SENSOR_3 <= BLACK){ プログラム。
Off(OUT_AC); ...
Wait(50);
} else if(SENSOR_3 > BLACK && FastTimer(3) <=40){
OnFwd(OUT_AC);
Wait(5);
} else if(SENSOR_3 > BLACK && FastTimer(3) >40){
OnRev(OUT_AC);
Wait(5);
}
}
ClearTimer(3);
while (FastTimer(3) <=650){ // ?
if (SENSOR_3 <= BLACK){
go_forward;
Wait(10);
turn_right;
Wait(10);
ClearTimer(0);
}else if(FastTimer(0) >=100){
u_turn;
ClearTimer(0);
}else if(FastTimer(0) >40){
turn_right;
}else if(SENSOR_3 > BLACK){
turn_left;
}
}
Off(OUT_AC);
Wait(5);
u_turn;
Wait(40);
ClearTimer(3);
while (FastTimer(3) <=100){
if (SENSOR_3 <= BLACK){
Off(OUT_AC);
Wait(50);
} else if(SENSOR_3 > BLACK){
u_turn;
Wait(10);
}
}
Off(OUT_AC);
Wait(10);
ClearTimer(3);
while (FastTimer(3) <=2400){ // ?
if (SENSOR_3 < BLACK ){
go_forward;
ClearTimer(1);
ClearTimer(0);
}else if(SENSOR_3 > BLACK && FastTimer(1) >=60){
n_turn
}else if(SENSOR_3 > BLACK && FastTimer(0) >=20){
turn_left;
}else if(SENSOR_3 > BLACK ){
turn_right;
}
}
Off(OUT_AC);
Wait(5);
ClearTimer(3);
while (FastTimer(3) <=1000){ // ?
if (SENSOR_3 < BLACK ){
go_forward;
ClearTimer(1);
ClearTimer(0);
}else if( FastTimer(1) >=10){
u_turn;
}else if( FastTimer(0) >=70){
turn_right;
}else if(SENSOR_3 > BLACK ){
turn_left;
}
}
Off(OUT_AC);
Wait(5);
ClearTimer(3);
while (FastTimer(3) <= 800){ // ?
if (SENSOR_3 < BLACK){
go_forward;
Wait(10);
ClearTimer(0);
}else if(SENSOR_3 > BLACK && FastTimer(0) >=40){
n_turn;
}else if(SENSOR_3 > BLACK && FastTimer(0) >=10){
turn_left;
}else if(SENSOR_3 > BLACK){
turn_right;
}
}
Off(OUT_AC); // ?
Wait(100);
OnRev(OUT_AC);
Wait(60);
Off(OUT_AC);
turn_left;
Wait(40);
OnFwd(OUT_B);
Wait(20);
Off(OUT_B);
Off(OUT_AC);
}
**戦略 2 [#g89a2a7d]
ここでは上記の?から?のプログラムの説明をしたいと思います。
#ref(無題.png)
まずこのプログラムは上の図でいう右からのスタート専用のプ...
?
SetSensor(SENSOR_3, SENSOR_LIGHT);
ClearTimer(3); //タイマー3をゼロにリセット
OnFwd(OUT_B); //モーターBを前進(アーム上昇)
Wait(20);
OnFwd(OUT_AC); //前進
Wait(90);
Off(OUT_B); //モーターBを後退(アーム下降)
Off(OUT_AC);
Wait(70);
OnFwd(OUT_AC); //前進
Wait(30);
ClearTimer(3);
ご覧の通りシンプルなプログラムでモータBをOnFwdすることに...
進み、Offにすることによりアームが自然と落ちるのでボールを...
ムが下げるという作戦です。
?
while (FastTimer(3) <=100){
if (SENSOR_3 <= BLACK){
Off(OUT_AC); //モーターABを停止
Wait(50);
} else if(SENSOR_3 > BLACK && FastTimer(3) <=40)...
OnFwd(OUT_AC); ...
Wait(5);
} else if(SENSOR_3 > BLACK && FastTimer(3) >40){...
OnRev(OUT_AC); ...
Wait(5); ...
}
}
このプログラムはボールを取ったあと光センサーが白を感知す...
ルを感知できなければバックするプログラム。ロボの最初の位...
ルを取ったあと白を感知すると、うまく動いてくれなかったの...
できるようにしました。
?
while (FastTimer(3) <=650){ //6.5秒間続ける
if (SENSOR_3 <= BLACK){ //しきい値より小さければ0...
go_forward; 0.1秒右折する。
Wait(10);
turn_right;
Wait(10);
ClearTimer(0);
}else if(FastTimer(0) >=100){ //左折が1秒以上で...
u_turn;
ClearTimer(0);
}else if(FastTimer(0) >40){ //左折が0.4秒以上で...
turn_right;
}else if(SENSOR_3 > BLACK){ //しきい値よりも...
turn_left;
}
}
Off(OUT_AC); //モーターAC停止
Wait(5);
u_turn;
Wait(40);
ClearTimer(3);
while (FastTimer(3) <=100){ //1秒間続ける
if (SENSOR_3 <= BLACK){ //しきい値より小さければ
Off(OUT_AC); 停止
Wait(50);
} else if(SENSOR_3 > BLACK){ //しきい値より大...
u_turn; uturn
Wait(10);
?はボールを取ってから最初の交差点までのプログラムで、図の...
するようにしてあります。このプログラムだけ右、左、右、左...
ムしてあり、直角を超えるためにこのようにしました。While以...
丸付近で停止した後、uturnした時に黒い線上にセンサーを持っ...
です。ここで白のままだとスタート地点まで戻ってしまいます。
?
while (FastTimer(3) <=2400){ //24秒間続ける
if (SENSOR_3 < BLACK ){ //しきい値以下だと前進
go_forward;
ClearTimer(1); //タイマー1をゼロにリセット
ClearTimer(0); //タイマー0をゼロにリセット
}else if(SENSOR_3 > BLACK && FastTimer(1) >=60){ /...
n_turn ...
}else if(SENSOR_3 > BLACK && FastTimer(0) >=20){ /...
turn_left; ...
}else if(SENSOR_3 > BLACK ){ //しき...
turn_right;
}
}
Off(OUT_AC); //停止
Wait(5);
?は図の右から二番めの赤丸まで作動するためのプログラムで、...
プログラムでもあります。交差点を渡らない方法としては、上...
体が線上に真っ直ぐになり、そのまま前進してくれるようにし...
の青丸付近で停止、プログラム終了です。
?
while (FastTimer(3) <=1000){ //10秒間続ける
if (SENSOR_3 < BLACK ){
go_forward; //前進
ClearTimer(1); //タイマー1をリセット
ClearTimer(0); //タイマー0をリセット
}else if( FastTimer(1) >=10){ //右折から0.1秒後uturn
u_turn;
}else if( FastTimer(0) >=70){ //左折から0.7秒後右折
turn_right;
}else if(SENSOR_3 > BLACK ){ //しきい値以上で左折 ...
turn_left;
}
}
Off(OUT_AC); //停止
Wait(5);
図でいうと右から三番目の赤丸までのプログラム。センサーが...
ないようにするために右折に変更するまでの時間を長くしまし...
了、?のプログラムに切り替わるとuturnしてラインをまた逆戻...
またもとの向きに戻ってくれます。(完全にいらない動き(^_^;...
?
while (FastTimer(3) <= 800){ // 8秒間続ける
if (SENSOR_3 < BLACK){ //しきし値以下で前進
go_forward;
Wait(10);
ClearTimer(0); //タイマー0をリセット
}else if(SENSOR_3 > BLACK && FastTimer(0) >=40){ /...
n_turn; ...
}else if(SENSOR_3 > BLACK && FastTimer(0) >=10){ /...
turn_left; ...
}else if(SENSOR_3 > BLACK){ //しきい...
turn_right;
}
}
最後の赤丸からゴールまでのプログラムです。ここまでプログ...
した通り時間の誤差を少なくするためです。ちょうど図の緑の...
は?のプログラムでキックがしやすい位置まで持ってくるだけで...
?
Off(OUT_AC); // ACを停止
Wait(100);
OnRev(OUT_AC); // 後退
Wait(60);
Off(OUT_AC); //停止
turn_left;
Wait(40);
OnFwd(OUT_B); //アーム上昇(キック)
Wait(20);
Off(OUT_B); //アーム下降
Off(OUT_AC); //停止
キックのためのプログラム。ゴールにむかって真っ直ぐに向き...
後退し、右よりの機体を左折することにより向きを直します。...
のと同時にキックもしてくれます(詳しくはページ上のアーム...
*ロボット制作の苦労 [#d354fb53]
**ロボット制作 [#x390a471]
アーム部分をどうするかが一番悩みました。なるべくコンパク...
思いつかずある程度場所をとってしまいました。またボールを...
ましたがどうやってボールを発射するかが悩みどころでした。...
キャッチも両方とも可能なアームを作ることができてよかって...
***プログラム制作 [#ta645719]
両方の交差点をどうしたら通過できるのかさっぱり分からずじ...
かりました。また本体の機構を変えるとプログラムも大幅に変...
とが多く、大変でした。自分の思い通りにいかなに日々が続き...
できたので良かったです。
*反省点 [#u118d3e7]
.しきい値の設定が雑だった。
.動きがカクカク
.障害物にぶつかりすぎ
などなど、たくさんの課題が残る結果になってしまいました。...
*最後に [#v9e825bc]
プログラムだけでなく機構の両方が大切なんだと思い知らされ...
//
ページ名: